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