Conversion to Apache 2.0 license
[platform/core/uifw/dali-toolkit.git] / automated-tests / TET / dali-test-suite / super-blur-view / utc-Dali-SuperBlurView.cpp
1 /*
2  * Copyright (c) 2014 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
20 #include <stdlib.h>
21 #include <tet_api.h>
22
23 #include <dali/public-api/dali-core.h>
24 #include <dali-toolkit/public-api/controls/super-blur-view/super-blur-view.h>
25
26 #include <dali-toolkit-test-suite-utils.h>
27
28 using namespace Dali;
29 using namespace Dali::Toolkit;
30
31 namespace
32 {
33 const int BLUR_LEVELS = 3;
34 const int RENDER_FRAME_INTERVAL = 16;
35
36 static bool gObjectCreatedCallBackCalled;
37 static void TestCallback(BaseHandle handle)
38 {
39   gObjectCreatedCallBackCalled = true;
40 }
41
42 /*
43  * Simulate time passed by.
44  *
45  * @note this will always process at least 1 frame (1/60 sec)
46  *
47  * @param application Test application instance
48  * @param duration Time to pass in milliseconds.
49  * @return The actual time passed in milliseconds
50  */
51 int Wait(ToolkitTestApplication& application, int duration = 0)
52 {
53   int time = 0;
54
55   for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++)
56   {
57     application.SendNotification();
58     application.Render(RENDER_FRAME_INTERVAL);
59     time += RENDER_FRAME_INTERVAL;
60   }
61
62   return time;
63 }
64
65 Image CreateSolidColorImage( ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height )
66 {
67   BitmapImage imageData = BitmapImage::New( width, height, Pixel::RGBA8888 );
68
69   // Create the image
70   PixelBuffer* pixbuf = imageData.GetBuffer();
71   unsigned int size = width * height;
72
73   for( size_t i = 0; i < size; i++ )
74     {
75       pixbuf[i*4+0] = 0xFF * color.r;
76       pixbuf[i*4+1] = 0xFF * color.g;
77       pixbuf[i*4+2] = 0xFF * color.b;
78       pixbuf[i*4+3] = 0xFF * color.a;
79     }
80   imageData.Update();
81
82   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
83   application.SendNotification();
84   application.Render(RENDER_FRAME_INTERVAL);
85   application.Render(RENDER_FRAME_INTERVAL);
86   application.SendNotification();
87
88   return imageData;
89 }
90 }//namespace
91
92 static void Startup();
93 static void Cleanup();
94
95 extern "C" {
96   void (*tet_startup)() = Startup;
97   void (*tet_cleanup)() = Cleanup;
98 }
99
100 static void UtcDaliSuperBlurViewNew();
101 static void UtcDaliSuperBlurViewSetImage();
102 static void UtcDaliSuperBlurViewSetGetBlurStrength();
103 static void UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex();
104 static void UtcDaliSuperBlurViewGetBlurredImage();
105
106 enum {
107   POSITIVE_TC_IDX = 0x01,
108   NEGATIVE_TC_IDX,
109 };
110
111 // Add test functionality for all APIs in the class (Positive and Negative)
112 extern "C" {
113   struct tet_testlist tet_testlist[] = {
114     { UtcDaliSuperBlurViewNew, POSITIVE_TC_IDX },
115     { UtcDaliSuperBlurViewSetImage, POSITIVE_TC_IDX },
116     { UtcDaliSuperBlurViewSetGetBlurStrength, POSITIVE_TC_IDX },
117     { UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex, POSITIVE_TC_IDX },
118     { UtcDaliSuperBlurViewGetBlurredImage, POSITIVE_TC_IDX },
119     { NULL, 0 }
120   };
121 }
122
123 // Called only once before first test is run.
124 static void Startup()
125 {
126 }
127
128 // Called only once after last test is run
129 static void Cleanup()
130 {
131 }
132
133 static void UtcDaliSuperBlurViewNew()
134 {
135   ToolkitTestApplication application;
136
137   tet_infoline(" UtcDaliSuperBlurViewNew ");
138
139   // Test default constructor.
140   SuperBlurView blurView;
141   DALI_TEST_CHECK( !blurView );
142
143   // Test object creation
144   blurView = SuperBlurView::New( BLUR_LEVELS );
145   DALI_TEST_CHECK( blurView );
146
147   //Additional check to ensure object is created by checking if it's registered
148   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
149   DALI_TEST_CHECK( registry );
150
151   gObjectCreatedCallBackCalled = false;
152   registry.ObjectCreatedSignal().Connect( &TestCallback );
153   {
154     SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
155   }
156   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
157
158   // Test copy constructor
159   SuperBlurView blurViewCopy2( blurView );
160   DALI_TEST_CHECK( blurViewCopy2 );
161
162   // Test down cast
163   Actor actorView;
164   actorView = blurView;
165   SuperBlurView downCastView = SuperBlurView::DownCast( actorView );
166   DALI_TEST_CHECK( downCastView );
167 }
168
169 static void UtcDaliSuperBlurViewSetImage()
170 {
171   ToolkitTestApplication application;
172
173   tet_infoline(" UtcDaliSuperBlurViewSetImage ");
174
175   SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
176   // create image actors for the original image and each blurred image
177   DALI_TEST_CHECK( blurView.GetChildCount() == BLUR_LEVELS+1 );
178
179   Image inputImage = CreateSolidColorImage( application, Color::GREEN, 50, 50 );
180   blurView.SetImage( inputImage );
181   // start multiple guassian blur call, each guassian blur creates two render tasks
182   DALI_TEST_CHECK( Stage::GetCurrent().GetRenderTaskList().GetTaskCount() ==  BLUR_LEVELS*2 + 1);
183 }
184
185 static void UtcDaliSuperBlurViewSetGetBlurStrength()
186 {
187   ToolkitTestApplication application;
188
189   tet_infoline(" UtcDaliSuperBlurViewSetGetBlurStrength ");
190
191   SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
192   DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.f, TEST_LOCATION );
193
194   blurView.SetBlurStrength( 0.65f );
195   Wait(application);
196   DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.65f, TEST_LOCATION );
197 }
198
199 static void UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex()
200 {
201   ToolkitTestApplication application;
202
203   tet_infoline(" UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex ");
204
205   SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
206   Property::Index blurPropertyIdx = blurView.GetBlurStrengthPropertyIndex();
207
208   float blurStrength;
209   (blurView.GetProperty( blurPropertyIdx )).Get(blurStrength);
210   DALI_TEST_EQUALS(blurStrength, 0.f, TEST_LOCATION );
211
212   blurView.SetBlurStrength( 0.65f );
213   Wait(application);
214   (blurView.GetProperty( blurPropertyIdx )).Get(blurStrength);
215   DALI_TEST_EQUALS(blurStrength, 0.65f, TEST_LOCATION );
216 }
217
218 static void UtcDaliSuperBlurViewGetBlurredImage()
219 {
220   ToolkitTestApplication application;
221
222   tet_infoline( "UtcDaliSuperBlurViewGetBlurredImage" );
223
224   SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
225   blurView.SetSize( 100.f,100.f );
226   Image inputImage = CreateSolidColorImage( application, Color::GREEN, 100, 100 );
227   blurView.SetImage( inputImage );
228
229   Wait(application, 200); // Make sure all the gaussian blur finished
230
231   Image image1 = blurView.GetBlurredImage( 1 );
232   DALI_TEST_CHECK( image1 );
233
234   Image image2 = blurView.GetBlurredImage( 2 );
235   DALI_TEST_CHECK( image2.GetWidth() == 25 );
236   DALI_TEST_CHECK( image2.GetHeight() == 25 );
237
238   Image image3 = blurView.GetBlurredImage( 3 );
239   DALI_TEST_CHECK( FrameBufferImage::DownCast( image2 ) );
240
241 }