/
ArtemNech
/
simpleOpenGL
Обзор
Документация
Войти
/
ArtemNech
/
simpleOpenGL
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
devOpt
tests/ttestcontroller.cpp
162 строки
6 KB
Artem Nechitaylenko
selection lines added
20 май 2026, 13:54
20 май 2026, 13:54
cc7cbb6
Код
Авторство
О чём код?
#include "ttestcontroller.h" #include "../backend/diagram/CInteractionController.h" #include "backend/diagram/IDiagram.h" // ==================== МОК ДЛЯ IDIAGRAM ==================== class MockDiagram : public elem::IDiagram { private: std::vector<elem::IDiagramObject*> array; ngraph::NTransform trans{}; public: int deleteSelectedCalled{0}; int selectAllCalled{0}; bool selectAllValue{false}; void deleteSelectedObjects() override { deleteSelectedCalled++; } void selectAll(bool isSelect) override { selectAllCalled++; selectAllValue = isSelect; } // Остальные заглушки [[nodiscard]] EDiagramType diagramType() const override { return EDT_Simple; } [[nodiscard]] std::string name() const override { return "Mock"; } [[nodiscard]] ngraph::NRectF documentBounds() const override { return {}; } [[nodiscard]] elem::IDiagramObject* findObjectById(uint64_t id) const override { return nullptr; } std::vector<elem::IDiagramObject*> &objects() override { return array; } std::vector<elem::STextElement> textElements() override { return {}; } void setup_addObject_callback(std::function<void(elem::IDiagramObject*)>) override {} void setup_removeObject_callback(std::function<void(elem::IDiagramObject*)>) override {} std::vector<elem::IDiagramObject*> getSelectedObjects() override { return {}; } bool canDropHere(const elem::IDiagramObject* obj, const ngraph::NPointF & worldPos) const override { return true; } std::vector<elem::IDiagramObject*> visibleObjects(const ngraph::NRectF & viewport) override {return {}; } void clearDiagram() override{} void setInteractionController(CInteractionController * controller) override{} void moveObject(elem::IDiagramObject * object, const ngraph::NPointF &worldPos) override {} bool addObject(elem::IDiagramObject *object, const ngraph::NPointF & worldPos) override { return false;} ngraph::NTransform & viewTransform() override { return trans;} NDrag* dragObjects() override { return nullptr; } elem::IDiagramObject * objectsAt(const ngraph::NPointF & worldPos) override { return nullptr;} bool addTemporaryLine(const elem::CLine &line, const ngraph::NPointF & wPos) override {return false; } bool startLine(const ngraph::NPointF & worldPos) override { return false;} bool finalizeLine(const elem::CLine &line) override { return false;} void setCurrentPosition(const ngraph::NPointF & pos) override {} ngraph::NPointF currentMousePosition() const override { return {}; } bool isTemporaryLine() const override { return false;} const std::vector<elem::IConnectingLine*> visibleLines() override { return {}; } std::vector<ngraph::NLineF> getTemporaryLine() override { return {};} elem::IConnectingLine* lineAt(const ngraph::NPointF &worldPos) override { return nullptr;} }; // ==================== TTestController ==================== TTestController::TTestController(QObject *parent) : QObject{parent} {} void TTestController::initTestCase() { qDebug() << "=== Starting CInteractionController tests ==="; } void TTestController::cleanupTestCase() { qDebug() << "=== CInteractionController tests finished ==="; } void TTestController::init() {} void TTestController::cleanup() {} void TTestController::testScreenToWorld() { CInteractionController controller(nullptr); controller.m_scale = 2.0f; controller.m_panOffset = ngraph::NPointF(100, 50); controller.updateTransform(); ngraph::NPointF screen(200, 150); ngraph::NPointF world = controller.screenToWorld(screen); QCOMPARE(world.x(), 500.0); // (200*2 + 100) QCOMPARE(world.y(), 350.0); // (150*2 + 50) } void TTestController::testWorldToScreen() { CInteractionController controller(nullptr); controller.m_scale = 2.0f; controller.m_panOffset = ngraph::NPointF(100, 50); controller.updateTransform(); ngraph::NPointF world(50, 50); ngraph::NPointF screen = controller.worldToScreen(world); QCOMPARE(screen.x(), -25.0f); // (100 - 50) / 2 QCOMPARE(screen.y(), 0); // (50 - 50) / 2 } void TTestController::testUpdateTransform() { CInteractionController controller(nullptr); controller.m_scale = 2.0f; controller.m_panOffset = ngraph::NPointF(100, 50); controller.updateTransform(); auto transform = controller.transform(); auto point = transform.map(ngraph::NPointF(10, 10)); QCOMPARE(point.x(), 120.0); // 10*2 + 100 QCOMPARE(point.y(), 70.0); // 10*2 + 50 } void TTestController::testDeleteKey() { MockDiagram diagram; CInteractionController controller(nullptr); controller.setDiagram(&diagram); QKeyEvent event(QEvent::KeyPress, Qt::Key_Delete, Qt::NoModifier); controller.handleKeyPress(&event); QCOMPARE(diagram.deleteSelectedCalled, 1); } void TTestController::testSelectAllKey() { MockDiagram diagram; CInteractionController controller(nullptr); controller.setDiagram(&diagram); QKeyEvent event(QEvent::KeyPress, Qt::Key_A, Qt::ControlModifier); controller.handleKeyPress(&event); QCOMPARE(diagram.selectAllCalled, 1); QCOMPARE(diagram.selectAllValue, true); } void TTestController::testZoomWheel() { CInteractionController controller(nullptr); controller.m_scale = 1.0f; QWheelEvent event(QPointF(0,0), QPoint(0,0), QPoint(0,120), {}, Qt::NoButton, Qt::NoModifier, Qt::ScrollPhase::NoScrollPhase, false); controller.handleWheelEvent(&event); QCOMPARE(controller.m_scale, 1.1f); // +0.1 } void TTestController::testPanOffset() { CInteractionController controller(nullptr); controller.m_panOffset = ngraph::NPointF(0, 0); controller.m_scale = 1.0; controller.updateTransform(); // Имитируем панорамирование через обработчик мыши controller.m_panOffset = ngraph::NPointF(100, 50); controller.updateTransform(); QCOMPARE(controller.panOffset().x(), 100.0); QCOMPARE(controller.panOffset().y(), 50.0); }