All Classes Namespaces Functions Variables Enumerations Properties Pages
test_layer.cpp
1 /*
2 
3 Pencil2D - Traditional Animation Software
4 Copyright (C) 2012-2020 Matthew Chiawen Chang
5 
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; version 2 of the License.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14 
15 */
16 #include "catch.hpp"
17 
18 #include "layer.h"
19 #include "layerbitmap.h"
20 #include "layervector.h"
21 #include "layercamera.h"
22 #include "layersound.h"
23 #include "object.h"
24 #include "util.h"
25 
26 
27 TEST_CASE("LayerType")
28 {
29  Object* object = new Object;
30 
31  SECTION("Bitmap Layer")
32  {
33  Layer* bitmapLayer = new LayerBitmap(object);
34  REQUIRE(bitmapLayer->type() == Layer::BITMAP);
35  delete bitmapLayer;
36  }
37  SECTION("Vector Layer")
38  {
39  Layer* vecLayer = new LayerVector(object);
40  REQUIRE(vecLayer->type() == Layer::VECTOR);
41  delete vecLayer;
42  }
43  SECTION("Camera Layer")
44  {
45  Layer* cameraLayer = new LayerCamera(object);
46  REQUIRE(cameraLayer->type() == Layer::CAMERA);
47  delete cameraLayer;
48  }
49  SECTION("Sound Layer")
50  {
51  Layer* soundLayer = new LayerSound(object);
52  REQUIRE(soundLayer->type() == Layer::SOUND);
53  delete soundLayer;
54  }
55 
56  delete object;
57 }
58 
59 SCENARIO("Add key frames into a Layer", "[Layer]")
60 {
61  Object* object = new Object;
62 
63  GIVEN("A Bitmap Layer")
64  {
65  Layer* layer = new LayerBitmap(object);
66 
67  REQUIRE(layer->addNewKeyFrameAt(0) == false); // first key position is 1.
68  REQUIRE(layer->keyFrameCount() == 0);
69 
70  WHEN("Add a keyframe")
71  {
72  REQUIRE(layer->addNewKeyFrameAt(1) == true);
73 
74  THEN("keyframe can be found in the layer")
75  {
76  REQUIRE(layer->getMaxKeyFramePosition() == 1);
77  REQUIRE(layer->keyFrameCount() == 1);
78  REQUIRE(layer->getKeyFrameAt(1) != nullptr);
79  }
80  }
81 
82  WHEN("Add 2 keyframes")
83  {
84  REQUIRE(layer->addNewKeyFrameAt(1) == true);
85  REQUIRE(layer->addNewKeyFrameAt(3) == true);
86 
87  THEN("2 keyframes are in the layer")
88  {
89  REQUIRE(layer->getMaxKeyFramePosition() == 3);
90  REQUIRE(layer->getKeyFrameAt(3) != nullptr);
91  REQUIRE(layer->keyFrameCount() == 2);
92  }
93  }
94  delete layer;
95  }
96 
97  GIVEN("A Vector Layer")
98  {
99  Layer* layer = new LayerVector(object);
100 
101  REQUIRE(layer->addNewKeyFrameAt(0) == false); // first key position is 1.
102  REQUIRE(layer->keyFrameCount() == 0);
103 
104  WHEN("Add a keyframe")
105  {
106  REQUIRE(layer->addNewKeyFrameAt(1) == true);
107 
108  THEN("keyframe can be found in the layer")
109  {
110  REQUIRE(layer->getMaxKeyFramePosition() == 1);
111  REQUIRE(layer->keyFrameCount() == 1);
112  REQUIRE(layer->getKeyFrameAt(1) != nullptr);
113  }
114  }
115  delete layer;
116  }
117 
118  GIVEN("A Camera Layer")
119  {
120  Layer* layer = new LayerCamera(object);
121 
122  REQUIRE(layer->addNewKeyFrameAt(0) == false); // first key position is 1.
123  REQUIRE(layer->keyFrameCount() == 0);
124 
125  WHEN("Add a keyframe")
126  {
127  REQUIRE(layer->addNewKeyFrameAt(1) == true);
128 
129  THEN("keyframe can be found in the layer")
130  {
131  REQUIRE(layer->getMaxKeyFramePosition() == 1);
132  REQUIRE(layer->keyFrameCount() == 1);
133  REQUIRE(layer->getKeyFrameAt(1) != nullptr);
134  }
135  }
136  delete layer;
137  }
138  delete object;
139 }
140 
141 TEST_CASE("Test Layer::keyExists()", "[Layer]")
142 {
143  Object* obj = new Object;
144 
145  SECTION("Fresh new Layer")
146  {
147  Layer* layer = obj->addNewBitmapLayer();
148  REQUIRE(layer->keyExists(1) == true); // there is a frame at 1 in default.
149 
150  }
151  SECTION("Key exists at 15")
152  {
153  Layer* layer = obj->addNewBitmapLayer();
154  REQUIRE(layer->addNewKeyFrameAt(15));
155  REQUIRE(layer->keyExists(16) == false);
156  REQUIRE(layer->keyExists(15) == true);
157  REQUIRE(layer->keyExists(14) == false);
158  REQUIRE(layer->keyExists(13) == false);
159  REQUIRE(layer->keyExists(12) == false);
160  }
161  SECTION("Key exists 10 20 30")
162  {
163  Layer* layer = obj->addNewBitmapLayer();
164 
165  REQUIRE(layer->addNewKeyFrameAt(10));
166  REQUIRE(layer->keyExists(10) == true);
167 
168  REQUIRE(layer->addNewKeyFrameAt(20));
169  REQUIRE(layer->keyExists(20) == true);
170 
171  REQUIRE(layer->addNewKeyFrameAt(30));
172  REQUIRE(layer->keyExists(30) == true);
173 
174  // test false case
175  REQUIRE(layer->keyExists(0) == false);
176  REQUIRE(layer->keyExists(21) == false);
177  REQUIRE(layer->keyExists(31) == false);
178  REQUIRE(layer->keyExists(1000) == false);
179  REQUIRE(layer->keyExists(-333) == false);
180  }
181 
182  delete obj;
183 }
184 
185 TEST_CASE("Layer::firstKeyFramePosition()")
186 {
187  Object* obj = new Object;
188 
189  SECTION("Key at 1")
190  {
191  Layer* layer = obj->addNewBitmapLayer();
192  REQUIRE(layer->firstKeyFramePosition() == 1);
193 
194  layer->addNewKeyFrameAt(99);
195  REQUIRE(layer->firstKeyFramePosition() == 1);
196 
197  layer->moveKeyFrameForward(1);
198  REQUIRE(layer->firstKeyFramePosition() == 1); // always has a key at 1
199  }
200 
201  delete obj;
202 }
203 
204 TEST_CASE("Layer::getMaxKeyFramePosition()")
205 {
206  Object* obj = new Object;
207 
208  SECTION("Bitmap")
209  {
210  Layer* layer = obj->addNewBitmapLayer();
211 
212  // 1 at beginning.
213  REQUIRE(layer->getMaxKeyFramePosition() == 1);
214 
215  CHECK(layer->addNewKeyFrameAt(3));
216  REQUIRE(layer->getMaxKeyFramePosition() == 3);
217 
218  CHECK(layer->addNewKeyFrameAt(8));
219  REQUIRE(layer->getMaxKeyFramePosition() == 8);
220 
221  CHECK(layer->addNewKeyFrameAt(100));
222  REQUIRE(layer->getMaxKeyFramePosition() == 100);
223 
224  CHECK(layer->addNewKeyFrameAt(80));
225  REQUIRE(layer->getMaxKeyFramePosition() == 100);
226  }
227 
228  delete obj;
229 }
230 
231 
232 TEST_CASE("Layer::removeKeyFrame()")
233 {
234  Object* obj = new Object;
235  SECTION("Bitmap")
236  {
237  Layer* layer = obj->addNewBitmapLayer();
238 
239  // there is always a key at position 1 at beginning
240  CHECK(layer->removeKeyFrame(1));
241  REQUIRE(layer->getMaxKeyFramePosition() == 0);
242 
243  for (int i = 2; i <= 20; ++i)
244  {
245  CHECK(layer->addNewKeyFrameAt(i));
246  }
247 
248  REQUIRE(layer->keyExists(20) == true);
249  layer->removeKeyFrame(20); // after deleting it, the key will no longer exist.
250  REQUIRE(layer->keyExists(20) == false);
251 
252  REQUIRE(layer->keyExists(8) == true);
253  layer->removeKeyFrame(8);
254  REQUIRE(layer->keyExists(8) == false);
255 
256  REQUIRE(layer->keyExists(19) == true);
257  layer->removeKeyFrame(19);
258  REQUIRE(layer->keyExists(19) == false);
259  REQUIRE(layer->getMaxKeyFramePosition() == 18); // also decrease the max position if we delete the last key.
260 
261  layer->removeKeyFrame(18);
262  REQUIRE(layer->getMaxKeyFramePosition() == 17);
263  }
264  delete obj;
265 }
266 
267 TEST_CASE("Layer::getPreviousKeyFramePosition()")
268 {
269  Object* obj = new Object;
270  SECTION("KeyFrame 1")
271  {
272  Layer* layer = obj->addNewBitmapLayer();
273  CHECK(layer->keyFrameCount() == 1);
274 
275  REQUIRE(layer->getPreviousKeyFramePosition(1) == 1);
276  REQUIRE(layer->getPreviousKeyFramePosition(10) == 1);
277  REQUIRE(layer->getPreviousKeyFramePosition(100) == 1);
278  REQUIRE(layer->getPreviousKeyFramePosition(1000) == 1);
279  }
280 
281  SECTION("KeyFrame 1, 2, 8")
282  {
283  Layer* layer = obj->addNewBitmapLayer();
284  layer->addNewKeyFrameAt(2);
285  layer->addNewKeyFrameAt(8);
286  REQUIRE(layer->getPreviousKeyFramePosition(2) == 1);
287  REQUIRE(layer->getPreviousKeyFramePosition(8) == 2);
288  }
289 
290  SECTION("KeyFrame 1, 15")
291  {
292  Layer* layer = obj->addNewBitmapLayer();
293  REQUIRE(layer->getPreviousKeyFramePosition(-5) == 1);
294 
295  layer->addNewKeyFrameAt(15);
296  REQUIRE(layer->getPreviousKeyFramePosition(16) == 15);
297  REQUIRE(layer->getPreviousKeyFramePosition(17) == 15);
298  }
299 
300  SECTION("KeyFrame 1, 10, Add 20 Remove 20")
301  {
302  Layer* layer = obj->addNewBitmapLayer();
303  layer->addNewKeyFrameAt(10);
304  layer->addNewKeyFrameAt(20);
305 
306  REQUIRE(layer->getPreviousKeyFramePosition(21) == 20);
307  layer->removeKeyFrame(20);
308  REQUIRE(layer->getPreviousKeyFramePosition(21) == 10);
309  }
310  delete obj;
311 }
312 
313 TEST_CASE("Layer::getNextKeyFramePosition()")
314 {
315  Object* obj = new Object;
316  SECTION("KeyFrame 1, 5")
317  {
318  Layer* layer = obj->addNewBitmapLayer();
319 
320  REQUIRE(layer->getNextKeyFramePosition(1) == 1);
321  REQUIRE(layer->getNextKeyFramePosition(10) == 1);
322  REQUIRE(layer->getNextKeyFramePosition(100) == 1);
323 
324  CHECK(layer->addNewKeyFrameAt(5));
325  REQUIRE(layer->getNextKeyFramePosition(1) == 5);
326  REQUIRE(layer->getNextKeyFramePosition(2) == 5);
327  }
328  delete obj;
329 }
330 
331 TEST_CASE("Layer::getPreviousFrameNumber()")
332 {
333  Object* obj = new Object;
334  SECTION("KeyFrame 1")
335  {
336  Layer* layer = obj->addNewVectorLayer();
337  REQUIRE(layer->getPreviousFrameNumber(1, true) == -1); // couldn't find previous frame
338 
339  REQUIRE(layer->getPreviousFrameNumber(3, true) == 1);
340  REQUIRE(layer->getPreviousFrameNumber(3, false) == 2);
341  }
342  delete obj;
343 }
Definition: layer.h:39
Definition: object.h:54