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