2 * Copyright (c) 2014 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.
23 #include <dali/public-api/dali-core.h>
24 #include <dali-toolkit/public-api/controls/super-blur-view/super-blur-view.h>
26 #include <dali-toolkit-test-suite-utils.h>
29 using namespace Dali::Toolkit;
33 const int BLUR_LEVELS = 3;
34 const int RENDER_FRAME_INTERVAL = 16;
36 static bool gObjectCreatedCallBackCalled;
37 static void TestCallback(BaseHandle handle)
39 gObjectCreatedCallBackCalled = true;
43 * Simulate time passed by.
45 * @note this will always process at least 1 frame (1/60 sec)
47 * @param application Test application instance
48 * @param duration Time to pass in milliseconds.
49 * @return The actual time passed in milliseconds
51 int Wait(ToolkitTestApplication& application, int duration = 0)
55 for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++)
57 application.SendNotification();
58 application.Render(RENDER_FRAME_INTERVAL);
59 time += RENDER_FRAME_INTERVAL;
65 Image CreateSolidColorImage( ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height )
67 BitmapImage imageData = BitmapImage::New( width, height, Pixel::RGBA8888 );
70 PixelBuffer* pixbuf = imageData.GetBuffer();
71 unsigned int size = width * height;
73 for( size_t i = 0; i < size; i++ )
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;
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();
92 static void Startup();
93 static void Cleanup();
96 void (*tet_startup)() = Startup;
97 void (*tet_cleanup)() = Cleanup;
100 static void UtcDaliSuperBlurViewNew();
101 static void UtcDaliSuperBlurViewSetImage();
102 static void UtcDaliSuperBlurViewSetGetBlurStrength();
103 static void UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex();
104 static void UtcDaliSuperBlurViewGetBlurredImage();
107 POSITIVE_TC_IDX = 0x01,
111 // Add test functionality for all APIs in the class (Positive and Negative)
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 },
123 // Called only once before first test is run.
124 static void Startup()
128 // Called only once after last test is run
129 static void Cleanup()
133 static void UtcDaliSuperBlurViewNew()
135 ToolkitTestApplication application;
137 tet_infoline(" UtcDaliSuperBlurViewNew ");
139 // Test default constructor.
140 SuperBlurView blurView;
141 DALI_TEST_CHECK( !blurView );
143 // Test object creation
144 blurView = SuperBlurView::New( BLUR_LEVELS );
145 DALI_TEST_CHECK( blurView );
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 );
151 gObjectCreatedCallBackCalled = false;
152 registry.ObjectCreatedSignal().Connect( &TestCallback );
154 SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
156 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
158 // Test copy constructor
159 SuperBlurView blurViewCopy2( blurView );
160 DALI_TEST_CHECK( blurViewCopy2 );
164 actorView = blurView;
165 SuperBlurView downCastView = SuperBlurView::DownCast( actorView );
166 DALI_TEST_CHECK( downCastView );
169 static void UtcDaliSuperBlurViewSetImage()
171 ToolkitTestApplication application;
173 tet_infoline(" UtcDaliSuperBlurViewSetImage ");
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 );
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);
185 static void UtcDaliSuperBlurViewSetGetBlurStrength()
187 ToolkitTestApplication application;
189 tet_infoline(" UtcDaliSuperBlurViewSetGetBlurStrength ");
191 SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
192 DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.f, TEST_LOCATION );
194 blurView.SetBlurStrength( 0.65f );
196 DALI_TEST_EQUALS(blurView.GetCurrentBlurStrength(), 0.65f, TEST_LOCATION );
199 static void UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex()
201 ToolkitTestApplication application;
203 tet_infoline(" UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex ");
205 SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
206 Property::Index blurPropertyIdx = blurView.GetBlurStrengthPropertyIndex();
209 (blurView.GetProperty( blurPropertyIdx )).Get(blurStrength);
210 DALI_TEST_EQUALS(blurStrength, 0.f, TEST_LOCATION );
212 blurView.SetBlurStrength( 0.65f );
214 (blurView.GetProperty( blurPropertyIdx )).Get(blurStrength);
215 DALI_TEST_EQUALS(blurStrength, 0.65f, TEST_LOCATION );
218 static void UtcDaliSuperBlurViewGetBlurredImage()
220 ToolkitTestApplication application;
222 tet_infoline( "UtcDaliSuperBlurViewGetBlurredImage" );
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 );
229 Wait(application, 200); // Make sure all the gaussian blur finished
231 Image image1 = blurView.GetBlurredImage( 1 );
232 DALI_TEST_CHECK( image1 );
234 Image image2 = blurView.GetBlurredImage( 2 );
235 DALI_TEST_CHECK( image2.GetWidth() == 25 );
236 DALI_TEST_CHECK( image2.GetHeight() == 25 );
238 Image image3 = blurView.GetBlurredImage( 3 );
239 DALI_TEST_CHECK( FrameBufferImage::DownCast( image2 ) );