Add CanvasView::New() API that can be created without viewbox.
[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 UtcDaliCanvasViewChangeSizeP(void)
171 {
172   ToolkitTestApplication application;
173
174   CanvasView canvasView = CanvasView::New(Vector2(100,100));
175   DALI_TEST_CHECK( canvasView );
176
177   application.GetScene().Add(canvasView);
178
179   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
180
181   application.SendNotification();
182   application.Render();
183
184   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
185   Vector3 v3;
186   pv.Get(v3);
187   DALI_TEST_EQUALS( v3, Vector3(300, 300, 0), TEST_LOCATION );
188
189   END_TEST;
190 }
191
192 int UtcDaliCanvasViewSizeN(void)
193 {
194   ToolkitTestApplication application;
195
196   CanvasView canvasView = CanvasView::New(Vector2(100,100));
197   DALI_TEST_CHECK( canvasView );
198
199   application.GetScene().Add(canvasView);
200
201   canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
202
203   application.SendNotification();
204   application.Render();
205
206   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
207   Vector3 v3;
208   pv.Get(v3);
209   DALI_TEST_EQUALS( v3, Vector3(-999, -999, 0), TEST_LOCATION );
210
211   END_TEST;
212 }
213
214 int UtcDaliCanvasViewRasterizeTaskP(void)
215 {
216   ToolkitTestApplication application;
217
218   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
219   DALI_TEST_CHECK( dummyInternalCanvasView );
220
221   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
222   DALI_TEST_CHECK( dummyCanvasRenderer );
223
224   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
225   DALI_TEST_CHECK( task );
226
227   END_TEST;
228 }
229
230 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
231 {
232   ToolkitTestApplication application;
233
234   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
235   DALI_TEST_CHECK( dummyInternalCanvasView );
236
237   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
238   DALI_TEST_CHECK( dummyCanvasRenderer );
239
240   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
241   DALI_TEST_CHECK( task );
242
243   DALI_TEST_EQUALS( task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION );
244
245   END_TEST;
246 }
247
248 int UtcDaliCanvasViewRasterizeTaskGetBufferSizeP(void)
249 {
250   ToolkitTestApplication application;
251
252   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
253   DALI_TEST_CHECK( dummyInternalCanvasView );
254
255   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
256   DALI_TEST_CHECK( dummyCanvasRenderer );
257
258   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
259   DALI_TEST_CHECK( task );
260
261   //There is no rasterized buffer.
262   DALI_TEST_EQUALS( task->GetBufferSize(), Vector2(0, 0), TEST_LOCATION );
263
264   END_TEST;
265 }
266
267 int UtcDaliCanvasViewRasterizeTaskGetPixelDataP(void)
268 {
269
270   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
271   DALI_TEST_CHECK( dummyInternalCanvasView );
272
273   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
274   DALI_TEST_CHECK( dummyCanvasRenderer );
275
276   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
277   DALI_TEST_CHECK( task );
278
279   DALI_TEST_EQUALS( task->GetPixelData(), PixelData(), TEST_LOCATION );
280
281   END_TEST;
282 }
283
284 int UtcDaliCanvasViewRasterizeThreadP(void)
285 {
286   ToolkitTestApplication application;
287
288   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
289   DALI_TEST_CHECK( dummyInternalCanvasView );
290
291   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
292   DALI_TEST_CHECK( dummyCanvasRenderer );
293
294   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
295   DALI_TEST_CHECK( task );
296
297   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
298   DALI_TEST_CHECK( dummyThread );
299
300   END_TEST;
301 }
302
303 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
304 {
305   ToolkitTestApplication application;
306
307   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
308   DALI_TEST_CHECK( dummyInternalCanvasView );
309
310   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
311   DALI_TEST_CHECK( dummyCanvasRenderer );
312
313   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
314   DALI_TEST_CHECK( task );
315
316   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
317   DALI_TEST_CHECK( task2 );
318
319   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
320   DALI_TEST_CHECK( dummyThread );
321
322   dummyThread->AddTask(task);
323   dummyThread->AddTask(task2);
324
325   END_TEST;
326 }
327
328 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
329 {
330   ToolkitTestApplication application;
331
332   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
333   DALI_TEST_CHECK( dummyInternalCanvasView );
334
335   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
336   DALI_TEST_CHECK( dummyCanvasRenderer );
337
338   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
339   DALI_TEST_CHECK( task );
340
341   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
342   DALI_TEST_CHECK( dummyThread );
343
344   dummyThread->AddTask(task);
345
346   dummyThread->RemoveTask(dummyInternalCanvasView);
347
348   END_TEST;
349 }
350
351 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(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->ApplyRasterized();
370
371   END_TEST;
372 }
373
374 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(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   Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
393
394   END_TEST;
395 }
396
397 PixelData CreatePixelData( unsigned int width, unsigned int height )
398 {
399   unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
400
401   unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
402   PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
403
404   return pixelData;
405 }
406
407 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
408 {
409   ToolkitTestApplication application;
410
411   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
412   DALI_TEST_CHECK( dummyInternalCanvasView );
413
414   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
415   DALI_TEST_CHECK( dummyCanvasRenderer );
416
417   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
418   DALI_TEST_CHECK( task );
419
420   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
421   DALI_TEST_CHECK( dummyThread );
422
423   dummyThread->AddTask(task);
424
425   dummyThread->Process(false);
426
427   END_TEST;
428 }
429
430 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(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   PixelData pixelData = CreatePixelData( 100, 100 );
451
452   dummyThread->RasterizationCompletedSignal().Connect(dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
453   dummyThread->RasterizationCompletedSignal().Emit(pixelData);
454
455   application.SendNotification();
456   application.Render();
457
458   END_TEST;
459 }
460
461 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
462 {
463   ToolkitTestApplication application;
464
465   CanvasView canvasView = CanvasView::New(Vector2(100,100));
466   DALI_TEST_CHECK( canvasView );
467
468   application.GetScene().Add(canvasView);
469
470   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
471
472   application.SendNotification();
473   application.Render();
474
475   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
476
477   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
478
479   canvasView.AddDrawable(shape);
480
481   application.SendNotification();
482   application.Render();
483
484   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
485
486   application.SendNotification();
487   application.Render();
488
489   END_TEST;
490 }