#include "ApplicationSetup.hpp"
#include "TestGraphModel.hpp"
#include <QtNodes/BasicGraphicsScene>
#include <catch2/catch.hpp>
#include <QGraphicsView>
#include <QUndoStack>
using QtNodes::BasicGraphicsScene;
using QtNodes::ConnectionId;
using QtNodes::NodeId;
using QtNodes::NodeRole;
TEST_CASE("BasicGraphicsScene functionality", "[graphics]")
{
auto app = applicationSetup();
TestGraphModel model;
BasicGraphicsScene scene(model);
SECTION("Scene initialization")
{
CHECK(&scene.graphModel() == &model);
CHECK(scene.items().isEmpty());
}
SECTION("Node creation in scene")
{
NodeId nodeId = model.addNode("TestNode");
QCoreApplication::processEvents();
CHECK(model.nodeExists(nodeId));
CHECK(scene.items().size() >= 1);
}
SECTION("Connection creation in scene")
{
NodeId node1 = model.addNode("Node1");
NodeId node2 = model.addNode("Node2");
QCoreApplication::processEvents();
ConnectionId connId{node1, 0, node2, 0};
model.addConnection(connId);
QCoreApplication::processEvents();
CHECK(model.connectionExists(connId));
CHECK(scene.items().size() >= 3);
}
SECTION("Node deletion from scene")
{
NodeId nodeId = model.addNode("TestNode");
QCoreApplication::processEvents();
auto initialItemCount = scene.items().size();
CHECK(initialItemCount >= 1);
model.deleteNode(nodeId);
QCoreApplication::processEvents();
CHECK_FALSE(model.nodeExists(nodeId));
CHECK(scene.items().size() < initialItemCount);
}
SECTION("Scene with graphics view")
{
NodeId nodeId = model.addNode("TestNode");
model.setNodeData(nodeId, NodeRole::Position, QPointF(100, 200));
QCoreApplication::processEvents();
CHECK(scene.items().size() >= 1);
QGraphicsView view(&scene);
CHECK(view.scene() == &scene);
}
}
TEST_CASE("BasicGraphicsScene undo/redo support", "[graphics]")
{
auto app = applicationSetup();
TestGraphModel model;
BasicGraphicsScene scene(model);
SECTION("Undo stack exists")
{
auto &undoStack = scene.undoStack();
CHECK(undoStack.count() == 0);
}
SECTION("Operations are tracked in undo stack")
{
auto &undoStack = scene.undoStack();
NodeId nodeId = model.addNode("TestNode");
QCoreApplication::processEvents();
CHECK(model.nodeExists(nodeId));
CHECK(undoStack.count() >= 0);
}
}