[dali_2.3.21] 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/internal/controls/canvas-view/canvas-view-impl.h>
30 #include <dali-toolkit/internal/controls/canvas-view/canvas-view-rasterize-task.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 #include <dali/public-api/adaptor-framework/async-task-manager.h>
35
36 using namespace Dali;
37 using namespace Toolkit;
38
39 namespace
40 {
41 } // namespace
42
43 void utc_dali_toolkit_canvasview_startup(void)
44 {
45   test_return_value = TET_UNDEF;
46 }
47
48 void utc_dali_toolkit_canvasview_cleanup(void)
49 {
50   test_return_value = TET_PASS;
51 }
52
53 int UtcDaliCanvasViewConstructorP(void)
54 {
55   ToolkitTestApplication application;
56   CanvasView             canvasView;
57
58   DALI_TEST_CHECK(!canvasView);
59   END_TEST;
60 }
61
62 int UtcDaliCanvasViewMoveAssignment(void)
63 {
64   ToolkitTestApplication application;
65   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
66
67   CanvasView moved = std::move(canvasView);
68   DALI_TEST_CHECK(moved);
69   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
70   DALI_TEST_CHECK(!canvasView);
71
72   END_TEST;
73 }
74
75 int UtcDaliCanvasViewAssignmentConstructorP(void)
76 {
77   ToolkitTestApplication application;
78   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
79
80   CanvasView copy(canvasView);
81   DALI_TEST_CHECK(copy);
82
83   DALI_TEST_CHECK(canvasView == copy);
84   END_TEST;
85 }
86
87 int UtcDaliCanvasViewAssignmentOperatorP(void)
88 {
89   ToolkitTestApplication application;
90   const CanvasView       canvasView = CanvasView::New(Vector2(100, 100));
91
92   CanvasView assign;
93   DALI_TEST_CHECK(!assign);
94
95   assign = canvasView;
96   DALI_TEST_CHECK(assign == canvasView);
97   END_TEST;
98 }
99
100 int UtcDaliCanvasViewNewP(void)
101 {
102   ToolkitTestApplication application;
103   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
104
105   DALI_TEST_CHECK(canvasView);
106   END_TEST;
107 }
108
109 int UtcDaliCanvasViewNewWithoutViewboxP(void)
110 {
111   ToolkitTestApplication application;
112   CanvasView             canvasView = CanvasView::New();
113
114   DALI_TEST_CHECK(canvasView);
115   END_TEST;
116 }
117
118 int UtcDaliCanvasViewDownCastP(void)
119 {
120   ToolkitTestApplication application;
121   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
122
123   BaseHandle object(canvasView);
124
125   CanvasView canvasView2 = CanvasView::DownCast(object);
126   DALI_TEST_CHECK(canvasView2);
127
128   CanvasView canvasView3 = DownCast<CanvasView>(object);
129   DALI_TEST_CHECK(canvasView3);
130   END_TEST;
131 }
132
133 int UtcDaliCanvasViewDownCastN(void)
134 {
135   ToolkitTestApplication application;
136   BaseHandle             unInitializedObject;
137
138   CanvasView canvasView1 = CanvasView::DownCast(unInitializedObject);
139   DALI_TEST_CHECK(!canvasView1);
140
141   CanvasView canvasView2 = DownCast<CanvasView>(unInitializedObject);
142   DALI_TEST_CHECK(!canvasView2);
143   END_TEST;
144 }
145
146 int UtcDaliCanvasViewAddP(void)
147 {
148   ToolkitTestApplication application;
149   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
150   DALI_TEST_CHECK(canvasView);
151
152   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
153
154   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
155
156   canvasView.AddDrawable(shape);
157
158   END_TEST;
159 }
160
161 int UtcDaliCanvasViewAddN(void)
162 {
163   ToolkitTestApplication application;
164   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
165   DALI_TEST_CHECK(canvasView);
166
167   Dali::CanvasRenderer::Shape shape;
168
169   canvasView.AddDrawable(shape);
170
171   END_TEST;
172 }
173
174 int UtcDaliCanvasViewRemoveP(void)
175 {
176   ToolkitTestApplication application;
177   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
178   DALI_TEST_CHECK(canvasView);
179
180   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
181
182   canvasView.AddDrawable(shape);
183
184   DALI_TEST_CHECK(canvasView.RemoveDrawable(shape));
185
186   END_TEST;
187 }
188
189 int UtcDaliCanvasViewRemoveN(void)
190 {
191   ToolkitTestApplication application;
192
193   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
194   DALI_TEST_CHECK(canvasView);
195
196   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
197
198   DALI_TEST_CHECK(!canvasView.RemoveDrawable(shape));
199
200   END_TEST;
201 }
202
203 int UtcDaliCanvasViewRemoveAllP(void)
204 {
205   ToolkitTestApplication application;
206   CanvasView             canvasView = CanvasView::New(Vector2(100, 100));
207   DALI_TEST_CHECK(canvasView);
208
209   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
210
211   canvasView.AddDrawable(shape);
212
213   canvasView.RemoveAllDrawables();
214
215   END_TEST;
216 }
217
218 int UtcDaliCanvasViewRemoveAllN(void)
219 {
220   ToolkitTestApplication application;
221
222   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
223   DALI_TEST_CHECK(canvasView);
224
225   canvasView.RemoveAllDrawables();
226
227   END_TEST;
228 }
229
230 int UtcDaliCanvasViewChangeSizeP(void)
231 {
232   ToolkitTestApplication application;
233
234   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
235   DALI_TEST_CHECK(canvasView);
236
237   application.GetScene().Add(canvasView);
238
239   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
240
241   application.SendNotification();
242   application.Render();
243
244   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
245   Vector3         v3;
246   pv.Get(v3);
247   DALI_TEST_EQUALS(v3, Vector3(300, 300, 0), TEST_LOCATION);
248
249   END_TEST;
250 }
251
252 int UtcDaliCanvasViewSizeN(void)
253 {
254   ToolkitTestApplication application;
255
256   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
257   DALI_TEST_CHECK(canvasView);
258
259   application.GetScene().Add(canvasView);
260
261   canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
262
263   application.SendNotification();
264   application.Render();
265
266   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
267   Vector3         v3;
268   pv.Get(v3);
269   DALI_TEST_EQUALS(v3, Vector3(-999, -999, 0), TEST_LOCATION);
270
271   END_TEST;
272 }
273
274 bool gRasterizationCompletedSignal = false;
275 void rasteriztionCompleted(IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task)
276 {
277   gRasterizationCompletedSignal = true;
278 }
279
280 int UtcDaliCanvasViewRasterizeTaskP(void)
281 {
282   ToolkitTestApplication application;
283
284   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
285   DALI_TEST_CHECK(dummyInternalCanvasView);
286
287   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
288   DALI_TEST_CHECK(dummyCanvasRenderer);
289
290   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
291   DALI_TEST_CHECK(task);
292
293   END_TEST;
294 }
295
296 int UtcDaliCanvasViewRasterizeTaskAddTaskP(void)
297 {
298   ToolkitTestApplication application;
299
300   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
301   DALI_TEST_CHECK(dummyInternalCanvasView);
302
303   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
304   DALI_TEST_CHECK(dummyCanvasRenderer);
305
306   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
307   DALI_TEST_CHECK(task);
308
309   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
310   DALI_TEST_CHECK(task2);
311
312   Dali::AsyncTaskManager asyncTaskManager = Dali::AsyncTaskManager::Get();
313   DALI_TEST_CHECK(asyncTaskManager);
314
315   asyncTaskManager.AddTask(task);
316   asyncTaskManager.AddTask(task2);
317
318   END_TEST;
319 }
320
321 int UtcDaliCanvasViewRasterizeTaskAddRemoveTaskP(void)
322 {
323   ToolkitTestApplication application;
324
325   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
326   DALI_TEST_CHECK(dummyInternalCanvasView);
327
328   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
329   DALI_TEST_CHECK(dummyCanvasRenderer);
330
331   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
332   DALI_TEST_CHECK(task);
333
334   Dali::AsyncTaskManager asyncTaskManager = Dali::AsyncTaskManager::Get();
335   DALI_TEST_CHECK(asyncTaskManager);
336
337   asyncTaskManager.AddTask(task);
338
339   asyncTaskManager.RemoveTask(task);
340
341   END_TEST;
342 }
343
344 PixelData CreatePixelData(unsigned int width, unsigned int height)
345 {
346   unsigned int bufferSize = width * height * Pixel::GetBytesPerPixel(Pixel::RGBA8888);
347
348   unsigned char* buffer    = reinterpret_cast<unsigned char*>(malloc(bufferSize));
349   PixelData      pixelData = PixelData::New(buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE);
350
351   return pixelData;
352 }
353
354 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
355 {
356   ToolkitTestApplication application;
357
358   gRasterizationCompletedSignal = false;
359
360   Dali::Toolkit::CanvasView            canvasView              = Dali::Toolkit::CanvasView::New(Vector2(100, 100));
361
362   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
363   DALI_TEST_CHECK(dummyCanvasRenderer);
364
365   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
366   DALI_TEST_CHECK(task);
367
368   Dali::AsyncTaskManager asyncTaskManager = Dali::AsyncTaskManager::Get();
369   DALI_TEST_CHECK(asyncTaskManager);
370
371   asyncTaskManager.AddTask(task);
372
373   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
374   application.SendNotification();
375   application.Render();
376
377   DALI_TEST_EQUALS(gRasterizationCompletedSignal, true, TEST_LOCATION);
378
379   END_TEST;
380 }
381
382 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
383 {
384   ToolkitTestApplication application;
385
386   CanvasView canvasView = CanvasView::New(Vector2(100, 100));
387   DALI_TEST_CHECK(canvasView);
388
389   application.GetScene().Add(canvasView);
390
391   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
392
393   application.SendNotification();
394   application.Render();
395
396   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
397
398   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
399
400   canvasView.AddDrawable(shape);
401
402   application.SendNotification();
403   application.Render();
404
405   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
406
407   application.SendNotification();
408   application.Render();
409
410   END_TEST;
411 }
412
413 int UtcDaliCanvasViewViewBoxP(void)
414 {
415   ToolkitTestApplication application;
416
417   CanvasView canvasView = CanvasView::New(Vector2(300, 300));
418   DALI_TEST_CHECK(canvasView);
419
420   application.GetScene().Add(canvasView);
421
422   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
423   canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
424
425   application.SendNotification();
426   application.Render();
427
428   END_TEST;
429 }
430
431 int UtcDaliCanvasViewViewBoxN(void)
432 {
433   ToolkitTestApplication application;
434
435   CanvasView canvasView = CanvasView::New(Vector2(300, 300));
436   DALI_TEST_CHECK(canvasView);
437
438   application.GetScene().Add(canvasView);
439
440   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
441   canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
442
443   application.SendNotification();
444   application.Render();
445
446   Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
447   DALI_TEST_EQUALS(viewBox, Vector2(-999, -999), TEST_LOCATION);
448
449   END_TEST;
450 }