46a264327e83ba5e02f62c8f62419f60c8967bc4
[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 UtcDaliCanvasViewDownCastP(void)
106 {
107   ToolkitTestApplication application;
108   CanvasView canvasView = CanvasView::New(Vector2(100,100));
109
110   BaseHandle object(canvasView);
111
112   CanvasView canvasView2 = CanvasView::DownCast( object );
113   DALI_TEST_CHECK(canvasView2);
114
115   CanvasView canvasView3 = DownCast< CanvasView >(object);
116   DALI_TEST_CHECK(canvasView3);
117   END_TEST;
118 }
119
120 int UtcDaliCanvasViewDownCastN(void)
121 {
122   ToolkitTestApplication application;
123   BaseHandle unInitializedObject;
124
125   CanvasView canvasView1 = CanvasView::DownCast( unInitializedObject );
126   DALI_TEST_CHECK( !canvasView1 );
127
128   CanvasView canvasView2 = DownCast< CanvasView >( unInitializedObject );
129   DALI_TEST_CHECK( !canvasView2 );
130   END_TEST;
131 }
132
133 int UtcDaliCanvasViewAddP(void)
134 {
135   ToolkitTestApplication application;
136   CanvasView canvasView = CanvasView::New(Vector2(100,100));
137   DALI_TEST_CHECK( canvasView );
138
139   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
140
141   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
142
143   canvasView.AddDrawable(shape);
144
145   END_TEST;
146 }
147
148 int UtcDaliCanvasViewAddN(void)
149 {
150   ToolkitTestApplication application;
151   CanvasView canvasView = CanvasView::New(Vector2(100,100));
152   DALI_TEST_CHECK( canvasView );
153
154   Dali::CanvasRenderer::Shape shape;
155
156   canvasView.AddDrawable(shape);
157
158   END_TEST;
159 }
160
161 int UtcDaliCanvasViewChangeSizeP(void)
162 {
163   ToolkitTestApplication application;
164
165   CanvasView canvasView = CanvasView::New(Vector2(100,100));
166   DALI_TEST_CHECK( canvasView );
167
168   application.GetScene().Add(canvasView);
169
170   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
171
172   application.SendNotification();
173   application.Render();
174
175   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
176   Vector3 v3;
177   pv.Get(v3);
178   DALI_TEST_EQUALS( v3, Vector3(300, 300, 0), TEST_LOCATION );
179
180   END_TEST;
181 }
182
183 int UtcDaliCanvasViewSizeN(void)
184 {
185   ToolkitTestApplication application;
186
187   CanvasView canvasView = CanvasView::New(Vector2(100,100));
188   DALI_TEST_CHECK( canvasView );
189
190   application.GetScene().Add(canvasView);
191
192   canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
193
194   application.SendNotification();
195   application.Render();
196
197   Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
198   Vector3 v3;
199   pv.Get(v3);
200   DALI_TEST_EQUALS( v3, Vector3(-999, -999, 0), TEST_LOCATION );
201
202   END_TEST;
203 }
204
205 int UtcDaliCanvasViewRasterizeTaskP(void)
206 {
207   ToolkitTestApplication application;
208
209   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
210   DALI_TEST_CHECK( dummyInternalCanvasView );
211
212   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
213   DALI_TEST_CHECK( dummyCanvasRenderer );
214
215   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
216   DALI_TEST_CHECK( task );
217
218   END_TEST;
219 }
220
221 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
222 {
223   ToolkitTestApplication application;
224
225   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
226   DALI_TEST_CHECK( dummyInternalCanvasView );
227
228   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
229   DALI_TEST_CHECK( dummyCanvasRenderer );
230
231   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
232   DALI_TEST_CHECK( task );
233
234   DALI_TEST_EQUALS( task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION );
235
236   END_TEST;
237 }
238
239 int UtcDaliCanvasViewRasterizeTaskGetBufferSizeP(void)
240 {
241   ToolkitTestApplication application;
242
243   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
244   DALI_TEST_CHECK( dummyInternalCanvasView );
245
246   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
247   DALI_TEST_CHECK( dummyCanvasRenderer );
248
249   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
250   DALI_TEST_CHECK( task );
251
252   //There is no rasterized buffer.
253   DALI_TEST_EQUALS( task->GetBufferSize(), Vector2(0, 0), TEST_LOCATION );
254
255   END_TEST;
256 }
257
258 int UtcDaliCanvasViewRasterizeTaskGetPixelDataP(void)
259 {
260
261   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
262   DALI_TEST_CHECK( dummyInternalCanvasView );
263
264   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
265   DALI_TEST_CHECK( dummyCanvasRenderer );
266
267   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
268   DALI_TEST_CHECK( task );
269
270   DALI_TEST_EQUALS( task->GetPixelData(), PixelData(), TEST_LOCATION );
271
272   END_TEST;
273 }
274
275 int UtcDaliCanvasViewRasterizeThreadP(void)
276 {
277   ToolkitTestApplication application;
278
279   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
280   DALI_TEST_CHECK( dummyInternalCanvasView );
281
282   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
283   DALI_TEST_CHECK( dummyCanvasRenderer );
284
285   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
286   DALI_TEST_CHECK( task );
287
288   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
289   DALI_TEST_CHECK( dummyThread );
290
291   END_TEST;
292 }
293
294 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
295 {
296   ToolkitTestApplication application;
297
298   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
299   DALI_TEST_CHECK( dummyInternalCanvasView );
300
301   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
302   DALI_TEST_CHECK( dummyCanvasRenderer );
303
304   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
305   DALI_TEST_CHECK( task );
306
307   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
308   DALI_TEST_CHECK( task2 );
309
310   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
311   DALI_TEST_CHECK( dummyThread );
312
313   dummyThread->AddTask(task);
314   dummyThread->AddTask(task2);
315
316   END_TEST;
317 }
318
319 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
320 {
321   ToolkitTestApplication application;
322
323   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
324   DALI_TEST_CHECK( dummyInternalCanvasView );
325
326   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
327   DALI_TEST_CHECK( dummyCanvasRenderer );
328
329   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
330   DALI_TEST_CHECK( task );
331
332   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
333   DALI_TEST_CHECK( dummyThread );
334
335   dummyThread->AddTask(task);
336
337   dummyThread->RemoveTask(dummyInternalCanvasView);
338
339   END_TEST;
340 }
341
342 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
343 {
344   ToolkitTestApplication application;
345
346   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
347   DALI_TEST_CHECK( dummyInternalCanvasView );
348
349   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
350   DALI_TEST_CHECK( dummyCanvasRenderer );
351
352   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
353   DALI_TEST_CHECK( task );
354
355   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
356   DALI_TEST_CHECK( dummyThread );
357
358   dummyThread->AddTask(task);
359
360   dummyThread->ApplyRasterized();
361
362   END_TEST;
363 }
364
365 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
366 {
367   ToolkitTestApplication application;
368
369   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
370   DALI_TEST_CHECK( dummyInternalCanvasView );
371
372   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
373   DALI_TEST_CHECK( dummyCanvasRenderer );
374
375   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
376   DALI_TEST_CHECK( task );
377
378   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
379   DALI_TEST_CHECK( dummyThread );
380
381   dummyThread->AddTask(task);
382
383   Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
384
385   END_TEST;
386 }
387
388 PixelData CreatePixelData( unsigned int width, unsigned int height )
389 {
390   unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
391
392   unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
393   PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
394
395   return pixelData;
396 }
397
398 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
399 {
400   ToolkitTestApplication application;
401
402   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
403   DALI_TEST_CHECK( dummyInternalCanvasView );
404
405   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
406   DALI_TEST_CHECK( dummyCanvasRenderer );
407
408   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
409   DALI_TEST_CHECK( task );
410
411   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
412   DALI_TEST_CHECK( dummyThread );
413
414   dummyThread->AddTask(task);
415
416   dummyThread->Process(false);
417
418   END_TEST;
419 }
420
421 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
422 {
423   ToolkitTestApplication application;
424
425   Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
426   DALI_TEST_CHECK( dummyInternalCanvasView );
427
428   Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
429   DALI_TEST_CHECK( dummyCanvasRenderer );
430
431   IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
432   DALI_TEST_CHECK( task );
433
434   Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
435   DALI_TEST_CHECK( dummyThread );
436
437   dummyThread->AddTask(task);
438
439   dummyThread->Process(false);
440
441   PixelData pixelData = CreatePixelData( 100, 100 );
442
443   dummyThread->RasterizationCompletedSignal().Connect(dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
444   dummyThread->RasterizationCompletedSignal().Emit(pixelData);
445
446   application.SendNotification();
447   application.Render();
448
449   END_TEST;
450 }
451
452 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
453 {
454   ToolkitTestApplication application;
455
456   CanvasView canvasView = CanvasView::New(Vector2(100,100));
457   DALI_TEST_CHECK( canvasView );
458
459   application.GetScene().Add(canvasView);
460
461   canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
462
463   application.SendNotification();
464   application.Render();
465
466   Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
467
468   shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
469
470   canvasView.AddDrawable(shape);
471
472   application.SendNotification();
473   application.Render();
474
475   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
476
477   application.SendNotification();
478   application.Render();
479
480   END_TEST;
481 }