Adding new test harness
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-unmanaged / utc-Dali-WaterEffect.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 #include <stdlib.h>
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <dali-toolkit/dali-toolkit.h>
21
22 using namespace Dali;
23
24 void dali_water_effect_startup(void)
25 {
26   test_return_value = TET_UNDEF;
27 }
28
29 void dali_water_effect_cleanup(void)
30 {
31   test_return_value = TET_PASS;
32 }
33
34
35
36 int UtcDaliWaterEffectUninitialized(void)
37 {
38   ToolkitTestApplication application;
39
40   Toolkit::WaterEffect effect;
41
42   try
43   {
44     // New() must be called to create a RippleEffect or it wont be valid.
45     effect.SetAmplitude( 0, 0.5f );
46     DALI_TEST_CHECK( false );
47   }
48   catch (Dali::DaliException& e)
49   {
50     // Tests that a negative test of an assertion succeeds
51     tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
52     DALI_TEST_CHECK(!effect);
53   }
54   END_TEST;
55 }
56
57 int UtcDaliWaterEffectPropertyNames(void)
58 {
59   ToolkitTestApplication application;
60
61   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
62   DALI_TEST_CHECK( effect );
63
64   // Check the names, this names are used in the shaders code,
65   // if they change the shader code has to be updated
66   DALI_TEST_EQUALS( effect.GetAmplitudePropertyName( 0 ), "uDrops[0].amplitude", TEST_LOCATION );
67   DALI_TEST_EQUALS( effect.GetCenterPropertyName( 0 ), "uDrops[0].center", TEST_LOCATION );
68   DALI_TEST_EQUALS( effect.GetPropagationPropertyName( 0 ), "uDrops[0].radius", TEST_LOCATION );
69   END_TEST;
70 }
71
72 int UtcDaliWaterEffectOutOfBounds(void)
73 {
74   ToolkitTestApplication application;
75
76   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
77   DALI_TEST_CHECK( effect );
78
79   try
80   {
81     // the highest index acceptable is (GetNumberOfWaves() - 1)
82     effect.SetAmplitude( effect.GetNumberOfWaves(), 0 );
83     DALI_TEST_CHECK( false );
84   }
85   catch (Dali::DaliException& e)
86   {
87     // Tests that a negative test of an assertion succeeds
88     tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
89     DALI_TEST_CHECK( true );
90   }
91   END_TEST;
92 }
93
94 int UtcDaliWaterEffectDefaultValues(void)
95 {
96   ToolkitTestApplication application;
97
98   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
99   DALI_TEST_CHECK( effect );
100
101   // Check that the effect has the number of waves it was requested
102   DALI_TEST_CHECK( effect.GetNumberOfWaves() == 4 );
103
104   BitmapImage image = CreateBitmapImage();
105
106   ImageActor actor = ImageActor::New( image );
107   actor.SetSize( 100.0f, 100.0f );
108   actor.SetShaderEffect( effect );
109   Stage::GetCurrent().Add( actor );
110
111   application.SendNotification();
112   application.Render();
113
114   Vector2 topLeft( Stage::GetCurrent().GetSize() * 0.5f );
115   topLeft.y = -topLeft.y;
116
117   for ( unsigned int i = 0; i < effect.GetNumberOfWaves(); ++i )
118   {
119     DALI_TEST_CHECK(
120         application.GetGlAbstraction().CheckUniformValue(
121             effect.GetAmplitudePropertyName(i).c_str(),
122             0.0f ) );
123     DALI_TEST_CHECK(
124         application.GetGlAbstraction().CheckUniformValue(
125             effect.GetCenterPropertyName(i).c_str(),
126             topLeft ) );
127     DALI_TEST_CHECK(
128         application.GetGlAbstraction().CheckUniformValue(
129             effect.GetPropagationPropertyName(i).c_str(),
130             0.0f ) );
131   }
132   END_TEST;
133 }
134
135 int UtcDaliWaterEffectCustomValues(void)
136 {
137   ToolkitTestApplication application;
138
139   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
140   DALI_TEST_CHECK( effect );
141
142   BitmapImage image = CreateBitmapImage();
143
144   ImageActor actor = ImageActor::New( image );
145   actor.SetSize( 100.0f, 100.0f );
146   actor.SetShaderEffect( effect );
147   Stage::GetCurrent().Add( actor );
148
149   effect.SetAmplitude( 0, 0.5f );
150   effect.SetCenter( 0, Vector2 ( 10.0f, 10.0f ) );
151   effect.SetPropagation( 0, 2.0f );
152
153   application.SendNotification();
154   application.Render();
155
156   DALI_TEST_CHECK(
157       application.GetGlAbstraction().CheckUniformValue(
158           effect.GetAmplitudePropertyName(0).c_str(),
159           0.5f ) );
160
161   Vector2 centerPoint( Stage::GetCurrent().GetSize() * 0.5f );
162   centerPoint.y = -centerPoint.y;
163
164   DALI_TEST_CHECK(
165       application.GetGlAbstraction().CheckUniformValue(
166           effect.GetCenterPropertyName(0).c_str(),
167           Vector2( centerPoint.x - 10.0f, centerPoint.y + 10.0f ) ) );
168   DALI_TEST_CHECK(
169       application.GetGlAbstraction().CheckUniformValue(
170           effect.GetPropagationPropertyName(0).c_str(),
171           2.0f ) );
172   END_TEST;
173 }
174
175 int UtcDaliWaterEffectGetAmplitudePositive(void)
176 {
177   ToolkitTestApplication application;
178
179   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
180   DALI_TEST_CHECK( effect );
181
182   BitmapImage image = CreateBitmapImage();
183
184   ImageActor actor = ImageActor::New( image );
185   actor.SetSize( 100.0f, 100.0f );
186   actor.SetShaderEffect( effect );
187   Stage::GetCurrent().Add( actor );
188
189   float amplitude(0.5f);
190   DALI_TEST_CHECK(effect.GetAmplitude(0) != amplitude);
191   effect.SetAmplitude( 0, amplitude );
192
193   application.SendNotification();
194   application.Render();
195
196   DALI_TEST_EQUALS(amplitude, effect.GetAmplitude(0), TEST_LOCATION);
197   END_TEST;
198 }
199
200 int UtcDaliWaterEffectGetAmplitudeNegative(void)
201 {
202   ToolkitTestApplication application;
203
204   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
205   DALI_TEST_CHECK( effect );
206
207   BitmapImage image = CreateBitmapImage();
208
209   ImageActor actor = ImageActor::New( image );
210   actor.SetSize( 100.0f, 100.0f );
211   actor.SetShaderEffect( effect );
212   Stage::GetCurrent().Add( actor );
213
214   try
215   {
216     effect.GetAmplitude(9999);
217     tet_result(TET_FAIL);
218   }
219   catch(DaliException& exception)
220   {
221     if (exception.mCondition == "index < mNumberOfWaves")
222     {
223       tet_result(TET_PASS);
224     }
225   }
226   END_TEST;
227 }
228
229 int UtcDaliWaterEffectGetCenterPositive(void)
230 {
231   ToolkitTestApplication application;
232
233   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
234   DALI_TEST_CHECK( effect );
235
236   BitmapImage image = CreateBitmapImage();
237
238   ImageActor actor = ImageActor::New( image );
239   actor.SetSize( 100.0f, 100.0f );
240   actor.SetShaderEffect( effect );
241   Stage::GetCurrent().Add( actor );
242
243   Vector2 center(10.0f, 20.0f);
244   DALI_TEST_CHECK(effect.GetCenter(0) != center);
245   effect.SetCenter( 0, center );
246
247   application.SendNotification();
248   application.Render();
249
250   DALI_TEST_EQUALS(center, effect.GetCenter(0), TEST_LOCATION);
251   END_TEST;
252 }
253
254 int UtcDaliWaterEffectGetCenterNegative(void)
255 {
256   ToolkitTestApplication application;
257
258   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
259   DALI_TEST_CHECK( effect );
260
261   BitmapImage image = CreateBitmapImage();
262
263   ImageActor actor = ImageActor::New( image );
264   actor.SetSize( 100.0f, 100.0f );
265   actor.SetShaderEffect( effect );
266   Stage::GetCurrent().Add( actor );
267
268   try
269   {
270     effect.GetCenter(9999);
271     tet_result(TET_FAIL);
272   }
273   catch(DaliException& exception)
274   {
275     if (exception.mCondition == "index < mNumberOfWaves")
276     {
277       tet_result(TET_PASS);
278     }
279   }
280   END_TEST;
281 }
282
283 int UtcDaliWaterEffectGetPropagationPositive(void)
284 {
285   ToolkitTestApplication application;
286
287   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
288   DALI_TEST_CHECK( effect );
289
290   BitmapImage image = CreateBitmapImage();
291
292   ImageActor actor = ImageActor::New( image );
293   actor.SetSize( 100.0f, 100.0f );
294   actor.SetShaderEffect( effect );
295   Stage::GetCurrent().Add( actor );
296
297   float propagation(0.5f);
298   DALI_TEST_CHECK(effect.GetPropagation(0) != propagation);
299   effect.SetPropagation( 0, propagation );
300
301   application.SendNotification();
302   application.Render();
303
304   DALI_TEST_EQUALS(propagation, effect.GetPropagation(0), TEST_LOCATION);
305   END_TEST;
306 }
307
308 int UtcDaliWaterEffectGetPropagationNegative(void)
309 {
310   ToolkitTestApplication application;
311
312   Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
313   DALI_TEST_CHECK( effect );
314
315   BitmapImage image = CreateBitmapImage();
316
317   ImageActor actor = ImageActor::New( image );
318   actor.SetSize( 100.0f, 100.0f );
319   actor.SetShaderEffect( effect );
320   Stage::GetCurrent().Add( actor );
321
322   try
323   {
324     effect.GetPropagation(9999);
325     tet_result(TET_FAIL);
326   }
327   catch(DaliException& exception)
328   {
329     if (exception.mCondition == "index < mNumberOfWaves")
330     {
331       tet_result(TET_PASS);
332     }
333   }
334   END_TEST;
335 }