36cf1df33cc4876b1e93dee1597209b1d82a9161
[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 UtcDaliCanvasViewRemoveAllP(void)
200 {
201   ToolkitTestApplication application;
202   CanvasView canvasView = CanvasView::New(Vector2(100,100));
203   DALI_TEST_CHECK( canvasView );
204
205   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
206
207   canvasView.AddDrawable(shape);
208
209   canvasView.RemoveAllDrawables();
210
211   END_TEST;
212 }
213
214 int UtcDaliCanvasViewRemoveAllN(void)
215 {
216   ToolkitTestApplication application;
217
218   CanvasView canvasView = CanvasView::New(Vector2(100,100));
219   DALI_TEST_CHECK( canvasView );
220
221   canvasView.RemoveAllDrawables();
222
223   END_TEST;
224 }
225
226
227 int UtcDaliCanvasViewChangeSizeP(void)
228 {
229   ToolkitTestApplication application;
230
231   CanvasView canvasView = CanvasView::New(Vector2(100,100));
232   DALI_TEST_CHECK( canvasView );
233
234   application.GetScene().Add(canvasView);
235
236   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
237
238   application.SendNotification();
239   application.Render();
240
241   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
242   Vector3 v3;
243   pv.Get(v3);
244   DALI_TEST_EQUALS( v3, Vector3(300, 300, 0), TEST_LOCATION );
245
246   END_TEST;
247 }
248
249 int UtcDaliCanvasViewSizeN(void)
250 {
251   ToolkitTestApplication application;
252
253   CanvasView canvasView = CanvasView::New(Vector2(100,100));
254   DALI_TEST_CHECK( canvasView );
255
256   application.GetScene().Add(canvasView);
257
258   canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
259
260   application.SendNotification();
261   application.Render();
262
263   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
264   Vector3 v3;
265   pv.Get(v3);
266   DALI_TEST_EQUALS( v3, Vector3(-999, -999, 0), TEST_LOCATION );
267
268   END_TEST;
269 }
270
271 int UtcDaliCanvasViewRasterizeTaskP(void)
272 {
273   ToolkitTestApplication application;
274
275   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
276   DALI_TEST_CHECK( dummyInternalCanvasView );
277
278   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
279   DALI_TEST_CHECK( dummyCanvasRenderer );
280
281   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
282   DALI_TEST_CHECK( task );
283
284   END_TEST;
285 }
286
287 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
288 {
289   ToolkitTestApplication application;
290
291   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
292   DALI_TEST_CHECK( dummyInternalCanvasView );
293
294   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
295   DALI_TEST_CHECK( dummyCanvasRenderer );
296
297   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
298   DALI_TEST_CHECK( task );
299
300   DALI_TEST_EQUALS( task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION );
301
302   END_TEST;
303 }
304
305 int UtcDaliCanvasViewRasterizeTaskGetBufferSizeP(void)
306 {
307   ToolkitTestApplication application;
308
309   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
310   DALI_TEST_CHECK( dummyInternalCanvasView );
311
312   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
313   DALI_TEST_CHECK( dummyCanvasRenderer );
314
315   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
316   DALI_TEST_CHECK( task );
317
318   //There is no rasterized buffer.
319   DALI_TEST_EQUALS( task->GetBufferSize(), Vector2(0, 0), TEST_LOCATION );
320
321   END_TEST;
322 }
323
324 int UtcDaliCanvasViewRasterizeTaskGetPixelDataP(void)
325 {
326
327   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
328   DALI_TEST_CHECK( dummyInternalCanvasView );
329
330   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
331   DALI_TEST_CHECK( dummyCanvasRenderer );
332
333   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
334   DALI_TEST_CHECK( task );
335
336   DALI_TEST_EQUALS( task->GetPixelData(), PixelData(), TEST_LOCATION );
337
338   END_TEST;
339 }
340
341 int UtcDaliCanvasViewRasterizeThreadP(void)
342 {
343   ToolkitTestApplication application;
344
345   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
346   DALI_TEST_CHECK( dummyInternalCanvasView );
347
348   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
349   DALI_TEST_CHECK( dummyCanvasRenderer );
350
351   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
352   DALI_TEST_CHECK( task );
353
354   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
355   DALI_TEST_CHECK( dummyThread );
356
357   END_TEST;
358 }
359
360 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
361 {
362   ToolkitTestApplication application;
363
364   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
365   DALI_TEST_CHECK( dummyInternalCanvasView );
366
367   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
368   DALI_TEST_CHECK( dummyCanvasRenderer );
369
370   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
371   DALI_TEST_CHECK( task );
372
373   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
374   DALI_TEST_CHECK( task2 );
375
376   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
377   DALI_TEST_CHECK( dummyThread );
378
379   dummyThread->AddTask(task);
380   dummyThread->AddTask(task2);
381
382   END_TEST;
383 }
384
385 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
386 {
387   ToolkitTestApplication application;
388
389   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
390   DALI_TEST_CHECK( dummyInternalCanvasView );
391
392   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
393   DALI_TEST_CHECK( dummyCanvasRenderer );
394
395   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
396   DALI_TEST_CHECK( task );
397
398   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
399   DALI_TEST_CHECK( dummyThread );
400
401   dummyThread->AddTask(task);
402
403   dummyThread->RemoveTask(dummyInternalCanvasView);
404
405   END_TEST;
406 }
407
408 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
409 {
410   ToolkitTestApplication application;
411
412   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
413   DALI_TEST_CHECK( dummyInternalCanvasView );
414
415   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
416   DALI_TEST_CHECK( dummyCanvasRenderer );
417
418   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
419   DALI_TEST_CHECK( task );
420
421   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
422   DALI_TEST_CHECK( dummyThread );
423
424   dummyThread->AddTask(task);
425
426   dummyThread->ApplyRasterized();
427
428   END_TEST;
429 }
430
431 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
432 {
433   ToolkitTestApplication application;
434
435   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
436   DALI_TEST_CHECK( dummyInternalCanvasView );
437
438   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
439   DALI_TEST_CHECK( dummyCanvasRenderer );
440
441   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
442   DALI_TEST_CHECK( task );
443
444   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
445   DALI_TEST_CHECK( dummyThread );
446
447   dummyThread->AddTask(task);
448
449   Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
450
451   END_TEST;
452 }
453
454 PixelData CreatePixelData( unsigned int width, unsigned int height )
455 {
456   unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
457
458   unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
459   PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
460
461   return pixelData;
462 }
463
464 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
465 {
466   ToolkitTestApplication application;
467
468   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
469   DALI_TEST_CHECK( dummyInternalCanvasView );
470
471   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
472   DALI_TEST_CHECK( dummyCanvasRenderer );
473
474   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
475   DALI_TEST_CHECK( task );
476
477   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
478   DALI_TEST_CHECK( dummyThread );
479
480   dummyThread->AddTask(task);
481
482   dummyThread->Process(false);
483
484   END_TEST;
485 }
486
487 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
488 {
489   ToolkitTestApplication application;
490
491   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
492   DALI_TEST_CHECK( dummyInternalCanvasView );
493
494   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
495   DALI_TEST_CHECK( dummyCanvasRenderer );
496
497   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
498   DALI_TEST_CHECK( task );
499
500   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
501   DALI_TEST_CHECK( dummyThread );
502
503   dummyThread->AddTask(task);
504
505   dummyThread->Process(false);
506
507   PixelData pixelData = CreatePixelData( 100, 100 );
508
509   dummyThread->RasterizationCompletedSignal().Connect(dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
510   dummyThread->RasterizationCompletedSignal().Emit(pixelData);
511
512   application.SendNotification();
513   application.Render();
514
515   END_TEST;
516 }
517
518 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
519 {
520   ToolkitTestApplication application;
521
522   CanvasView canvasView = CanvasView::New(Vector2(100,100));
523   DALI_TEST_CHECK( canvasView );
524
525   application.GetScene().Add(canvasView);
526
527   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
528
529   application.SendNotification();
530   application.Render();
531
532   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
533
534   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
535
536   canvasView.AddDrawable(shape);
537
538   application.SendNotification();
539   application.Render();
540
541   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
542
543   application.SendNotification();
544   application.Render();
545
546   END_TEST;
547 }
548
549 int UtcDaliCanvasViewViewBoxP(void)
550 {
551   ToolkitTestApplication application;
552
553   CanvasView canvasView = CanvasView::New(Vector2(300, 300));
554   DALI_TEST_CHECK( canvasView );
555
556   application.GetScene().Add(canvasView);
557
558   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
559   canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
560
561   application.SendNotification();
562   application.Render();
563
564   END_TEST;
565 }
566
567 int UtcDaliCanvasViewViewBoxN(void)
568 {
569   ToolkitTestApplication application;
570
571   CanvasView canvasView = CanvasView::New(Vector2(300, 300));
572   DALI_TEST_CHECK( canvasView );
573
574   application.GetScene().Add(canvasView);
575
576   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
577   canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
578
579   application.SendNotification();
580   application.Render();
581
582   Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
583   DALI_TEST_EQUALS( viewBox, Vector2(-999, -999), TEST_LOCATION );
584
585   END_TEST;
586 }