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 // Need to override adaptor classes for toolkit test harness, so include
22 // test harness headers before dali headers.
23 #include <dali-toolkit-test-suite-utils.h>
25 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit/devel-api/controls/super-blur-view/super-blur-view.h>
30 using namespace Dali::Toolkit;
32 void utc_dali_toolkit_super_blur_view_startup(void)
34 test_return_value = TET_UNDEF;
37 void utc_dali_toolkit_super_blur_view_cleanup(void)
39 test_return_value = TET_PASS;
44 const int BLUR_LEVELS = 3;
45 const int RENDER_FRAME_INTERVAL = 16;
46 static const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
47 static bool gObjectCreatedCallBackCalled;
48 static void TestCallback(BaseHandle handle)
50 gObjectCreatedCallBackCalled = true;
54 * Simulate time passed by.
56 * @note this will always process at least 1 frame (1/60 sec)
58 * @param application Test application instance
59 * @param duration Time to pass in milliseconds.
60 * @return The actual time passed in milliseconds
62 int Wait(ToolkitTestApplication& application, int duration = 0)
66 for(int i = 0; i <= (duration / RENDER_FRAME_INTERVAL); i++)
68 application.SendNotification();
69 application.Render(RENDER_FRAME_INTERVAL);
70 time += RENDER_FRAME_INTERVAL;
76 Texture CreateSolidColorTexture(ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height)
78 unsigned int size = width * height;
79 uint8_t* pixbuf = new uint8_t[size * 4];
81 for(size_t i = 0; i < size; i++)
83 pixbuf[i * 4 + 0] = 0xFF * color.r;
84 pixbuf[i * 4 + 1] = 0xFF * color.g;
85 pixbuf[i * 4 + 2] = 0xFF * color.b;
86 pixbuf[i * 4 + 3] = 0xFF * color.a;
89 PixelData pixels = PixelData::New(pixbuf, size, width, height, Pixel::RGBA8888, PixelData::ReleaseFunction::DELETE_ARRAY);
91 Texture texture = Texture::New(TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight());
92 texture.Upload(pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight());
97 class SignalHandler : public Dali::ConnectionTracker
105 void Callback(SuperBlurView handle)
108 tet_infoline("Signal called");
111 unsigned int GetCalls() const
117 unsigned int mCalls; ///< Keeps track of how many times the signal has been called.
122 int UtcDaliSuperBlurViewNew(void)
124 ToolkitTestApplication application;
126 tet_infoline(" UtcDaliSuperBlurViewNew ");
128 // Test default constructor.
129 SuperBlurView blurView;
130 DALI_TEST_CHECK(!blurView);
132 // Test object creation
133 blurView = SuperBlurView::New(BLUR_LEVELS);
134 DALI_TEST_CHECK(blurView);
136 //Additional check to ensure object is created by checking if it's registered
137 ObjectRegistry registry = application.GetCore().GetObjectRegistry();
138 DALI_TEST_CHECK(registry);
140 gObjectCreatedCallBackCalled = false;
141 registry.ObjectCreatedSignal().Connect(&TestCallback);
143 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
145 DALI_TEST_CHECK(gObjectCreatedCallBackCalled);
147 // Test copy constructor
148 SuperBlurView blurViewCopy2(blurView);
149 DALI_TEST_CHECK(blurViewCopy2);
153 actorView = blurView;
154 SuperBlurView downCastView = SuperBlurView::DownCast(actorView);
155 DALI_TEST_CHECK(downCastView);
159 int UtcDaliSuperBlurViewCreate(void)
161 ToolkitTestApplication application;
163 tet_infoline(" UtcDaliSuperBlurViewNew ");
165 // Test default constructor.
166 SuperBlurView blurView;
167 DALI_TEST_CHECK(!blurView);
169 // Test object creation
170 TypeInfo type = TypeRegistry::Get().GetTypeInfo("SuperBlurView");
173 Dali::BaseHandle handle = type.CreateInstance();
176 blurView = Dali::Toolkit::SuperBlurView::DownCast(handle);
180 DALI_TEST_CHECK(blurView);
185 int UtcDaliSuperBlurViewSetTexture(void)
187 ToolkitTestApplication application;
189 tet_infoline(" UtcDaliSuperBlurViewSetTexture ");
191 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
192 blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
194 Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 50, 50);
195 blurView.SetTexture(inputTexture);
196 // start multiple guassian blur call, each guassian blur creates two render tasks
197 DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2);
200 // create renderers for the original image and each blurred image
201 application.GetScene().Add(blurView);
203 DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION);
206 application.GetScene().Remove(blurView);
212 int UtcDaliSuperBlurViewSetTexture2(void)
214 ToolkitTestApplication application;
215 Integration::Scene stage = application.GetScene();
217 tet_infoline(" UtcDaliSuperBlurViewSetTexture2 - test setting a second texture ");
219 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
220 blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
222 tet_infoline("Call SetTexture and add blurview to stage");
223 Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 50, 50);
224 blurView.SetTexture(inputTexture);
226 // start multiple guassian blur call, each guassian blur creates two render tasks
227 DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2);
229 // create renderers for the original image and each blurred image
232 DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION);
234 tet_infoline("Wait for a second to allow blur to finish");
235 Wait(application, 1000);
237 tet_infoline("Remove from stage");
238 application.GetScene().Remove(blurView);
241 tet_infoline("Test that there are no render tasks remaining");
242 DALI_TEST_EQUALS(blurView.GetRendererCount(), 0, TEST_LOCATION);
244 tet_infoline("Call SetTexture a second time and add blurview back to stage");
245 Texture inputTexture2 = CreateSolidColorTexture(application, Color::CYAN, 50, 50);
246 blurView.SetTexture(inputTexture2);
247 // start multiple guassian blur call, each guassian blur creates two render tasks
248 DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2);
251 // create renderers for the original image and each blurred image
252 application.GetScene().Add(blurView);
254 DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION);
256 tet_infoline("Wait for a second to allow blur to finish");
257 Wait(application, 1000);
259 tet_infoline("Remove from stage");
260 application.GetScene().Remove(blurView);
263 tet_infoline("Test that there are no render tasks remaining");
264 DALI_TEST_EQUALS(blurView.GetRendererCount(), 0, TEST_LOCATION);
269 int UtcDaliSuperBlurViewSetProperty(void)
271 ToolkitTestApplication application;
273 tet_infoline(" UtcDaliSuperBlurViewSetProperty ");
275 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
276 // create renderers for the original image and each blurred image
277 application.GetScene().Add(blurView);
278 blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
280 // Will create ResourceImage
281 blurView.SetProperty(SuperBlurView::Property::IMAGE_URL, TEST_IMAGE_FILE_NAME);
284 // start multiple guassian blur call, each guassian blur creates two render tasks
286 unsigned int count = application.GetScene().GetRenderTaskList().GetTaskCount();
287 DALI_TEST_CHECK(count == 1 + BLUR_LEVELS * 2);
294 int UtcDaliSuperBlurViewGetProperty(void)
296 ToolkitTestApplication application;
298 tet_infoline(" UtcDaliSuperBlurViewSetProperty ");
300 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
301 blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
303 blurView.SetProperty(SuperBlurView::Property::IMAGE_URL, TEST_IMAGE_FILE_NAME);
306 // create renderers for the original image and each blurred image
307 application.GetScene().Add(blurView);
309 std::string imageUrl = blurView.GetProperty<std::string>(SuperBlurView::Property::IMAGE_URL);
310 DALI_TEST_EQUALS(imageUrl, TEST_IMAGE_FILE_NAME, TEST_LOCATION);
315 int UtcDaliSuperBlurViewSetGetBlurStrength(void)
317 ToolkitTestApplication application;
319 tet_infoline(" UtcDaliSuperBlurViewSetGetBlurStrength ");
321 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
322 DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.f, TEST_LOCATION);
324 blurView.SetBlurStrength(0.65f);
326 DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.65f, TEST_LOCATION);
330 int UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex(void)
332 ToolkitTestApplication application;
334 tet_infoline(" UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex ");
336 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
337 Property::Index blurPropertyIdx = blurView.GetBlurStrengthPropertyIndex();
340 (blurView.GetProperty(blurPropertyIdx)).Get(blurStrength);
341 DALI_TEST_EQUALS(blurStrength, 0.f, TEST_LOCATION);
343 blurView.SetBlurStrength(0.65f);
345 (blurView.GetProperty(blurPropertyIdx)).Get(blurStrength);
346 DALI_TEST_EQUALS(blurStrength, 0.65f, TEST_LOCATION);
350 int UtcDaliSuperBlurViewGetBlurredTexture(void)
352 ToolkitTestApplication application;
354 tet_infoline("UtcDaliSuperBlurViewGetBlurredTexture");
356 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
357 blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
358 Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 100, 100);
359 blurView.SetTexture(inputTexture);
361 Wait(application, 200); // Make sure all the gaussian blur finished
363 Texture texture1 = blurView.GetBlurredTexture(1);
364 DALI_TEST_CHECK(texture1);
366 Texture texture2 = blurView.GetBlurredTexture(2);
367 DALI_TEST_EQUALS(texture2.GetWidth(), 25u, TEST_LOCATION);
368 DALI_TEST_EQUALS(texture2.GetHeight(), 25u, TEST_LOCATION);
370 Texture texture3 = blurView.GetBlurredTexture(3);
371 DALI_TEST_CHECK(texture3);
376 int UtcDaliSuperBlurViewBlurSignal(void)
378 ToolkitTestApplication application;
380 tet_infoline(" UtcDaliSuperBlurViewSignal ");
382 SuperBlurView blurView = SuperBlurView::New(BLUR_LEVELS);
383 blurView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
385 Texture inputTexture = CreateSolidColorTexture(application, Color::GREEN, 50, 50);
386 blurView.SetTexture(inputTexture);
387 // start multiple guassian blur call, each guassian blur creates two render tasks
388 DALI_TEST_CHECK(application.GetScene().GetRenderTaskList().GetTaskCount() == 1 + BLUR_LEVELS * 2);
390 SignalHandler signalHandler;
391 blurView.BlurFinishedSignal().Connect(&signalHandler, &SignalHandler::Callback);
393 // create renderers for the original image and each blurred image
394 application.GetScene().Add(blurView);
395 Wait(application, 1000);
397 DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS + 1, TEST_LOCATION);
398 //DALI_TEST_EQUALS(signalHandler.GetCalls(), 1, TEST_LOCATION);