forked from paceholder/nodeeditor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestNodeNickname.cpp
More file actions
93 lines (74 loc) · 3.47 KB
/
Copy pathTestNodeNickname.cpp
File metadata and controls
93 lines (74 loc) · 3.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "ApplicationSetup.hpp"
#include <QtNodes/DataFlowGraphModel>
#include <QtNodes/Definitions>
#include <QtNodes/NodeDelegateModel>
#include <QtNodes/NodeDelegateModelRegistry>
#include <catch2/catch.hpp>
#include <QSignalSpy>
using QtNodes::DataFlowGraphModel;
using QtNodes::NodeData;
using QtNodes::NodeDataType;
using QtNodes::NodeDelegateModel;
using QtNodes::NodeDelegateModelRegistry;
using QtNodes::NodeId;
using QtNodes::NodeRole;
using QtNodes::PortIndex;
using QtNodes::PortType;
namespace {
// Creates a test nickname node, implementing the NodeDelegateModel interface
// As a minimal node, it has no inputs or outputs, no port data type, and no embedded widget
class NicknameNode : public NodeDelegateModel
{
public:
QString name() const override { return QStringLiteral("NicknameNode"); }
QString caption() const override { return QStringLiteral("Test Node"); }
QString label() const override { return QStringLiteral("Default nickname"); }
bool labelVisible() const override { return false; }
bool labelEditable() const override { return true; }
unsigned int nPorts(PortType) const override { return 0; }
NodeDataType dataType(PortType, PortIndex) const override { return {}; }
void setInData(std::shared_ptr<NodeData>, PortIndex) override {}
std::shared_ptr<NodeData> outData(PortIndex) override { return nullptr; }
QWidget *embeddedWidget() override { return nullptr; }
};
std::shared_ptr<NodeDelegateModelRegistry> makeRegistry()
{
auto registry = std::make_shared<NodeDelegateModelRegistry>();
registry->registerModel<NicknameNode>();
return registry;
}
} // namespace
TEST_CASE("Nickname can be read and changed", "[nickname]")
{
auto app = applicationSetup();
DataFlowGraphModel model(makeRegistry());
NodeId const nodeId = model.addNode(QStringLiteral("NicknameNode"));
// Check the default nickname, initial visibility, and editability
CHECK(model.nodeData(nodeId, NodeRole::Label).toString() == QStringLiteral("Default nickname"));
CHECK_FALSE(model.nodeData(nodeId, NodeRole::LabelVisible).toBool());
CHECK(model.nodeData(nodeId, NodeRole::LabelEditable).toBool());
QSignalSpy nodeUpdatedSpy(&model, &DataFlowGraphModel::nodeUpdated);
// Check if the nickname can be changed and the visibility can be setted
// Also check if the signals for these changes have been emitted
CHECK(model.setNodeData(nodeId, NodeRole::Label, QStringLiteral("New nickname")));
CHECK(model.setNodeData(nodeId, NodeRole::LabelVisible, true));
CHECK(nodeUpdatedSpy.count() == 2);
}
TEST_CASE("Nickname is saved and loaded", "[nickname]")
{
auto app = applicationSetup();
auto registry = makeRegistry();
DataFlowGraphModel model(registry);
NodeId const nodeId = model.addNode(QStringLiteral("NicknameNode"));
// Change the nodes visibility and nickname
model.setNodeData(nodeId, NodeRole::Label, QStringLiteral("Saved nickname"));
model.setNodeData(nodeId, NodeRole::LabelVisible, true);
// Serialize the node and load it into a new model
QJsonObject const nodeJson = model.saveNode(nodeId);
DataFlowGraphModel restoredModel(registry);
restoredModel.loadNode(nodeJson);
// Check if the nickname and its visibility have been restored correctly
CHECK(restoredModel.nodeData(nodeId, NodeRole::Label).toString()
== QStringLiteral("Saved nickname"));
CHECK(restoredModel.nodeData(nodeId, NodeRole::LabelVisible).toBool());
}