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 UtcDaliCanvasViewDownCastP(void)
107 ToolkitTestApplication application;
108 CanvasView canvasView = CanvasView::New(Vector2(100,100));
110 BaseHandle object(canvasView);
112 CanvasView canvasView2 = CanvasView::DownCast( object );
113 DALI_TEST_CHECK(canvasView2);
115 CanvasView canvasView3 = DownCast< CanvasView >(object);
116 DALI_TEST_CHECK(canvasView3);
120 int UtcDaliCanvasViewDownCastN(void)
122 ToolkitTestApplication application;
123 BaseHandle unInitializedObject;
125 CanvasView canvasView1 = CanvasView::DownCast( unInitializedObject );
126 DALI_TEST_CHECK( !canvasView1 );
128 CanvasView canvasView2 = DownCast< CanvasView >( unInitializedObject );
129 DALI_TEST_CHECK( !canvasView2 );
133 int UtcDaliCanvasViewAddP(void)
135 ToolkitTestApplication application;
136 CanvasView canvasView = CanvasView::New(Vector2(100,100));
137 DALI_TEST_CHECK( canvasView );
139 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
141 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
143 canvasView.AddDrawable(shape);
148 int UtcDaliCanvasViewAddN(void)
150 ToolkitTestApplication application;
151 CanvasView canvasView = CanvasView::New(Vector2(100,100));
152 DALI_TEST_CHECK( canvasView );
154 Dali::CanvasRenderer::Shape shape;
156 canvasView.AddDrawable(shape);
161 int UtcDaliCanvasViewChangeSizeP(void)
163 ToolkitTestApplication application;
165 CanvasView canvasView = CanvasView::New(Vector2(100,100));
166 DALI_TEST_CHECK( canvasView );
168 application.GetScene().Add(canvasView);
170 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
172 application.SendNotification();
173 application.Render();
175 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
178 DALI_TEST_EQUALS( v3, Vector3(300, 300, 0), TEST_LOCATION );
183 int UtcDaliCanvasViewSizeN(void)
185 ToolkitTestApplication application;
187 CanvasView canvasView = CanvasView::New(Vector2(100,100));
188 DALI_TEST_CHECK( canvasView );
190 application.GetScene().Add(canvasView);
192 canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
194 application.SendNotification();
195 application.Render();
197 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
200 DALI_TEST_EQUALS( v3, Vector3(-999, -999, 0), TEST_LOCATION );
205 int UtcDaliCanvasViewRasterizeTaskP(void)
207 ToolkitTestApplication application;
209 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
210 DALI_TEST_CHECK( dummyInternalCanvasView );
212 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
213 DALI_TEST_CHECK( dummyCanvasRenderer );
215 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
216 DALI_TEST_CHECK( task );
221 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
223 ToolkitTestApplication application;
225 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
226 DALI_TEST_CHECK( dummyInternalCanvasView );
228 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
229 DALI_TEST_CHECK( dummyCanvasRenderer );
231 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
232 DALI_TEST_CHECK( task );
234 DALI_TEST_EQUALS( task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION );
239 int UtcDaliCanvasViewRasterizeTaskGetBufferSizeP(void)
241 ToolkitTestApplication application;
243 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
244 DALI_TEST_CHECK( dummyInternalCanvasView );
246 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
247 DALI_TEST_CHECK( dummyCanvasRenderer );
249 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
250 DALI_TEST_CHECK( task );
252 //There is no rasterized buffer.
253 DALI_TEST_EQUALS( task->GetBufferSize(), Vector2(0, 0), TEST_LOCATION );
258 int UtcDaliCanvasViewRasterizeTaskGetPixelDataP(void)
261 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
262 DALI_TEST_CHECK( dummyInternalCanvasView );
264 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
265 DALI_TEST_CHECK( dummyCanvasRenderer );
267 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
268 DALI_TEST_CHECK( task );
270 DALI_TEST_EQUALS( task->GetPixelData(), PixelData(), TEST_LOCATION );
275 int UtcDaliCanvasViewRasterizeThreadP(void)
277 ToolkitTestApplication application;
279 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
280 DALI_TEST_CHECK( dummyInternalCanvasView );
282 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
283 DALI_TEST_CHECK( dummyCanvasRenderer );
285 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
286 DALI_TEST_CHECK( task );
288 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
289 DALI_TEST_CHECK( dummyThread );
294 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
296 ToolkitTestApplication application;
298 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
299 DALI_TEST_CHECK( dummyInternalCanvasView );
301 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
302 DALI_TEST_CHECK( dummyCanvasRenderer );
304 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
305 DALI_TEST_CHECK( task );
307 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
308 DALI_TEST_CHECK( task2 );
310 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
311 DALI_TEST_CHECK( dummyThread );
313 dummyThread->AddTask(task);
314 dummyThread->AddTask(task2);
319 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(void)
321 ToolkitTestApplication application;
323 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
324 DALI_TEST_CHECK( dummyInternalCanvasView );
326 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
327 DALI_TEST_CHECK( dummyCanvasRenderer );
329 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
330 DALI_TEST_CHECK( task );
332 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
333 DALI_TEST_CHECK( dummyThread );
335 dummyThread->AddTask(task);
337 dummyThread->RemoveTask(dummyInternalCanvasView);
342 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(void)
344 ToolkitTestApplication application;
346 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
347 DALI_TEST_CHECK( dummyInternalCanvasView );
349 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
350 DALI_TEST_CHECK( dummyCanvasRenderer );
352 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
353 DALI_TEST_CHECK( task );
355 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
356 DALI_TEST_CHECK( dummyThread );
358 dummyThread->AddTask(task);
360 dummyThread->ApplyRasterized();
365 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
367 ToolkitTestApplication application;
369 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
370 DALI_TEST_CHECK( dummyInternalCanvasView );
372 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
373 DALI_TEST_CHECK( dummyCanvasRenderer );
375 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
376 DALI_TEST_CHECK( task );
378 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
379 DALI_TEST_CHECK( dummyThread );
381 dummyThread->AddTask(task);
383 Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
388 PixelData CreatePixelData( unsigned int width, unsigned int height )
390 unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 );
392 unsigned char* buffer= reinterpret_cast<unsigned char*>( malloc( bufferSize ) );
393 PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE );
398 int UtcDaliCanvasViewRasterizeThreadCallProcessP(void)
400 ToolkitTestApplication application;
402 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
403 DALI_TEST_CHECK( dummyInternalCanvasView );
405 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
406 DALI_TEST_CHECK( dummyCanvasRenderer );
408 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
409 DALI_TEST_CHECK( task );
411 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
412 DALI_TEST_CHECK( dummyThread );
414 dummyThread->AddTask(task);
416 dummyThread->Process(false);
421 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
423 ToolkitTestApplication application;
425 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100,100));
426 DALI_TEST_CHECK( dummyInternalCanvasView );
428 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
429 DALI_TEST_CHECK( dummyCanvasRenderer );
431 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
432 DALI_TEST_CHECK( task );
434 Dali::Toolkit::Internal::CanvasViewRasterizeThread *dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
435 DALI_TEST_CHECK( dummyThread );
437 dummyThread->AddTask(task);
439 dummyThread->Process(false);
441 PixelData pixelData = CreatePixelData( 100, 100 );
443 dummyThread->RasterizationCompletedSignal().Connect(dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
444 dummyThread->RasterizationCompletedSignal().Emit(pixelData);
446 application.SendNotification();
447 application.Render();
452 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
454 ToolkitTestApplication application;
456 CanvasView canvasView = CanvasView::New(Vector2(100,100));
457 DALI_TEST_CHECK( canvasView );
459 application.GetScene().Add(canvasView);
461 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
463 application.SendNotification();
464 application.Render();
466 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
468 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
470 canvasView.AddDrawable(shape);
472 application.SendNotification();
473 application.Render();
475 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
477 application.SendNotification();
478 application.Render();