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 UtcDaliCanvasViewRasterizeThreadP(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 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
319 DALI_TEST_CHECK( dummyThread );
324 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
326 ToolkitTestApplication application;
328 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
329 DALI_TEST_CHECK( dummyInternalCanvasView );
331 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
332 DALI_TEST_CHECK( dummyCanvasRenderer );
334 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
335 DALI_TEST_CHECK( task );
337 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
338 DALI_TEST_CHECK( task2 );
340 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
341 DALI_TEST_CHECK( dummyThread );
343 dummyThread->AddTask(task);
344 dummyThread->AddTask(task2);
349 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
351 ToolkitTestApplication application;
353 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
354 DALI_TEST_CHECK( dummyInternalCanvasView );
356 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
357 DALI_TEST_CHECK( dummyCanvasRenderer );
359 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
360 DALI_TEST_CHECK( task );
362 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
363 DALI_TEST_CHECK( dummyThread );
365 dummyThread->AddTask(task);
367 dummyThread->RemoveTask(dummyInternalCanvasView);
372 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
374 ToolkitTestApplication application;
376 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
377 DALI_TEST_CHECK( dummyInternalCanvasView );
379 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
380 DALI_TEST_CHECK( dummyCanvasRenderer );
382 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
383 DALI_TEST_CHECK( task );
385 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
386 DALI_TEST_CHECK( dummyThread );
388 dummyThread->AddTask(task);
390 dummyThread->ApplyRasterized();
395 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
397 ToolkitTestApplication application;
399 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
400 DALI_TEST_CHECK( dummyInternalCanvasView );
402 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
403 DALI_TEST_CHECK( dummyCanvasRenderer );
405 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
406 DALI_TEST_CHECK( task );
408 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
409 DALI_TEST_CHECK( dummyThread );
411 dummyThread->AddTask(task);
413 Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
418 PixelData CreatePixelData( unsigned int width, unsigned int height )
420 unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
422 unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
423 PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
428 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
430 ToolkitTestApplication application;
432 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
433 DALI_TEST_CHECK( dummyInternalCanvasView );
435 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
436 DALI_TEST_CHECK( dummyCanvasRenderer );
438 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
439 DALI_TEST_CHECK( task );
441 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
442 DALI_TEST_CHECK( dummyThread );
444 dummyThread->AddTask(task);
446 dummyThread->Process(false);
451 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
453 ToolkitTestApplication application;
455 Dali::Toolkit::CanvasView canvasView = Dali::Toolkit::CanvasView::New(Vector2(100, 100));
456 Dali::Toolkit::Internal::CanvasView& dummyInternalCanvasView = GetImpl(canvasView);
458 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
459 DALI_TEST_CHECK( dummyCanvasRenderer );
461 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(&dummyInternalCanvasView, dummyCanvasRenderer);
462 DALI_TEST_CHECK( task );
464 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
465 DALI_TEST_CHECK( dummyThread );
467 dummyThread->AddTask(task);
469 dummyThread->Process(false);
471 auto texture = Texture::New( Dali::TextureType::TEXTURE_2D, Pixel::RGBA8888, 100, 100 );
473 dummyThread->RasterizationCompletedSignal().Connect(&dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
474 dummyThread->RasterizationCompletedSignal().Emit(texture);
476 application.SendNotification();
477 application.Render();
482 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
484 ToolkitTestApplication application;
486 CanvasView canvasView = CanvasView::New(Vector2(100,100));
487 DALI_TEST_CHECK( canvasView );
489 application.GetScene().Add(canvasView);
491 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
493 application.SendNotification();
494 application.Render();
496 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
498 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
500 canvasView.AddDrawable(shape);
502 application.SendNotification();
503 application.Render();
505 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
507 application.SendNotification();
508 application.Render();
513 int UtcDaliCanvasViewViewBoxP(void)
515 ToolkitTestApplication application;
517 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
518 DALI_TEST_CHECK( canvasView );
520 application.GetScene().Add(canvasView);
522 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
523 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
525 application.SendNotification();
526 application.Render();
531 int UtcDaliCanvasViewViewBoxN(void)
533 ToolkitTestApplication application;
535 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
536 DALI_TEST_CHECK( canvasView );
538 application.GetScene().Add(canvasView);
540 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
541 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
543 application.SendNotification();
544 application.Render();
546 Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
547 DALI_TEST_EQUALS( viewBox, Vector2(-999, -999), TEST_LOCATION );