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 UtcDaliCanvasViewRemoveAllP(void)
201 ToolkitTestApplication application;
202 CanvasView canvasView = CanvasView::New(Vector2(100,100));
203 DALI_TEST_CHECK( canvasView );
205 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
207 canvasView.AddDrawable(shape);
209 canvasView.RemoveAllDrawables();
214 int UtcDaliCanvasViewRemoveAllN(void)
216 ToolkitTestApplication application;
218 CanvasView canvasView = CanvasView::New(Vector2(100,100));
219 DALI_TEST_CHECK( canvasView );
221 canvasView.RemoveAllDrawables();
227 int UtcDaliCanvasViewChangeSizeP(void)
229 ToolkitTestApplication application;
231 CanvasView canvasView = CanvasView::New(Vector2(100,100));
232 DALI_TEST_CHECK( canvasView );
234 application.GetScene().Add(canvasView);
236 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
238 application.SendNotification();
239 application.Render();
241 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
244 DALI_TEST_EQUALS( v3, Vector3(300, 300, 0), TEST_LOCATION );
249 int UtcDaliCanvasViewSizeN(void)
251 ToolkitTestApplication application;
253 CanvasView canvasView = CanvasView::New(Vector2(100,100));
254 DALI_TEST_CHECK( canvasView );
256 application.GetScene().Add(canvasView);
258 canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
260 application.SendNotification();
261 application.Render();
263 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
266 DALI_TEST_EQUALS( v3, Vector3(-999, -999, 0), TEST_LOCATION );
271 int UtcDaliCanvasViewRasterizeTaskP(void)
273 ToolkitTestApplication application;
275 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
276 DALI_TEST_CHECK( dummyInternalCanvasView );
278 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
279 DALI_TEST_CHECK( dummyCanvasRenderer );
281 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
282 DALI_TEST_CHECK( task );
287 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
289 ToolkitTestApplication application;
291 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
292 DALI_TEST_CHECK( dummyInternalCanvasView );
294 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
295 DALI_TEST_CHECK( dummyCanvasRenderer );
297 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
298 DALI_TEST_CHECK( task );
300 DALI_TEST_EQUALS( task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION );
305 int UtcDaliCanvasViewRasterizeTaskGetBufferSizeP(void)
307 ToolkitTestApplication application;
309 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
310 DALI_TEST_CHECK( dummyInternalCanvasView );
312 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
313 DALI_TEST_CHECK( dummyCanvasRenderer );
315 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
316 DALI_TEST_CHECK( task );
318 //There is no rasterized buffer.
319 DALI_TEST_EQUALS( task->GetBufferSize(), Vector2(0, 0), TEST_LOCATION );
324 int UtcDaliCanvasViewRasterizeTaskGetPixelDataP(void)
327 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
328 DALI_TEST_CHECK( dummyInternalCanvasView );
330 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
331 DALI_TEST_CHECK( dummyCanvasRenderer );
333 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
334 DALI_TEST_CHECK( task );
336 DALI_TEST_EQUALS( task->GetPixelData(), PixelData(), TEST_LOCATION );
341 int UtcDaliCanvasViewRasterizeThreadP(void)
343 ToolkitTestApplication application;
345 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
346 DALI_TEST_CHECK( dummyInternalCanvasView );
348 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
349 DALI_TEST_CHECK( dummyCanvasRenderer );
351 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
352 DALI_TEST_CHECK( task );
354 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
355 DALI_TEST_CHECK( dummyThread );
360 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
362 ToolkitTestApplication application;
364 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
365 DALI_TEST_CHECK( dummyInternalCanvasView );
367 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
368 DALI_TEST_CHECK( dummyCanvasRenderer );
370 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
371 DALI_TEST_CHECK( task );
373 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
374 DALI_TEST_CHECK( task2 );
376 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
377 DALI_TEST_CHECK( dummyThread );
379 dummyThread->AddTask(task);
380 dummyThread->AddTask(task2);
385 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
387 ToolkitTestApplication application;
389 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
390 DALI_TEST_CHECK( dummyInternalCanvasView );
392 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
393 DALI_TEST_CHECK( dummyCanvasRenderer );
395 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
396 DALI_TEST_CHECK( task );
398 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
399 DALI_TEST_CHECK( dummyThread );
401 dummyThread->AddTask(task);
403 dummyThread->RemoveTask(dummyInternalCanvasView);
408 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
410 ToolkitTestApplication application;
412 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
413 DALI_TEST_CHECK( dummyInternalCanvasView );
415 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
416 DALI_TEST_CHECK( dummyCanvasRenderer );
418 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
419 DALI_TEST_CHECK( task );
421 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
422 DALI_TEST_CHECK( dummyThread );
424 dummyThread->AddTask(task);
426 dummyThread->ApplyRasterized();
431 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
433 ToolkitTestApplication application;
435 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
436 DALI_TEST_CHECK( dummyInternalCanvasView );
438 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
439 DALI_TEST_CHECK( dummyCanvasRenderer );
441 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
442 DALI_TEST_CHECK( task );
444 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
445 DALI_TEST_CHECK( dummyThread );
447 dummyThread->AddTask(task);
449 Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
454 PixelData CreatePixelData( unsigned int width, unsigned int height )
456 unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
458 unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
459 PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
464 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
466 ToolkitTestApplication application;
468 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
469 DALI_TEST_CHECK( dummyInternalCanvasView );
471 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
472 DALI_TEST_CHECK( dummyCanvasRenderer );
474 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
475 DALI_TEST_CHECK( task );
477 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
478 DALI_TEST_CHECK( dummyThread );
480 dummyThread->AddTask(task);
482 dummyThread->Process(false);
487 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
489 ToolkitTestApplication application;
491 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
492 DALI_TEST_CHECK( dummyInternalCanvasView );
494 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
495 DALI_TEST_CHECK( dummyCanvasRenderer );
497 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
498 DALI_TEST_CHECK( task );
500 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
501 DALI_TEST_CHECK( dummyThread );
503 dummyThread->AddTask(task);
505 dummyThread->Process(false);
507 PixelData pixelData = CreatePixelData( 100, 100 );
509 dummyThread->RasterizationCompletedSignal().Connect(dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
510 dummyThread->RasterizationCompletedSignal().Emit(pixelData);
512 application.SendNotification();
513 application.Render();
518 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
520 ToolkitTestApplication application;
522 CanvasView canvasView = CanvasView::New(Vector2(100,100));
523 DALI_TEST_CHECK( canvasView );
525 application.GetScene().Add(canvasView);
527 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
529 application.SendNotification();
530 application.Render();
532 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
534 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
536 canvasView.AddDrawable(shape);
538 application.SendNotification();
539 application.Render();
541 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
543 application.SendNotification();
544 application.Render();
549 int UtcDaliCanvasViewViewBoxP(void)
551 ToolkitTestApplication application;
553 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
554 DALI_TEST_CHECK( canvasView );
556 application.GetScene().Add(canvasView);
558 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
559 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
561 application.SendNotification();
562 application.Render();
567 int UtcDaliCanvasViewViewBoxN(void)
569 ToolkitTestApplication application;
571 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
572 DALI_TEST_CHECK( canvasView );
574 application.GetScene().Add(canvasView);
576 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
577 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
579 application.SendNotification();
580 application.Render();
582 Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
583 DALI_TEST_EQUALS( viewBox, Vector2(-999, -999), TEST_LOCATION );