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