2 * Copyright (c) 2022 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.
21 #include <toolkit-event-thread-callback.h>
22 #include <toolkit-timer.h>
24 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali-toolkit/dali-toolkit.h>
28 #include <dali-toolkit/dali-toolkit.h>
29 #include <dali-toolkit/devel-api/controls/canvas-view/canvas-view.h>
30 #include <dali-toolkit/internal/controls/canvas-view/canvas-view-rasterize-thread.h>
31 #include <dali/devel-api/adaptor-framework/canvas-renderer-shape.h>
32 #include <dali/devel-api/adaptor-framework/canvas-renderer.h>
33 #include <dali/public-api/images/pixel-data.h>
36 using namespace Toolkit;
42 void utc_dali_toolkit_canvasview_startup(void)
44 test_return_value = TET_UNDEF;
47 void utc_dali_toolkit_canvasview_cleanup(void)
49 test_return_value = TET_PASS;
52 int UtcDaliCanvasViewConstructorP(void)
54 ToolkitTestApplication application;
55 CanvasView canvasView;
57 DALI_TEST_CHECK(!canvasView);
61 int UtcDaliCanvasViewMoveAssignment(void)
63 ToolkitTestApplication application;
64 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
66 CanvasView moved = std::move(canvasView);
67 DALI_TEST_CHECK(moved);
68 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
69 DALI_TEST_CHECK(!canvasView);
74 int UtcDaliCanvasViewAssignmentConstructorP(void)
76 ToolkitTestApplication application;
77 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
79 CanvasView copy(canvasView);
80 DALI_TEST_CHECK(copy);
82 DALI_TEST_CHECK(canvasView == copy);
86 int UtcDaliCanvasViewAssignmentOperatorP(void)
88 ToolkitTestApplication application;
89 const CanvasView canvasView = CanvasView::New(Vector2(100, 100));
92 DALI_TEST_CHECK(!assign);
95 DALI_TEST_CHECK(assign == canvasView);
99 int UtcDaliCanvasViewNewP(void)
101 ToolkitTestApplication application;
102 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
104 DALI_TEST_CHECK(canvasView);
108 int UtcDaliCanvasViewNewWithoutViewboxP(void)
110 ToolkitTestApplication application;
111 CanvasView canvasView = CanvasView::New();
113 DALI_TEST_CHECK(canvasView);
117 int UtcDaliCanvasViewDownCastP(void)
119 ToolkitTestApplication application;
120 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
122 BaseHandle object(canvasView);
124 CanvasView canvasView2 = CanvasView::DownCast(object);
125 DALI_TEST_CHECK(canvasView2);
127 CanvasView canvasView3 = DownCast<CanvasView>(object);
128 DALI_TEST_CHECK(canvasView3);
132 int UtcDaliCanvasViewDownCastN(void)
134 ToolkitTestApplication application;
135 BaseHandle unInitializedObject;
137 CanvasView canvasView1 = CanvasView::DownCast(unInitializedObject);
138 DALI_TEST_CHECK(!canvasView1);
140 CanvasView canvasView2 = DownCast<CanvasView>(unInitializedObject);
141 DALI_TEST_CHECK(!canvasView2);
145 int UtcDaliCanvasViewAddP(void)
147 ToolkitTestApplication application;
148 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
149 DALI_TEST_CHECK(canvasView);
151 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
153 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
155 canvasView.AddDrawable(shape);
160 int UtcDaliCanvasViewAddN(void)
162 ToolkitTestApplication application;
163 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
164 DALI_TEST_CHECK(canvasView);
166 Dali::CanvasRenderer::Shape shape;
168 canvasView.AddDrawable(shape);
173 int UtcDaliCanvasViewRemoveP(void)
175 ToolkitTestApplication application;
176 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
177 DALI_TEST_CHECK(canvasView);
179 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
181 canvasView.AddDrawable(shape);
183 DALI_TEST_CHECK(canvasView.RemoveDrawable(shape));
188 int UtcDaliCanvasViewRemoveN(void)
190 ToolkitTestApplication application;
192 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
193 DALI_TEST_CHECK(canvasView);
195 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
197 DALI_TEST_CHECK(!canvasView.RemoveDrawable(shape));
202 int UtcDaliCanvasViewRemoveAllP(void)
204 ToolkitTestApplication application;
205 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
206 DALI_TEST_CHECK(canvasView);
208 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
210 canvasView.AddDrawable(shape);
212 canvasView.RemoveAllDrawables();
217 int UtcDaliCanvasViewRemoveAllN(void)
219 ToolkitTestApplication application;
221 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
222 DALI_TEST_CHECK(canvasView);
224 canvasView.RemoveAllDrawables();
229 int UtcDaliCanvasViewChangeSizeP(void)
231 ToolkitTestApplication application;
233 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
234 DALI_TEST_CHECK(canvasView);
236 application.GetScene().Add(canvasView);
238 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
240 application.SendNotification();
241 application.Render();
243 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
246 DALI_TEST_EQUALS(v3, Vector3(300, 300, 0), TEST_LOCATION);
251 int UtcDaliCanvasViewSizeN(void)
253 ToolkitTestApplication application;
255 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
256 DALI_TEST_CHECK(canvasView);
258 application.GetScene().Add(canvasView);
260 canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
262 application.SendNotification();
263 application.Render();
265 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
268 DALI_TEST_EQUALS(v3, Vector3(-999, -999, 0), TEST_LOCATION);
273 int UtcDaliCanvasViewRasterizeTaskP(void)
275 ToolkitTestApplication application;
277 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
278 DALI_TEST_CHECK(dummyInternalCanvasView);
280 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
281 DALI_TEST_CHECK(dummyCanvasRenderer);
283 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
284 DALI_TEST_CHECK(task);
289 int UtcDaliCanvasViewRasterizeTaskGetCanvasViewP(void)
291 ToolkitTestApplication application;
293 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
294 DALI_TEST_CHECK(dummyInternalCanvasView);
296 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
297 DALI_TEST_CHECK(dummyCanvasRenderer);
299 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
300 DALI_TEST_CHECK(task);
302 DALI_TEST_EQUALS(task->GetCanvasView(), dummyInternalCanvasView, TEST_LOCATION);
307 int UtcDaliCanvasViewRasterizeThreadP(void)
309 ToolkitTestApplication application;
311 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
312 DALI_TEST_CHECK(dummyInternalCanvasView);
314 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
315 DALI_TEST_CHECK(dummyCanvasRenderer);
317 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
318 DALI_TEST_CHECK(task);
320 Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
321 DALI_TEST_CHECK(dummyThread);
326 int UtcDaliCanvasViewRasterizeThreadAddTaskP(void)
328 ToolkitTestApplication application;
330 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
331 DALI_TEST_CHECK(dummyInternalCanvasView);
333 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
334 DALI_TEST_CHECK(dummyCanvasRenderer);
336 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
337 DALI_TEST_CHECK(task);
339 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
340 DALI_TEST_CHECK(task2);
342 Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
343 DALI_TEST_CHECK(dummyThread);
345 dummyThread->AddTask(task);
346 dummyThread->AddTask(task2);
351 int UtcDaliCanvasViewRasterizeThreadAddRemoveTaskP(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->RemoveTask(dummyInternalCanvasView);
374 int UtcDaliCanvasViewRasterizeThreadApplyRasterizedP(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 dummyThread->ApplyRasterized();
397 int UtcDaliCanvasViewRasterizeThreadTerminateThreadP(void)
399 ToolkitTestApplication application;
401 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
402 DALI_TEST_CHECK(dummyInternalCanvasView);
404 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
405 DALI_TEST_CHECK(dummyCanvasRenderer);
407 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyInternalCanvasView, dummyCanvasRenderer);
408 DALI_TEST_CHECK(task);
410 Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
411 DALI_TEST_CHECK(dummyThread);
413 dummyThread->AddTask(task);
415 Dali::Toolkit::Internal::CanvasViewRasterizeThread::TerminateThread(dummyThread);
420 PixelData CreatePixelData(unsigned int width, unsigned int height)
422 unsigned int bufferSize = width * height * Pixel::GetBytesPerPixel(Pixel::RGBA8888);
424 unsigned char* buffer = reinterpret_cast<unsigned char*>(malloc(bufferSize));
425 PixelData pixelData = PixelData::New(buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE);
430 int UtcDaliCanvasViewRasterizeThreadCallProcessP(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);
453 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
455 ToolkitTestApplication application;
457 Dali::Toolkit::CanvasView canvasView = Dali::Toolkit::CanvasView::New(Vector2(100, 100));
458 Dali::Toolkit::Internal::CanvasView& dummyInternalCanvasView = GetImpl(canvasView);
460 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
461 DALI_TEST_CHECK(dummyCanvasRenderer);
463 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(&dummyInternalCanvasView, dummyCanvasRenderer);
464 DALI_TEST_CHECK(task);
466 Dali::Toolkit::Internal::CanvasViewRasterizeThread* dummyThread = new Dali::Toolkit::Internal::CanvasViewRasterizeThread();
467 DALI_TEST_CHECK(dummyThread);
469 dummyThread->AddTask(task);
471 dummyThread->Process(false);
473 auto texture = Texture::New(Dali::TextureType::TEXTURE_2D, Pixel::RGBA8888, 100, 100);
475 dummyThread->RasterizationCompletedSignal().Connect(&dummyInternalCanvasView, &Dali::Toolkit::Internal::CanvasView::ApplyRasterizedImage);
476 dummyThread->RasterizationCompletedSignal().Emit(texture);
478 application.SendNotification();
479 application.Render();
484 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
486 ToolkitTestApplication application;
488 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
489 DALI_TEST_CHECK(canvasView);
491 application.GetScene().Add(canvasView);
493 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
495 application.SendNotification();
496 application.Render();
498 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
500 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
502 canvasView.AddDrawable(shape);
504 application.SendNotification();
505 application.Render();
507 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
509 application.SendNotification();
510 application.Render();
515 int UtcDaliCanvasViewViewBoxP(void)
517 ToolkitTestApplication application;
519 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
520 DALI_TEST_CHECK(canvasView);
522 application.GetScene().Add(canvasView);
524 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
525 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
527 application.SendNotification();
528 application.Render();
533 int UtcDaliCanvasViewViewBoxN(void)
535 ToolkitTestApplication application;
537 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
538 DALI_TEST_CHECK(canvasView);
540 application.GetScene().Add(canvasView);
542 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
543 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
545 application.SendNotification();
546 application.Render();
548 Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
549 DALI_TEST_EQUALS(viewBox, Vector2(-999, -999), TEST_LOCATION);