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