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