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/internal/controls/canvas-view/canvas-view-impl.h>
30 #include <dali-toolkit/internal/controls/canvas-view/canvas-view-rasterize-task.h>
31 #include <dali/devel-api/adaptor-framework/canvas-renderer/canvas-renderer-shape.h>
32 #include <dali/devel-api/adaptor-framework/canvas-renderer/canvas-renderer.h>
33 #include <dali/public-api/images/pixel-data.h>
34 #include <dali/public-api/adaptor-framework/async-task-manager.h>
37 using namespace Toolkit;
43 void utc_dali_toolkit_canvasview_startup(void)
45 test_return_value = TET_UNDEF;
48 void utc_dali_toolkit_canvasview_cleanup(void)
50 test_return_value = TET_PASS;
53 int UtcDaliCanvasViewConstructorP(void)
55 ToolkitTestApplication application;
56 CanvasView canvasView;
58 DALI_TEST_CHECK(!canvasView);
62 int UtcDaliCanvasViewMoveAssignment(void)
64 ToolkitTestApplication application;
65 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
67 CanvasView moved = std::move(canvasView);
68 DALI_TEST_CHECK(moved);
69 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
70 DALI_TEST_CHECK(!canvasView);
75 int UtcDaliCanvasViewAssignmentConstructorP(void)
77 ToolkitTestApplication application;
78 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
80 CanvasView copy(canvasView);
81 DALI_TEST_CHECK(copy);
83 DALI_TEST_CHECK(canvasView == copy);
87 int UtcDaliCanvasViewAssignmentOperatorP(void)
89 ToolkitTestApplication application;
90 const CanvasView canvasView = CanvasView::New(Vector2(100, 100));
93 DALI_TEST_CHECK(!assign);
96 DALI_TEST_CHECK(assign == canvasView);
100 int UtcDaliCanvasViewNewP(void)
102 ToolkitTestApplication application;
103 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
105 DALI_TEST_CHECK(canvasView);
109 int UtcDaliCanvasViewNewWithoutViewboxP(void)
111 ToolkitTestApplication application;
112 CanvasView canvasView = CanvasView::New();
114 DALI_TEST_CHECK(canvasView);
118 int UtcDaliCanvasViewDownCastP(void)
120 ToolkitTestApplication application;
121 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
123 BaseHandle object(canvasView);
125 CanvasView canvasView2 = CanvasView::DownCast(object);
126 DALI_TEST_CHECK(canvasView2);
128 CanvasView canvasView3 = DownCast<CanvasView>(object);
129 DALI_TEST_CHECK(canvasView3);
133 int UtcDaliCanvasViewDownCastN(void)
135 ToolkitTestApplication application;
136 BaseHandle unInitializedObject;
138 CanvasView canvasView1 = CanvasView::DownCast(unInitializedObject);
139 DALI_TEST_CHECK(!canvasView1);
141 CanvasView canvasView2 = DownCast<CanvasView>(unInitializedObject);
142 DALI_TEST_CHECK(!canvasView2);
146 int UtcDaliCanvasViewAddP(void)
148 ToolkitTestApplication application;
149 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
150 DALI_TEST_CHECK(canvasView);
152 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
154 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
156 canvasView.AddDrawable(shape);
161 int UtcDaliCanvasViewAddN(void)
163 ToolkitTestApplication application;
164 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
165 DALI_TEST_CHECK(canvasView);
167 Dali::CanvasRenderer::Shape shape;
169 canvasView.AddDrawable(shape);
174 int UtcDaliCanvasViewRemoveP(void)
176 ToolkitTestApplication application;
177 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
178 DALI_TEST_CHECK(canvasView);
180 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
182 canvasView.AddDrawable(shape);
184 DALI_TEST_CHECK(canvasView.RemoveDrawable(shape));
189 int UtcDaliCanvasViewRemoveN(void)
191 ToolkitTestApplication application;
193 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
194 DALI_TEST_CHECK(canvasView);
196 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
198 DALI_TEST_CHECK(!canvasView.RemoveDrawable(shape));
203 int UtcDaliCanvasViewRemoveAllP(void)
205 ToolkitTestApplication application;
206 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
207 DALI_TEST_CHECK(canvasView);
209 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
211 canvasView.AddDrawable(shape);
213 canvasView.RemoveAllDrawables();
218 int UtcDaliCanvasViewRemoveAllN(void)
220 ToolkitTestApplication application;
222 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
223 DALI_TEST_CHECK(canvasView);
225 canvasView.RemoveAllDrawables();
230 int UtcDaliCanvasViewChangeSizeP(void)
232 ToolkitTestApplication application;
234 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
235 DALI_TEST_CHECK(canvasView);
237 application.GetScene().Add(canvasView);
239 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
241 application.SendNotification();
242 application.Render();
244 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
247 DALI_TEST_EQUALS(v3, Vector3(300, 300, 0), TEST_LOCATION);
252 int UtcDaliCanvasViewSizeN(void)
254 ToolkitTestApplication application;
256 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
257 DALI_TEST_CHECK(canvasView);
259 application.GetScene().Add(canvasView);
261 canvasView.SetProperty(Actor::Property::SIZE, Vector2(-999, -999));
263 application.SendNotification();
264 application.Render();
266 Property::Value pv = canvasView.GetProperty(Actor::Property::SIZE);
269 DALI_TEST_EQUALS(v3, Vector3(-999, -999, 0), TEST_LOCATION);
274 bool gRasterizationCompletedSignal = false;
275 void rasteriztionCompleted(IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task)
277 gRasterizationCompletedSignal = true;
280 int UtcDaliCanvasViewRasterizeTaskP(void)
282 ToolkitTestApplication application;
284 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
285 DALI_TEST_CHECK(dummyInternalCanvasView);
287 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
288 DALI_TEST_CHECK(dummyCanvasRenderer);
290 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
291 DALI_TEST_CHECK(task);
296 int UtcDaliCanvasViewRasterizeTaskAddTaskP(void)
298 ToolkitTestApplication application;
300 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
301 DALI_TEST_CHECK(dummyInternalCanvasView);
303 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
304 DALI_TEST_CHECK(dummyCanvasRenderer);
306 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
307 DALI_TEST_CHECK(task);
309 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task2 = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
310 DALI_TEST_CHECK(task2);
312 Dali::AsyncTaskManager asyncTaskManager = Dali::AsyncTaskManager::Get();
313 DALI_TEST_CHECK(asyncTaskManager);
315 asyncTaskManager.AddTask(task);
316 asyncTaskManager.AddTask(task2);
321 int UtcDaliCanvasViewRasterizeTaskAddRemoveTaskP(void)
323 ToolkitTestApplication application;
325 Dali::Toolkit::Internal::CanvasView* dummyInternalCanvasView = new Dali::Toolkit::Internal::CanvasView(Vector2(100, 100));
326 DALI_TEST_CHECK(dummyInternalCanvasView);
328 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
329 DALI_TEST_CHECK(dummyCanvasRenderer);
331 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
332 DALI_TEST_CHECK(task);
334 Dali::AsyncTaskManager asyncTaskManager = Dali::AsyncTaskManager::Get();
335 DALI_TEST_CHECK(asyncTaskManager);
337 asyncTaskManager.AddTask(task);
339 asyncTaskManager.RemoveTask(task);
344 PixelData CreatePixelData(unsigned int width, unsigned int height)
346 unsigned int bufferSize = width * height * Pixel::GetBytesPerPixel(Pixel::RGBA8888);
348 unsigned char* buffer = reinterpret_cast<unsigned char*>(malloc(bufferSize));
349 PixelData pixelData = PixelData::New(buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE);
354 int UtcDaliCanvasViewRasterizeThreadRasterizationCompletedSignalP(void)
356 ToolkitTestApplication application;
358 gRasterizationCompletedSignal = false;
360 Dali::Toolkit::CanvasView canvasView = Dali::Toolkit::CanvasView::New(Vector2(100, 100));
362 Dali::CanvasRenderer dummyCanvasRenderer = Dali::CanvasRenderer::New(Vector2(100, 100));
363 DALI_TEST_CHECK(dummyCanvasRenderer);
365 IntrusivePtr<Dali::Toolkit::Internal::CanvasRendererRasterizingTask> task = new Dali::Toolkit::Internal::CanvasRendererRasterizingTask(dummyCanvasRenderer, MakeCallback(rasteriztionCompleted));
366 DALI_TEST_CHECK(task);
368 Dali::AsyncTaskManager asyncTaskManager = Dali::AsyncTaskManager::Get();
369 DALI_TEST_CHECK(asyncTaskManager);
371 asyncTaskManager.AddTask(task);
373 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
374 application.SendNotification();
375 application.Render();
377 DALI_TEST_EQUALS(gRasterizationCompletedSignal, true, TEST_LOCATION);
382 int UtcDaliCanvasViewSetSizeAndAddDrawable(void)
384 ToolkitTestApplication application;
386 CanvasView canvasView = CanvasView::New(Vector2(100, 100));
387 DALI_TEST_CHECK(canvasView);
389 application.GetScene().Add(canvasView);
391 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
393 application.SendNotification();
394 application.Render();
396 Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
398 shape.AddRect(Rect<float>(10, 10, 10, 10), Vector2(0, 0));
400 canvasView.AddDrawable(shape);
402 application.SendNotification();
403 application.Render();
405 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
407 application.SendNotification();
408 application.Render();
413 int UtcDaliCanvasViewViewBoxP(void)
415 ToolkitTestApplication application;
417 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
418 DALI_TEST_CHECK(canvasView);
420 application.GetScene().Add(canvasView);
422 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
423 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(100, 100));
425 application.SendNotification();
426 application.Render();
431 int UtcDaliCanvasViewViewBoxN(void)
433 ToolkitTestApplication application;
435 CanvasView canvasView = CanvasView::New(Vector2(300, 300));
436 DALI_TEST_CHECK(canvasView);
438 application.GetScene().Add(canvasView);
440 canvasView.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
441 canvasView.SetProperty(Toolkit::CanvasView::Property::VIEW_BOX, Vector2(-999, -999));
443 application.SendNotification();
444 application.Render();
446 Vector2 viewBox = canvasView.GetProperty(Toolkit::CanvasView::Property::VIEW_BOX).Get<Vector2>();
447 DALI_TEST_EQUALS(viewBox, Vector2(-999, -999), TEST_LOCATION);