1 /*
2 * Copyright (c) 2011 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18
19 #include "kis_node_shapes_graph_test.h"
20
21 #include <QTest>
22
23 #include "kis_node_shapes_graph.h"
24 #include "node_shapes_utils.h"
25
26
27 /**
28 * node0
29 * +--node1
30 * +--node7
31 * +--node8
32 * +--node2
33 * +--node3
34 * +--node4
35 * +--node9
36 * +--node10
37 * +--node11
38 * +--node5
39 * +--node6
40 */
41
init()42 void KisNodeShapesGraphTest::init()
43 {
44 m_shapesGraph = new KisNodeShapesGraph();
45 KisNodeSP rootNode = nodeFromId(0);
46 m_shapesGraph->addNode(rootNode, 0, 0);
47 m_rootDummy = m_shapesGraph->nodeToDummy(rootNode);
48
49
50 KisNodeSP parent;
51
52 parent = rootNode;
53 for(int i = 6; i >= 1; i--) {
54 m_shapesGraph->addNode(nodeFromId(i), parent, 0);
55 }
56
57 parent = findNodeById(m_rootDummy, 1);
58 Q_ASSERT(parent);
59 for(int i = 8; i >= 7; i--) {
60 m_shapesGraph->addNode(nodeFromId(i), parent, 0);
61 }
62
63 parent = findNodeById(m_rootDummy, 4);
64 Q_ASSERT(parent);
65 for(int i = 11; i >= 9; i--) {
66 m_shapesGraph->addNode(nodeFromId(i), parent, 0);
67 }
68
69 QString realGraph = collectGraphPattern(m_rootDummy);
70 QString expectedGraph = "0 1 7 8 2 3 4 9 10 11 5 6";
71
72 QCOMPARE(realGraph, expectedGraph);
73 }
74
cleanup()75 void KisNodeShapesGraphTest::cleanup()
76 {
77 if (m_rootDummy) {
78 KisNodeShape *tempShape = m_rootDummy->nodeShape();
79 delete m_rootDummy;
80 delete tempShape;
81 }
82
83 delete m_shapesGraph;
84 }
85
testShapeChildren()86 void KisNodeShapesGraphTest::testShapeChildren()
87 {
88 KisNodeShape *parent = m_shapesGraph->nodeToShape(findNodeById(m_rootDummy, 4));
89 QList<KisNodeShape*> expectedChildren;
90
91 for(int i = 9; i <= 11; i++) {
92 expectedChildren.append(m_shapesGraph->nodeToShape(findNodeById(m_rootDummy, i)));
93 }
94
95 QList<KoShape*> realChildren = parent->shapes();
96
97 Q_FOREACH (KoShape *shape, realChildren) {
98 KisNodeShape *nodeShape = dynamic_cast<KisNodeShape*>(shape);
99
100 QVERIFY(expectedChildren.contains(nodeShape));
101 expectedChildren.removeOne(nodeShape);
102 }
103
104 QVERIFY(expectedChildren.isEmpty());
105 }
106
testInsert()107 void KisNodeShapesGraphTest::testInsert()
108 {
109 KisNodeSP parent = findNodeById(m_rootDummy, 4);
110 KisNodeSP aboveThis = findNodeById(m_rootDummy, 10);
111 KisNodeSP node = nodeFromId(13);
112
113 KisNodeShape *addedShape =
114 m_shapesGraph->addNode(node, parent, aboveThis);
115
116 QString realGraph = collectGraphPattern(m_rootDummy);
117 QString expectedGraph = "0 1 7 8 2 3 4 9 10 13 11 5 6";
118 QCOMPARE(realGraph, expectedGraph);
119
120 KisNodeShape *nodeShape = m_shapesGraph->nodeToShape(node);
121 KisNodeShape *parentShape = m_shapesGraph->nodeToShape(parent);
122 QCOMPARE(addedShape, nodeShape);
123 QCOMPARE(((KoShape*)nodeShape)->parent(), parentShape);
124 }
125
testRemove()126 void KisNodeShapesGraphTest::testRemove()
127 {
128 KisNodeSP parent = findNodeById(m_rootDummy, 4);
129 KisNodeSP node = findNodeById(m_rootDummy, 10);
130
131 KisNodeShape *parentShape = m_shapesGraph->nodeToShape(parent);
132
133 QCOMPARE(parentShape->shapeCount(), 3);
134 m_shapesGraph->removeNode(node);
135 QCOMPARE(parentShape->shapeCount(), 2);
136
137 QString realGraph = collectGraphPattern(m_rootDummy);
138 QString expectedGraph = "0 1 7 8 2 3 4 9 11 5 6";
139 QCOMPARE(realGraph, expectedGraph);
140 }
141
testRemoveRootNode()142 void KisNodeShapesGraphTest::testRemoveRootNode()
143 {
144 KisNodeSP root = findNodeById(m_rootDummy, 0);
145 m_rootDummy = 0;
146
147 m_shapesGraph->removeNode(root);
148 QCOMPARE(m_shapesGraph->shapesCount(), 0);
149 }
150
151 QTEST_MAIN(KisNodeShapesGraphTest)
152