1 /*
2 * Copyright (c) 2015 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_juggler_compressed_test.h"
20
21 #include <QTest>
22 #include "kis_node_juggler_compressed.h"
23
24 #include <KoColor.h>
25 #include <KoColorSpace.h>
26
init()27 void KisNodeJugglerCompressedTest::init()
28 {
29 p.reset(new TestUtil::MaskParent);
30
31 QRect rect1(100, 100, 100, 100);
32 QRect rect2(150, 150, 150, 150);
33
34 layer1 = p->layer;
35 layer1->paintDevice()->fill(rect1, KoColor(Qt::red, layer1->colorSpace()));
36
37 layer2 = new KisPaintLayer(p->image, "paint2", OPACITY_OPAQUE_U8);
38 layer2->paintDevice()->fill(rect2, KoColor(Qt::blue, layer2->colorSpace()));
39
40 layer3 = new KisPaintLayer(p->image, "paint3", OPACITY_OPAQUE_U8);
41 group4 = new KisGroupLayer(p->image, "group4", OPACITY_OPAQUE_U8);
42 layer5 = new KisPaintLayer(p->image, "paint5", OPACITY_OPAQUE_U8);
43 layer6 = new KisPaintLayer(p->image, "paint6", OPACITY_OPAQUE_U8);
44
45 p->image->addNode(layer2);
46 p->image->addNode(layer3);
47 p->image->addNode(group4);
48 p->image->addNode(layer5, group4);
49 p->image->addNode(layer6);
50
51 p->image->initialRefreshGraph();
52 }
53
cleanup()54 void KisNodeJugglerCompressedTest::cleanup()
55 {
56 p.reset();
57 layer1.clear();
58 layer2.clear();
59 }
60
testMove(int delayBeforeEnd)61 void KisNodeJugglerCompressedTest::testMove(int delayBeforeEnd)
62 {
63 TestUtil::ReferenceImageChecker chk("node_juggler", "move_test");
64 chk.setMaxFailingPixels(0);
65
66 KisNodeJugglerCompressed juggler(kundo2_i18n("Move Layer"), p->image, 0, 600);
67 QVERIFY(chk.checkImage(p->image, "initial"));
68
69 juggler.moveNode(layer1, p->image->root(), layer2);
70 QTest::qWait(100);
71 QVERIFY(chk.checkImage(p->image, "initial"));
72
73 if (delayBeforeEnd) {
74 QTest::qWait(delayBeforeEnd);
75 QVERIFY(chk.checkImage(p->image, "moved"));
76 }
77
78 juggler.end();
79 p->image->waitForDone();
80 QVERIFY(chk.checkImage(p->image, "moved"));
81
82 p->undoStore->undo();
83 p->image->waitForDone();
84
85 QVERIFY(chk.checkImage(p->image, "initial"));
86 }
87
testApplyUndo()88 void KisNodeJugglerCompressedTest::testApplyUndo()
89 {
90 testMove(1000);
91 }
92
testEndBeforeUpdate()93 void KisNodeJugglerCompressedTest::testEndBeforeUpdate()
94 {
95 testMove(0);
96 }
97
testDuplicateImpl(bool externalParent,bool useMove)98 void KisNodeJugglerCompressedTest::testDuplicateImpl(bool externalParent, bool useMove)
99 {
100 TestUtil::ReferenceImageChecker chk("node_juggler", "move_test");
101 chk.setMaxFailingPixels(0);
102
103 QStringList initialRef;
104 initialRef << "paint1";
105 initialRef << "paint2";
106 initialRef << "paint3";
107 initialRef << "group4";
108 initialRef << "+paint5";
109 initialRef << "paint6";
110
111 QVERIFY(TestUtil::checkHierarchy(p->image->root(), initialRef));
112
113 KisNodeList selectedNodes;
114 selectedNodes << layer2;
115 selectedNodes << layer3;
116 selectedNodes << layer5;
117
118 KisNodeJugglerCompressed juggler(kundo2_i18n("Duplicate Layers"), p->image, 0, 600);
119
120 if (!externalParent) {
121 juggler.duplicateNode(selectedNodes);
122 } else {
123 if (useMove) {
124 juggler.moveNode(selectedNodes, p->image->root(), layer6);
125 } else {
126 juggler.copyNode(selectedNodes, p->image->root(), layer6);
127 }
128 }
129
130 QTest::qWait(1000);
131
132 juggler.end();
133 p->image->waitForDone();
134
135 QStringList ref;
136
137 if (!externalParent) {
138 ref << "paint1";
139 ref << "paint2";
140 ref << "paint3";
141 ref << "group4";
142 ref << "+paint5";
143 ref << "+Copy of paint2";
144 ref << "+Copy of paint3";
145 ref << "+Copy of paint5";
146 ref << "paint6";
147 } else if (!useMove) {
148 ref << "paint1";
149 ref << "paint2";
150 ref << "paint3";
151 ref << "group4";
152 ref << "+paint5";
153 ref << "paint6";
154 ref << "Copy of paint2";
155 ref << "Copy of paint3";
156 ref << "Copy of paint5";
157 } else {
158 ref << "paint1";
159 ref << "group4";
160 ref << "paint6";
161 ref << "paint2";
162 ref << "paint3";
163 ref << "paint5";
164 }
165
166 QVERIFY(TestUtil::checkHierarchy(p->image->root(), ref));
167
168 p->undoStore->undo();
169 p->image->waitForDone();
170
171 QVERIFY(TestUtil::checkHierarchy(p->image->root(), initialRef));
172 }
173
testDuplicate()174 void KisNodeJugglerCompressedTest::testDuplicate()
175 {
176 testDuplicateImpl(false, false);
177 }
178
testCopyLayers()179 void KisNodeJugglerCompressedTest::testCopyLayers()
180 {
181 testDuplicateImpl(true, false);
182 }
183
testMoveLayers()184 void KisNodeJugglerCompressedTest::testMoveLayers()
185 {
186 testDuplicateImpl(true, true);
187 }
188
189 QTEST_MAIN(KisNodeJugglerCompressedTest)
190