2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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>
31 using namespace Toolkit;
39 void utc_dali_toolkit_canvasview_startup(void)
41 test_return_value = TET_UNDEF;
44 void utc_dali_toolkit_canvasview_cleanup(void)
46 test_return_value = TET_PASS;
49 int UtcDaliCanvasViewConstructorP(void)
51 ToolkitTestApplication application;
52 CanvasView canvasView;
54 DALI_TEST_CHECK( !canvasView );
58 int UtcDaliCanvasViewMoveAssignment(void)
60 ToolkitTestApplication application;
61 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
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 );
71 int UtcDaliCanvasViewAssignmentConstructorP(void)
73 ToolkitTestApplication application;
74 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
76 CanvasView copy( canvasView );
77 DALI_TEST_CHECK( copy );
79 DALI_TEST_CHECK( canvasView == copy );
83 int UtcDaliCanvasViewAssignmentOperatorP(void)
85 ToolkitTestApplication application;
86 const CanvasView canvasView = CanvasView::New(Vector2(100, 100));
89 DALI_TEST_CHECK( !assign );
92 DALI_TEST_CHECK( assign == canvasView);
96 int UtcDaliCanvasViewNewP(void)
98 ToolkitTestApplication application;
99 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
101 DALI_TEST_CHECK( canvasView );
105 int UtcDaliCanvasViewNewWithoutViewboxP(void)
107 ToolkitTestApplication application;
108 CanvasView canvasView = CanvasView::New();
110 DALI_TEST_CHECK( canvasView );
114 int UtcDaliCanvasViewDownCastP(void)
116 ToolkitTestApplication application;
117 CanvasView canvasView = CanvasView::New(Vector2(100,100));
119 BaseHandle object(canvasView);
121 CanvasView canvasView2 = CanvasView::DownCast( object );
122 DALI_TEST_CHECK(canvasView2);
124 CanvasView canvasView3 = DownCast< CanvasView >(object);
125 DALI_TEST_CHECK(canvasView3);
129 int UtcDaliCanvasViewDownCastN(void)
131 ToolkitTestApplication application;
132 BaseHandle unInitializedObject;
134 CanvasView canvasView1 = CanvasView::DownCast( unInitializedObject );
135 DALI_TEST_CHECK( !canvasView1 );
137 CanvasView canvasView2 = DownCast< CanvasView >( unInitializedObject );
138 DALI_TEST_CHECK( !canvasView2 );
142 int UtcDaliCanvasViewAddP(void)
144 ToolkitTestApplication application;
145 CanvasView canvasView = CanvasView::New(Vector2(100,100));
146 DALI_TEST_CHECK( canvasView );
148 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
150 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
152 canvasView.AddDrawable(shape);
157 int UtcDaliCanvasViewAddN(void)
159 ToolkitTestApplication application;
160 CanvasView canvasView = CanvasView::New(Vector2(100,100));
161 DALI_TEST_CHECK( canvasView );
163 Dali::CanvasRenderer::Shape shape;
165 canvasView.AddDrawable(shape);
170 int UtcDaliCanvasViewRemoveP(void)
172 ToolkitTestApplication application;
173 CanvasView canvasView = CanvasView::New(Vector2(100,100));
174 DALI_TEST_CHECK( canvasView );
176 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
178 canvasView.AddDrawable(shape);
180 DALI_TEST_CHECK( canvasView.RemoveDrawable(shape) );
185 int UtcDaliCanvasViewRemoveN(void)
187 ToolkitTestApplication application;
189 CanvasView canvasView = CanvasView::New(Vector2(100,100));
190 DALI_TEST_CHECK( canvasView );
192 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
194 DALI_TEST_CHECK( !canvasView.RemoveDrawable(shape) );
199 int UtcDaliCanvasViewChangeSizeP(void)
201 ToolkitTestApplication application;
203 CanvasView canvasView = CanvasView::New(Vector2(100,100));
204 DALI_TEST_CHECK( canvasView );
206 application.GetScene().Add(canvasView);
208 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
210 application.SendNotification();
211 application.Render();
213 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
216 DALI_TEST_EQUALS( v3, Vector3(300, 300, 0), TEST_LOCATION );
221 int UtcDaliCanvasViewSizeN(void)
223 ToolkitTestApplication application;
225 CanvasView canvasView = CanvasView::New(Vector2(100,100));
226 DALI_TEST_CHECK( canvasView );
228 application.GetScene().Add(canvasView);
230 canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
232 application.SendNotification();
233 application.Render();
235 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
238 DALI_TEST_EQUALS( v3, Vector3(-999, -999, 0), TEST_LOCATION );
243 int UtcDaliCanvasViewRasterizeTaskP(void)
245 ToolkitTestApplication application;
247 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
248 DALI_TEST_CHECK( dummyInternalCanvasView );
250 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
251 DALI_TEST_CHECK( dummyCanvasRenderer );
253 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
254 DALI_TEST_CHECK( task );
259 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
261 ToolkitTestApplication application;
263 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
264 DALI_TEST_CHECK( dummyInternalCanvasView );
266 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
267 DALI_TEST_CHECK( dummyCanvasRenderer );
269 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
270 DALI_TEST_CHECK( task );
272 DALI_TEST_EQUALS( task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION );
277 int UtcDaliCanvasViewRasterizeTaskGetBufferSizeP(void)
279 ToolkitTestApplication application;
281 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
282 DALI_TEST_CHECK( dummyInternalCanvasView );
284 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
285 DALI_TEST_CHECK( dummyCanvasRenderer );
287 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
288 DALI_TEST_CHECK( task );
290 //There is no rasterized buffer.
291 DALI_TEST_EQUALS( task->GetBufferSize(), Vector2(0, 0), TEST_LOCATION );
296 int UtcDaliCanvasViewRasterizeTaskGetPixelDataP(void)
299 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
300 DALI_TEST_CHECK( dummyInternalCanvasView );
302 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
303 DALI_TEST_CHECK( dummyCanvasRenderer );
305 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
306 DALI_TEST_CHECK( task );
308 DALI_TEST_EQUALS( task->GetPixelData(), PixelData(), TEST_LOCATION );
313 int UtcDaliCanvasViewRasterizeThreadP(void)
315 ToolkitTestApplication application;
317 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
318 DALI_TEST_CHECK( dummyInternalCanvasView );
320 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
321 DALI_TEST_CHECK( dummyCanvasRenderer );
323 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
324 DALI_TEST_CHECK( task );
326 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
327 DALI_TEST_CHECK( dummyThread );
332 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
334 ToolkitTestApplication application;
336 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
337 DALI_TEST_CHECK( dummyInternalCanvasView );
339 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
340 DALI_TEST_CHECK( dummyCanvasRenderer );
342 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
343 DALI_TEST_CHECK( task );
345 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
346 DALI_TEST_CHECK( task2 );
348 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
349 DALI_TEST_CHECK( dummyThread );
351 dummyThread->AddTask(task);
352 dummyThread->AddTask(task2);
357 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
359 ToolkitTestApplication application;
361 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
362 DALI_TEST_CHECK( dummyInternalCanvasView );
364 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
365 DALI_TEST_CHECK( dummyCanvasRenderer );
367 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
368 DALI_TEST_CHECK( task );
370 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
371 DALI_TEST_CHECK( dummyThread );
373 dummyThread->AddTask(task);
375 dummyThread->RemoveTask(dummyInternalCanvasView);
380 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
382 ToolkitTestApplication application;
384 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
385 DALI_TEST_CHECK( dummyInternalCanvasView );
387 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
388 DALI_TEST_CHECK( dummyCanvasRenderer );
390 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
391 DALI_TEST_CHECK( task );
393 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
394 DALI_TEST_CHECK( dummyThread );
396 dummyThread->AddTask(task);
398 dummyThread->ApplyRasterized();
403 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
405 ToolkitTestApplication application;
407 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
408 DALI_TEST_CHECK( dummyInternalCanvasView );
410 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
411 DALI_TEST_CHECK( dummyCanvasRenderer );
413 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
414 DALI_TEST_CHECK( task );
416 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
417 DALI_TEST_CHECK( dummyThread );
419 dummyThread->AddTask(task);
421 Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
426 PixelData CreatePixelData( unsigned int width, unsigned int height )
428 unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
430 unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
431 PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
436 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
438 ToolkitTestApplication application;
440 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
441 DALI_TEST_CHECK( dummyInternalCanvasView );
443 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
444 DALI_TEST_CHECK( dummyCanvasRenderer );
446 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
447 DALI_TEST_CHECK( task );
449 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
450 DALI_TEST_CHECK( dummyThread );
452 dummyThread->AddTask(task);
454 dummyThread->Process(false);
459 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
461 ToolkitTestApplication application;
463 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
464 DALI_TEST_CHECK( dummyInternalCanvasView );
466 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
467 DALI_TEST_CHECK( dummyCanvasRenderer );
469 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
470 DALI_TEST_CHECK( task );
472 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
473 DALI_TEST_CHECK( dummyThread );
475 dummyThread->AddTask(task);
477 dummyThread->Process(false);
479 PixelData pixelData = CreatePixelData( 100, 100 );
481 dummyThread->RasterizationCompletedSignal().Connect(dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
482 dummyThread->RasterizationCompletedSignal().Emit(pixelData);
484 application.SendNotification();
485 application.Render();
490 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
492 ToolkitTestApplication application;
494 CanvasView canvasView = CanvasView::New(Vector2(100,100));
495 DALI_TEST_CHECK( canvasView );
497 application.GetScene().Add(canvasView);
499 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
501 application.SendNotification();
502 application.Render();
504 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
506 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
508 canvasView.AddDrawable(shape);
510 application.SendNotification();
511 application.Render();
513 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
515 application.SendNotification();
516 application.Render();
521 int UtcDaliCanvasViewViewBoxP(void)
523 ToolkitTestApplication application;
525 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
526 DALI_TEST_CHECK( canvasView );
528 application.GetScene().Add(canvasView);
530 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
531 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
533 application.SendNotification();
534 application.Render();
539 int UtcDaliCanvasViewViewBoxN(void)
541 ToolkitTestApplication application;
543 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
544 DALI_TEST_CHECK( canvasView );
546 application.GetScene().Add(canvasView);
548 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
549 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
551 application.SendNotification();
552 application.Render();
554 Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
555 DALI_TEST_EQUALS( viewBox, Vector2(-999, -999), TEST_LOCATION );