[dali_2.1.31] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-CanvasView.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <stdlib.h>
19 #include <iostream>
20
21 #include <toolkit-event-thread-callback.h>
22 #include <toolkit-timer.h>
23
24 #include <dali-toolkit-test-suite-utils.h>
25
26 #include <dali-toolkit/dali-toolkit.h>
27
28 #include <dali-toolkit/dali-toolkit.h>
29 #include <dali-toolkit/devel-api/controls/canvas-view/canvas-view.h>
30 #include <dali-toolkit/internal/controls/canvas-view/canvas-view-rasterize-thread.h>
31 #include <dali/devel-api/adaptor-framework/canvas-renderer/canvas-renderer-shape.h>
32 #include <dali/devel-api/adaptor-framework/canvas-renderer/canvas-renderer.h>
33 #include <dali/public-api/images/pixel-data.h>
34
35 using namespace Dali;
36 using namespace Toolkit;
37
38 namespace
39 {
40 } // namespace
41
42 void utc_dali_toolkit_canvasview_startup(void)
43 {
44   test_return_value = TET_UNDEF;
45 }
46
47 void utc_dali_toolkit_canvasview_cleanup(void)
48 {
49   test_return_value = TET_PASS;
50 }
51
52 int UtcDaliCanvasViewConstructorP(void)
53 {
54   ToolkitTestApplication application;
55   CanvasView             canvasView;
56
57   DALI_TEST_CHECK(!canvasView);
58   END_TEST;
59 }
60
61 int UtcDaliCanvasViewMoveAssignment(void)
62 {
63   ToolkitTestApplication application;
64   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
65
66   CanvasView moved = std::move(canvasView);
67   DALI_TEST_CHECK(moved);
68   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
69   DALI_TEST_CHECK(!canvasView);
70
71   END_TEST;
72 }
73
74 int UtcDaliCanvasViewAssignmentConstructorP(void)
75 {
76   ToolkitTestApplication application;
77   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
78
79   CanvasView copy(canvasView);
80   DALI_TEST_CHECK(copy);
81
82   DALI_TEST_CHECK(canvasView == copy);
83   END_TEST;
84 }
85
86 int UtcDaliCanvasViewAssignmentOperatorP(void)
87 {
88   ToolkitTestApplication application;
89   const CanvasView       canvasView = CanvasView::New(Vector2(100, 100));
90
91   CanvasView assign;
92   DALI_TEST_CHECK(!assign);
93
94   assign = canvasView;
95   DALI_TEST_CHECK(assign == canvasView);
96   END_TEST;
97 }
98
99 int UtcDaliCanvasViewNewP(void)
100 {
101   ToolkitTestApplication application;
102   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
103
104   DALI_TEST_CHECK(canvasView);
105   END_TEST;
106 }
107
108 int UtcDaliCanvasViewNewWithoutViewboxP(void)
109 {
110   ToolkitTestApplication application;
111   CanvasView             canvasView = CanvasView::New();
112
113   DALI_TEST_CHECK(canvasView);
114   END_TEST;
115 }
116
117 int UtcDaliCanvasViewDownCastP(void)
118 {
119   ToolkitTestApplication application;
120   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
121
122   BaseHandle object(canvasView);
123
124   CanvasView canvasView2 = CanvasView::DownCast(object);
125   DALI_TEST_CHECK(canvasView2);
126
127   CanvasView canvasView3 = DownCast<CanvasView>(object);
128   DALI_TEST_CHECK(canvasView3);
129   END_TEST;
130 }
131
132 int UtcDaliCanvasViewDownCastN(void)
133 {
134   ToolkitTestApplication application;
135   BaseHandle             unInitializedObject;
136
137   CanvasView canvasView1 = CanvasView::DownCast(unInitializedObject);
138   DALI_TEST_CHECK(!canvasView1);
139
140   CanvasView canvasView2 = DownCast<CanvasView>(unInitializedObject);
141   DALI_TEST_CHECK(!canvasView2);
142   END_TEST;
143 }
144
145 int UtcDaliCanvasViewAddP(void)
146 {
147   ToolkitTestApplication application;
148   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
149   DALI_TEST_CHECK(canvasView);
150
151   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
152
153   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
154
155   canvasView.AddDrawable(shape);
156
157   END_TEST;
158 }
159
160 int UtcDaliCanvasViewAddN(void)
161 {
162   ToolkitTestApplication application;
163   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
164   DALI_TEST_CHECK(canvasView);
165
166   Dali::CanvasRenderer::Shape shape;
167
168   canvasView.AddDrawable(shape);
169
170   END_TEST;
171 }
172
173 int UtcDaliCanvasViewRemoveP(void)
174 {
175   ToolkitTestApplication application;
176   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
177   DALI_TEST_CHECK(canvasView);
178
179   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
180
181   canvasView.AddDrawable(shape);
182
183   DALI_TEST_CHECK(canvasView.RemoveDrawable(shape));
184
185   END_TEST;
186 }
187
188 int UtcDaliCanvasViewRemoveN(void)
189 {
190   ToolkitTestApplication application;
191
192   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
193   DALI_TEST_CHECK(canvasView);
194
195   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
196
197   DALI_TEST_CHECK(!canvasView.RemoveDrawable(shape));
198
199   END_TEST;
200 }
201
202 int UtcDaliCanvasViewRemoveAllP(void)
203 {
204   ToolkitTestApplication application;
205   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
206   DALI_TEST_CHECK(canvasView);
207
208   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
209
210   canvasView.AddDrawable(shape);
211
212   canvasView.RemoveAllDrawables();
213
214   END_TEST;
215 }
216
217 int UtcDaliCanvasViewRemoveAllN(void)
218 {
219   ToolkitTestApplication application;
220
221   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
222   DALI_TEST_CHECK(canvasView);
223
224   canvasView.RemoveAllDrawables();
225
226   END_TEST;
227 }
228
229 int UtcDaliCanvasViewChangeSizeP(void)
230 {
231   ToolkitTestApplication application;
232
233   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
234   DALI_TEST_CHECK(canvasView);
235
236   application.GetScene().Add(canvasView);
237
238   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
239
240   application.SendNotification();
241   application.Render();
242
243   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
244   Vector3         v3;
245   pv.Get(v3);
246   DALI_TEST_EQUALS(v3, Vector3(300, 300, 0), TEST_LOCATION);
247
248   END_TEST;
249 }
250
251 int UtcDaliCanvasViewSizeN(void)
252 {
253   ToolkitTestApplication application;
254
255   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
256   DALI_TEST_CHECK(canvasView);
257
258   application.GetScene().Add(canvasView);
259
260   canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
261
262   application.SendNotification();
263   application.Render();
264
265   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
266   Vector3         v3;
267   pv.Get(v3);
268   DALI_TEST_EQUALS(v3, Vector3(-999, -999, 0), TEST_LOCATION);
269
270   END_TEST;
271 }
272
273 int UtcDaliCanvasViewRasterizeTaskP(void)
274 {
275   ToolkitTestApplication application;
276
277   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
278   DALI_TEST_CHECK(dummyInternalCanvasView);
279
280   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
281   DALI_TEST_CHECK(dummyCanvasRenderer);
282
283   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
284   DALI_TEST_CHECK(task);
285
286   END_TEST;
287 }
288
289 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
290 {
291   ToolkitTestApplication application;
292
293   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
294   DALI_TEST_CHECK(dummyInternalCanvasView);
295
296   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
297   DALI_TEST_CHECK(dummyCanvasRenderer);
298
299   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
300   DALI_TEST_CHECK(task);
301
302   DALI_TEST_EQUALS(task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION);
303
304   END_TEST;
305 }
306
307 int UtcDaliCanvasViewRasterizeThreadP(void)
308 {
309   ToolkitTestApplication application;
310
311   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
312   DALI_TEST_CHECK(dummyInternalCanvasView);
313
314   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
315   DALI_TEST_CHECK(dummyCanvasRenderer);
316
317   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
318   DALI_TEST_CHECK(task);
319
320   Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
321   DALI_TEST_CHECK(dummyThread);
322
323   END_TEST;
324 }
325
326 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
327 {
328   ToolkitTestApplication application;
329
330   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
331   DALI_TEST_CHECK(dummyInternalCanvasView);
332
333   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
334   DALI_TEST_CHECK(dummyCanvasRenderer);
335
336   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
337   DALI_TEST_CHECK(task);
338
339   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
340   DALI_TEST_CHECK(task2);
341
342   Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
343   DALI_TEST_CHECK(dummyThread);
344
345   dummyThread->AddTask(task);
346   dummyThread->AddTask(task2);
347
348   END_TEST;
349 }
350
351 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
352 {
353   ToolkitTestApplication application;
354
355   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
356   DALI_TEST_CHECK(dummyInternalCanvasView);
357
358   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
359   DALI_TEST_CHECK(dummyCanvasRenderer);
360
361   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
362   DALI_TEST_CHECK(task);
363
364   Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
365   DALI_TEST_CHECK(dummyThread);
366
367   dummyThread->AddTask(task);
368
369   dummyThread->RemoveTask(dummyInternalCanvasView);
370
371   END_TEST;
372 }
373
374 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
375 {
376   ToolkitTestApplication application;
377
378   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
379   DALI_TEST_CHECK(dummyInternalCanvasView);
380
381   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
382   DALI_TEST_CHECK(dummyCanvasRenderer);
383
384   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
385   DALI_TEST_CHECK(task);
386
387   Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
388   DALI_TEST_CHECK(dummyThread);
389
390   dummyThread->AddTask(task);
391
392   dummyThread->ApplyRasterized();
393
394   END_TEST;
395 }
396
397 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
398 {
399   ToolkitTestApplication application;
400
401   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
402   DALI_TEST_CHECK(dummyInternalCanvasView);
403
404   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
405   DALI_TEST_CHECK(dummyCanvasRenderer);
406
407   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
408   DALI_TEST_CHECK(task);
409
410   Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
411   DALI_TEST_CHECK(dummyThread);
412
413   dummyThread->AddTask(task);
414
415   Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
416
417   END_TEST;
418 }
419
420 PixelData CreatePixelData(unsigned int width, unsigned int height)
421 {
422   unsigned int bufferSize = width * height * Pixel::GetBytesPerPixel(Pixel::RGBA8888);
423
424   unsigned char* buffer    = reinterpret_cast<unsigned char*>(malloc(bufferSize));
425   PixelData      pixelData = PixelData::New(buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE);
426
427   return pixelData;
428 }
429
430 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
431 {
432   ToolkitTestApplication application;
433
434   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
435   DALI_TEST_CHECK(dummyInternalCanvasView);
436
437   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
438   DALI_TEST_CHECK(dummyCanvasRenderer);
439
440   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
441   DALI_TEST_CHECK(task);
442
443   Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
444   DALI_TEST_CHECK(dummyThread);
445
446   dummyThread->AddTask(task);
447
448   dummyThread->Process(false);
449
450   END_TEST;
451 }
452
453 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
454 {
455   ToolkitTestApplication application;
456
457   Dali::Toolkit::CanvasView            canvasView              = Dali::Toolkit::CanvasView::New(Vector2(100, 100));
458   Dali::Toolkit::Internal::CanvasView& dummyInternalCanvasView = GetImpl(canvasView);
459
460   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
461   DALI_TEST_CHECK(dummyCanvasRenderer);
462
463   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(&dummyInternalCanvasView, dummyCanvasRenderer);
464   DALI_TEST_CHECK(task);
465
466   Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
467   DALI_TEST_CHECK(dummyThread);
468
469   dummyThread->AddTask(task);
470
471   dummyThread->Process(false);
472
473   auto texture = Texture::New(Dali::TextureType::TEXTURE_2D, Pixel::RGBA8888, 100, 100);
474
475   dummyThread->RasterizationCompletedSignal().Connect(&dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
476   dummyThread->RasterizationCompletedSignal().Emit(texture);
477
478   application.SendNotification();
479   application.Render();
480
481   END_TEST;
482 }
483
484 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
485 {
486   ToolkitTestApplication application;
487
488   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
489   DALI_TEST_CHECK(canvasView);
490
491   application.GetScene().Add(canvasView);
492
493   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
494
495   application.SendNotification();
496   application.Render();
497
498   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
499
500   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
501
502   canvasView.AddDrawable(shape);
503
504   application.SendNotification();
505   application.Render();
506
507   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
508
509   application.SendNotification();
510   application.Render();
511
512   END_TEST;
513 }
514
515 int UtcDaliCanvasViewViewBoxP(void)
516 {
517   ToolkitTestApplication application;
518
519   CanvasView canvasView = CanvasView::New(Vector2(300, 300));
520   DALI_TEST_CHECK(canvasView);
521
522   application.GetScene().Add(canvasView);
523
524   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
525   canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
526
527   application.SendNotification();
528   application.Render();
529
530   END_TEST;
531 }
532
533 int UtcDaliCanvasViewViewBoxN(void)
534 {
535   ToolkitTestApplication application;
536
537   CanvasView canvasView = CanvasView::New(Vector2(300, 300));
538   DALI_TEST_CHECK(canvasView);
539
540   application.GetScene().Add(canvasView);
541
542   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
543   canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
544
545   application.SendNotification();
546   application.Render();
547
548   Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
549   DALI_TEST_EQUALS(viewBox, Vector2(-999, -999), TEST_LOCATION);
550
551   END_TEST;
552 }