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