Re-instating test cases from old graphics backend
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-GaussianBlurView.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 #include <stdlib.h>
19 #include <iostream>
20
21 #include <dali-toolkit-test-suite-utils.h>
22
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <dali-toolkit/devel-api/controls/gaussian-blur-view/gaussian-blur-view.h>
25
26 using namespace Dali;
27 using namespace Dali::Toolkit;
28
29 namespace
30 {
31 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
32 } // namespace
33
34 void utc_gaussian_blur_view_startup(void)
35 {
36   test_return_value = TET_UNDEF;
37 }
38
39 void utc_gaussian_blur_view_cleanup(void)
40 {
41   test_return_value = TET_PASS;
42 }
43
44 class TestCallback : public ConnectionTracker
45 {
46 public:
47   TestCallback(Dali::Toolkit::GaussianBlurView& blurView)
48   : mBlurView(blurView)
49   {
50     mFinished = false;
51   }
52
53   void Connect()
54   {
55     mBlurView.FinishedSignal().Connect(this, &TestCallback::OnFinished);
56   }
57
58   void OnFinished(Dali::Toolkit::GaussianBlurView source)
59   {
60     mFinished = true;
61   }
62
63   bool                             mFinished;
64   Dali::Toolkit::GaussianBlurView& mBlurView;
65 };
66
67 // Negative test case for a method
68 int UtcDaliGaussianBlurViewUninitialized(void)
69 {
70   ToolkitTestApplication application;
71   tet_infoline("UtcDaliGaussianBlurViewUninitialized");
72
73   Toolkit::GaussianBlurView view;
74
75   try
76   {
77     // New() must be called to create a GaussianBlurView or it wont be valid.
78     Actor a = Actor::New();
79     view.Add(a);
80     DALI_TEST_CHECK(false);
81   }
82   catch(Dali::DaliException& e)
83   {
84     // Tests that a negative test of an assertion succeeds
85     DALI_TEST_PRINT_ASSERT(e);
86     DALI_TEST_CHECK(!view);
87   }
88   END_TEST;
89 }
90
91 // Positive test case for a method
92 int UtcDaliGaussianBlurViewNew(void)
93 {
94   ToolkitTestApplication application;
95   tet_infoline("UtcDaliGaussianBlurViewNew");
96
97   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
98   DALI_TEST_CHECK(view);
99
100   Toolkit::GaussianBlurView view2 = Toolkit::GaussianBlurView::New(5, 1.5f, Pixel::RGB888, 0.5f, 0.5f, false);
101   DALI_TEST_CHECK(view2);
102   END_TEST;
103 }
104
105 // Positive test case for a method
106 int UtcDaliGaussianBlurViewDownCast(void)
107 {
108   ToolkitTestApplication application;
109   tet_infoline("UtcDaliGaussianBlurViewDownCast");
110
111   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
112   BaseHandle                handle(view);
113
114   Toolkit::GaussianBlurView gaussianBlurView = Toolkit::GaussianBlurView::DownCast(handle);
115   DALI_TEST_CHECK(view);
116   DALI_TEST_CHECK(gaussianBlurView);
117   DALI_TEST_CHECK(gaussianBlurView == view);
118   END_TEST;
119 }
120
121 // Positive test case for a method
122 int UtcDaliGaussianBlurViewPropertyNames(void)
123 {
124   ToolkitTestApplication application;
125   tet_infoline("UtcDaliGaussianBlurViewPropertyNames");
126
127   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
128   DALI_TEST_CHECK(view);
129
130   // Check the names, this names are used in the shader code,
131   // if they change in the shader code, then it has to be updated here.
132   DALI_TEST_EQUALS(view.GetBlurStrengthPropertyIndex(), view.GetPropertyIndex("GaussianBlurStrengthPropertyName"), TEST_LOCATION);
133   END_TEST;
134 }
135
136 // Positive test case for a method
137 int UtcDaliGaussianBlurViewAddRemove(void)
138 {
139   ToolkitTestApplication application;
140   tet_infoline("UtcDaliGaussianBlurViewAddRemove");
141
142   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
143   DALI_TEST_CHECK(view);
144
145   Actor actor = Actor::New();
146   DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
147
148   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
149   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
150   view.Add(actor);
151   application.GetScene().Add(view);
152
153   DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
154
155   view.Remove(actor);
156
157   DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
158   END_TEST;
159 }
160
161 // Positive test case for a method
162 int UtcDaliGaussianBlurActivateDeactivate(void)
163 {
164   ToolkitTestApplication application;
165   tet_infoline("UtcDaliGaussianBlurActivateDeactivate");
166
167   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
168   DALI_TEST_CHECK(view);
169
170   RenderTaskList taskList = application.GetScene().GetRenderTaskList();
171   DALI_TEST_CHECK(1u == taskList.GetTaskCount());
172
173   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
174   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
175   view.Add(Actor::New());
176   application.GetScene().Add(view);
177   view.Activate();
178
179   RenderTaskList taskList2 = application.GetScene().GetRenderTaskList();
180   DALI_TEST_CHECK(1u != taskList2.GetTaskCount());
181   DALI_TEST_CHECK(2u == view.GetChildCount());
182
183   view.Deactivate();
184
185   RenderTaskList taskList3 = application.GetScene().GetRenderTaskList();
186   DALI_TEST_CHECK(1u == taskList3.GetTaskCount());
187   DALI_TEST_CHECK(1u == view.GetChildCount());
188
189   END_TEST;
190 }
191
192 // Positive test case for a method
193 int UtcDaliGaussianBlurActivateDeactivateRepeat(void)
194 {
195   ToolkitTestApplication application;
196   TestGlAbstraction&     gl           = application.GetGlAbstraction();
197   TraceCallStack&        textureTrace = gl.GetTextureTrace();
198   textureTrace.Enable(true);
199   tet_infoline("UtcDaliGaussianBlurActivateDeactivateRepeat");
200
201   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
202   DALI_TEST_CHECK(view);
203
204   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
205   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
206   view.Add(Actor::New());
207   application.GetScene().Add(view);
208   view.Activate();
209
210   application.SendNotification();
211   application.Render(20);
212
213   DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 3, TEST_LOCATION);
214
215   view.Deactivate();
216
217   application.SendNotification();
218   application.Render(20);
219
220   DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 3, TEST_LOCATION);
221
222   view.Activate();
223
224   application.SendNotification();
225   application.Render(20);
226
227   DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 6, TEST_LOCATION);
228   END_TEST;
229 }
230
231 // Positive test case for a method
232 int UtcDaliGaussianBlurViewSetGetBackgroundColor(void)
233 {
234   ToolkitTestApplication application;
235   tet_infoline("UtcDaliGaussianBlurViewSetGetBackgroundColor");
236
237   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
238   DALI_TEST_CHECK(view);
239
240   view.SetBackgroundColor(Dali::Color::RED);
241   Vector4 color = view.GetBackgroundColor();
242   DALI_TEST_CHECK(color == Dali::Color::RED);
243   END_TEST;
244 }
245
246 // Positive test case for a method
247 int UtcDaliGaussianBlurViewSetGetRenderTarget(void)
248 {
249   ToolkitTestApplication application;
250   tet_infoline("UtcDaliGaussianBlurViewSetGetRenderTarget");
251
252   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New(5, 1.5f, Pixel::RGB888, 0.5f, 0.5f, true);
253   DALI_TEST_CHECK(view);
254
255   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
256   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
257   view.Add(Actor::New());
258   application.GetScene().Add(view);
259   view.Activate();
260
261   PixelData pixels  = Toolkit::SyncImageLoader::Load(TEST_IMAGE_FILE_NAME);
262   Texture   texture = Texture::New(TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight());
263   texture.Upload(pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight());
264
265   FrameBuffer renderTarget = FrameBuffer::New(480, 800, FrameBuffer::Attachment::NONE);
266   view.SetUserImageAndOutputRenderTarget(texture, renderTarget);
267   DALI_TEST_CHECK(view.GetBlurredRenderTarget() == renderTarget);
268   END_TEST;
269 }
270
271 int UtcDaliGaussianBlurViewActivateOnce1(void)
272 {
273   ToolkitTestApplication application;
274   tet_infoline("UtcDaliGaussianBlurActivateOnce1");
275
276   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New(5, 1.5f, Pixel::RGB888, 0.5f, 0.5f, true);
277   DALI_TEST_CHECK(view);
278
279   RenderTaskList taskList = application.GetScene().GetRenderTaskList();
280   DALI_TEST_CHECK(1u == taskList.GetTaskCount());
281
282   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
283   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
284   view.Add(Actor::New());
285   application.GetScene().Add(view);
286   view.ActivateOnce();
287
288   RenderTaskList taskList2 = application.GetScene().GetRenderTaskList();
289   DALI_TEST_CHECK(1u != taskList2.GetTaskCount());
290   application.Render();
291
292   END_TEST;
293 }
294
295 // Positive test case for a method
296 int UtcDaliGaussianBlurActivateOnce2(void)
297 {
298   ToolkitTestApplication application;
299   TestGlAbstraction&     gl           = application.GetGlAbstraction();
300   TraceCallStack&        textureTrace = gl.GetTextureTrace();
301   textureTrace.Enable(true);
302   tet_infoline("UtcDaliGaussianBlurActivateOnce2");
303
304   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
305   DALI_TEST_CHECK(view);
306
307   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
308   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
309   view.Add(Actor::New());
310   application.GetScene().Add(view);
311   view.ActivateOnce();
312
313   application.SendNotification();
314   application.Render(20);
315
316   DALI_TEST_CHECK(gl.GetLastGenTextureId() == 3);
317
318   view.ActivateOnce();
319
320   application.SendNotification();
321   application.Render(20);
322
323   DALI_TEST_CHECK(gl.GetLastGenTextureId() == 6);
324
325   END_TEST;
326 }
327
328 int UtcDaliGaussianBlurViewFinishedSignalN(void)
329 {
330   ToolkitTestApplication application;
331   tet_infoline("UtcDaliGaussianBlurViewFinishedSignalN");
332
333   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New(5, 1.5f, Pixel::RGB888, 0.5f, 0.5f, true);
334   DALI_TEST_CHECK(view);
335
336   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
337   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
338   view.Add(Actor::New());
339   application.GetScene().Add(view);
340   view.Activate();
341
342   TestCallback callback(view);
343   DALI_TEST_CHECK(callback.mFinished == false);
344
345   callback.Connect();
346
347   view.Deactivate();
348   application.SendNotification();
349
350   // FinishedSignal is only for ActivateOnce()
351   DALI_TEST_CHECK(callback.mFinished == false);
352
353   END_TEST;
354 }