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 UtcDaliCanvasViewChangeSizeP(void)
172 ToolkitTestApplication application;
174 CanvasView canvasView = CanvasView::New(Vector2(100,100));
175 DALI_TEST_CHECK( canvasView );
177 application.GetScene().Add(canvasView);
179 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
181 application.SendNotification();
182 application.Render();
184 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
187 DALI_TEST_EQUALS( v3, Vector3(300, 300, 0), TEST_LOCATION );
192 int UtcDaliCanvasViewSizeN(void)
194 ToolkitTestApplication application;
196 CanvasView canvasView = CanvasView::New(Vector2(100,100));
197 DALI_TEST_CHECK( canvasView );
199 application.GetScene().Add(canvasView);
201 canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
203 application.SendNotification();
204 application.Render();
206 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
209 DALI_TEST_EQUALS( v3, Vector3(-999, -999, 0), TEST_LOCATION );
214 int UtcDaliCanvasViewRasterizeTaskP(void)
216 ToolkitTestApplication application;
218 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
219 DALI_TEST_CHECK( dummyInternalCanvasView );
221 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
222 DALI_TEST_CHECK( dummyCanvasRenderer );
224 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
225 DALI_TEST_CHECK( task );
230 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
232 ToolkitTestApplication application;
234 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
235 DALI_TEST_CHECK( dummyInternalCanvasView );
237 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
238 DALI_TEST_CHECK( dummyCanvasRenderer );
240 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
241 DALI_TEST_CHECK( task );
243 DALI_TEST_EQUALS( task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION );
248 int UtcDaliCanvasViewRasterizeTaskGetBufferSizeP(void)
250 ToolkitTestApplication application;
252 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
253 DALI_TEST_CHECK( dummyInternalCanvasView );
255 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
256 DALI_TEST_CHECK( dummyCanvasRenderer );
258 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
259 DALI_TEST_CHECK( task );
261 //There is no rasterized buffer.
262 DALI_TEST_EQUALS( task->GetBufferSize(), Vector2(0, 0), TEST_LOCATION );
267 int UtcDaliCanvasViewRasterizeTaskGetPixelDataP(void)
270 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
271 DALI_TEST_CHECK( dummyInternalCanvasView );
273 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
274 DALI_TEST_CHECK( dummyCanvasRenderer );
276 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
277 DALI_TEST_CHECK( task );
279 DALI_TEST_EQUALS( task->GetPixelData(), PixelData(), TEST_LOCATION );
284 int UtcDaliCanvasViewRasterizeThreadP(void)
286 ToolkitTestApplication application;
288 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
289 DALI_TEST_CHECK( dummyInternalCanvasView );
291 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
292 DALI_TEST_CHECK( dummyCanvasRenderer );
294 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
295 DALI_TEST_CHECK( task );
297 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
298 DALI_TEST_CHECK( dummyThread );
303 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
305 ToolkitTestApplication application;
307 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
308 DALI_TEST_CHECK( dummyInternalCanvasView );
310 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
311 DALI_TEST_CHECK( dummyCanvasRenderer );
313 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
314 DALI_TEST_CHECK( task );
316 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
317 DALI_TEST_CHECK( task2 );
319 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
320 DALI_TEST_CHECK( dummyThread );
322 dummyThread->AddTask(task);
323 dummyThread->AddTask(task2);
328 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
330 ToolkitTestApplication application;
332 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
333 DALI_TEST_CHECK( dummyInternalCanvasView );
335 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
336 DALI_TEST_CHECK( dummyCanvasRenderer );
338 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
339 DALI_TEST_CHECK( task );
341 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
342 DALI_TEST_CHECK( dummyThread );
344 dummyThread->AddTask(task);
346 dummyThread->RemoveTask(dummyInternalCanvasView);
351 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
353 ToolkitTestApplication application;
355 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
356 DALI_TEST_CHECK( dummyInternalCanvasView );
358 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
359 DALI_TEST_CHECK( dummyCanvasRenderer );
361 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
362 DALI_TEST_CHECK( task );
364 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
365 DALI_TEST_CHECK( dummyThread );
367 dummyThread->AddTask(task);
369 dummyThread->ApplyRasterized();
374 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
376 ToolkitTestApplication application;
378 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
379 DALI_TEST_CHECK( dummyInternalCanvasView );
381 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
382 DALI_TEST_CHECK( dummyCanvasRenderer );
384 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
385 DALI_TEST_CHECK( task );
387 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
388 DALI_TEST_CHECK( dummyThread );
390 dummyThread->AddTask(task);
392 Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
397 PixelData CreatePixelData( unsigned int width, unsigned int height )
399 unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
401 unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
402 PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
407 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
409 ToolkitTestApplication application;
411 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
412 DALI_TEST_CHECK( dummyInternalCanvasView );
414 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
415 DALI_TEST_CHECK( dummyCanvasRenderer );
417 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
418 DALI_TEST_CHECK( task );
420 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
421 DALI_TEST_CHECK( dummyThread );
423 dummyThread->AddTask(task);
425 dummyThread->Process(false);
430 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
432 ToolkitTestApplication application;
434 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
435 DALI_TEST_CHECK( dummyInternalCanvasView );
437 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
438 DALI_TEST_CHECK( dummyCanvasRenderer );
440 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
441 DALI_TEST_CHECK( task );
443 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
444 DALI_TEST_CHECK( dummyThread );
446 dummyThread->AddTask(task);
448 dummyThread->Process(false);
450 PixelData pixelData = CreatePixelData( 100, 100 );
452 dummyThread->RasterizationCompletedSignal().Connect(dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
453 dummyThread->RasterizationCompletedSignal().Emit(pixelData);
455 application.SendNotification();
456 application.Render();
461 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
463 ToolkitTestApplication application;
465 CanvasView canvasView = CanvasView::New(Vector2(100,100));
466 DALI_TEST_CHECK( canvasView );
468 application.GetScene().Add(canvasView);
470 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
472 application.SendNotification();
473 application.Render();
475 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
477 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
479 canvasView.AddDrawable(shape);
481 application.SendNotification();
482 application.Render();
484 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
486 application.SendNotification();
487 application.Render();
492 int UtcDaliCanvasViewViewBoxP(void)
494 ToolkitTestApplication application;
496 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
497 DALI_TEST_CHECK( canvasView );
499 application.GetScene().Add(canvasView);
501 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
502 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
504 application.SendNotification();
505 application.Render();
510 int UtcDaliCanvasViewViewBoxN(void)
512 ToolkitTestApplication application;
514 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
515 DALI_TEST_CHECK( canvasView );
517 application.GetScene().Add(canvasView);
519 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
520 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
522 application.SendNotification();
523 application.Render();
525 Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
526 DALI_TEST_EQUALS( viewBox, Vector2(-999, -999), TEST_LOCATION );