Updates following 'Rename BitmapImage as BufferImage'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-CubeTransitionEffect.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 using namespace Dali::Toolkit;
25
26
27 namespace
28 {
29 const unsigned int NUM_ROWS = 16;
30 const unsigned int NUM_COLUMNS = 10;
31 const Vector2 VIEW_AREA_SIZE( 480.0f, 800.0f );
32 const float TRANSITION_DURATION = 0.5f;
33 const float CUBE_DISPLACEMENT = 55.f;
34 const Vector2 PAN_POSITION1( VIEW_AREA_SIZE.x * 0.75f, VIEW_AREA_SIZE.y * 0.25f );
35 const Vector2 PAN_DISPLACEMENT1( -5.f, 5.f );
36 const Vector2 PAN_POSITION2( VIEW_AREA_SIZE.x * 0.25f, VIEW_AREA_SIZE.y * 0.75f );
37 const Vector2 PAN_DISPLACEMENT2( 5.f, 5.f );
38 const int RENDER_FRAME_INTERVAL = 16;
39 static const float FLT_EPISILON = 0.0001f;
40 const float OFFSCREEN_RENDER_DURATION = 0.05f;
41
42 static bool gObjectCreatedCallBackCalled;
43 static void TestCallback(BaseHandle handle)
44 {
45   gObjectCreatedCallBackCalled = true;
46 }
47
48 /**
49  * Simulate time passed by, waiting for certain process to finish
50  * @param[in] application Test application instance
51  * @param[in] durationToPass Time to pass in milliseconds.
52  */
53 void Wait(ToolkitTestApplication& application, float durationToPass)
54 {
55   int duration = static_cast<int>(durationToPass*1000.f);
56   // wait 2 more frames to compensate the two frames used by the image waiting for the loading succeeded signal
57   for(int i = 0; i <=  duration/RENDER_FRAME_INTERVAL+2 ; i++)
58   {
59     application.SendNotification();
60     application.Render(RENDER_FRAME_INTERVAL);
61   }
62 }
63
64
65
66 //Callback class to test whether transition completed signal is emitted when the transition animation is finished
67 class TransitionCompletedCallback : public Dali::ConnectionTracker
68 {
69 public:
70   TransitionCompletedCallback( bool& signalReceived, CubeTransitionEffect& effect, ImageActor& imageActor )
71   : mSignalVerified( signalReceived ),
72     mCurrentEffect( effect ),
73     mActorTransitTo( imageActor )
74   {
75   }
76
77   void Callback( CubeTransitionEffect effect, ImageActor imageActor )
78   {
79     tet_infoline( "Verifying TransitionCompletedSignal" );
80
81     if( mCurrentEffect == effect && mActorTransitTo == imageActor )
82     {
83       mSignalVerified = true;
84     }
85   }
86
87   void Reset()
88   {
89     mSignalVerified = false;
90   }
91
92   bool&                  mSignalVerified;
93   CubeTransitionEffect&  mCurrentEffect;
94   ImageActor&            mActorTransitTo;
95 };
96
97 } // namespace
98
99
100
101 void cube_transition_effect_startup(void)
102 {
103   test_return_value = TET_UNDEF;
104 }
105
106 void cube_transition_effect_cleanup(void)
107 {
108   test_return_value = TET_PASS;
109 }
110
111 int UtcDaliCubeTransitionWaveEffectNew(void)
112 {
113   ToolkitTestApplication application;
114   tet_infoline(" UtcDaliCubeTransitionWaveEffectNew ");
115
116   CubeTransitionEffect waveEffect;
117
118   DALI_TEST_CHECK( !waveEffect );
119
120   waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
121
122   DALI_TEST_CHECK( waveEffect );
123
124   waveEffect.Reset();
125
126   //Additional check to ensure object is created by checking if it's registered
127   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
128   DALI_TEST_CHECK( registry );
129
130   gObjectCreatedCallBackCalled = false;
131   registry.ObjectCreatedSignal().Connect( &TestCallback );
132   {
133     CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
134   }
135   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
136   END_TEST;
137 }
138
139 int UtcDaliCubeTransitionCrossEffectNew(void)
140 {
141   ToolkitTestApplication application;
142   tet_infoline(" UtcDaliCubeTransitionCrossEffectNew ");
143
144   CubeTransitionEffect crossEffect;
145
146   DALI_TEST_CHECK( !crossEffect );
147
148   crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
149
150   DALI_TEST_CHECK( crossEffect );
151
152   crossEffect.Reset();
153
154   //Additional check to ensure object is created by checking if it's registered
155   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
156   DALI_TEST_CHECK( registry );
157
158   gObjectCreatedCallBackCalled = false;
159   registry.ObjectCreatedSignal().Connect( &TestCallback );
160   {
161     CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
162   }
163   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
164   END_TEST;
165 }
166
167 int UtcDaliCubeTransitionFoldEffectNew(void)
168 {
169   ToolkitTestApplication application;
170   tet_infoline( " UtcDaliCubeTransitionFoldEffectNew " );
171
172   CubeTransitionEffect foldEffect;
173
174   DALI_TEST_CHECK( !foldEffect );
175
176   foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
177
178   DALI_TEST_CHECK( foldEffect );
179
180   foldEffect.Reset();
181
182   //Additional check to ensure object is created by checking if it is registered
183   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
184   DALI_TEST_CHECK( registry );
185
186   gObjectCreatedCallBackCalled = false;
187   registry.ObjectCreatedSignal().Connect( &TestCallback );
188   {
189     CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
190   }
191   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
192   END_TEST;
193 }
194
195 int UtcDaliCubeTransitionEffectSetGetTransitionDuration(void)
196 {
197   ToolkitTestApplication application;
198   tet_infoline(" UtcDaliCubeTransitionEffectSetGetTransitionDuration ");
199
200   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
201   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
202   DALI_TEST_EQUALS( TRANSITION_DURATION, waveEffect.GetTransitionDuration(), TEST_LOCATION );
203
204   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
205   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
206   DALI_TEST_EQUALS( TRANSITION_DURATION, crossEffect.GetTransitionDuration(), TEST_LOCATION );
207
208   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
209   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
210   DALI_TEST_EQUALS( TRANSITION_DURATION, foldEffect.GetTransitionDuration(), TEST_LOCATION );
211   END_TEST;
212 }
213
214 int UtcDaliCubeTransitionEffectSetGetCubeDisplacement(void)
215 {
216   ToolkitTestApplication application;
217   tet_infoline(" UtcDaliCubeTransitionEffectSetGetTransitionDuration ");
218
219   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
220   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
221   DALI_TEST_EQUALS( CUBE_DISPLACEMENT, waveEffect.GetCubeDisplacement(), TEST_LOCATION );
222
223   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
224   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
225   DALI_TEST_EQUALS( CUBE_DISPLACEMENT, crossEffect.GetCubeDisplacement(), TEST_LOCATION );
226
227   //Cube displacement is not used in CubeTransitionFoldEffect
228   END_TEST;
229 }
230
231 //Test common codes in base class
232 int UtcDaliCubeTransitionEffectGetRoot(void)
233 {
234   ToolkitTestApplication application;
235   tet_infoline(" UtcDaliCubeTransitionEffectGetRoot ");
236
237   unsigned int totalNum = NUM_ROWS*NUM_COLUMNS;
238
239   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
240   Actor rootActor = waveEffect.GetRoot();
241
242   // check that we have a total of NUM_ROWS*NUM_COLUMNS cubes;
243   DALI_TEST_CHECK( totalNum == rootActor.GetChildCount() );
244
245   // check that every cube has two children
246   DALI_TEST_CHECK( 2 == rootActor.GetChildAt(0).GetChildCount() );
247   DALI_TEST_CHECK( 2 == rootActor.GetChildAt(totalNum/2).GetChildCount() );
248   DALI_TEST_CHECK( 2 == rootActor.GetChildAt(totalNum-1).GetChildCount() );
249   END_TEST;
250 }
251
252 int UtcDaliCubeTransitionEffectIsTransiting(void)
253 {
254   ToolkitTestApplication application;
255   tet_infoline(" UtcDaliCubeTransitionEffectIsTransiting ");
256
257   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
258   ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
259
260   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
261   Actor rootActor = waveEffect.GetRoot();
262   Stage::GetCurrent().Add( rootActor );
263
264   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
265   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
266   DALI_TEST_CHECK( !waveEffect.IsTransiting() );
267
268   waveEffect.SetCurrentImage(imageActor);
269   waveEffect.SetTargetImage(imageActor);
270   //transition is started
271   waveEffect.StartTransition();
272   DALI_TEST_CHECK( waveEffect.IsTransiting() );
273   //transition is finished
274   Wait( application, TRANSITION_DURATION );
275   DALI_TEST_CHECK( !waveEffect.IsTransiting() );
276
277   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
278   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
279   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
280   DALI_TEST_CHECK( !crossEffect.IsTransiting() );
281
282   crossEffect.SetCurrentImage(imageActor);
283   crossEffect.SetTargetImage(imageActor);
284   //transition is started
285   crossEffect.StartTransition(false);
286   DALI_TEST_CHECK( crossEffect.IsTransiting() );
287   //transition is finished
288   Wait( application, TRANSITION_DURATION );
289   DALI_TEST_CHECK( !crossEffect.IsTransiting() );
290
291   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
292   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
293   DALI_TEST_CHECK( !foldEffect.IsTransiting() );
294
295   foldEffect.SetCurrentImage( imageActor );
296   foldEffect.SetTargetImage( imageActor );
297   //transition is started
298   foldEffect.StartTransition(true);
299   DALI_TEST_CHECK(foldEffect.IsTransiting() );
300   //transition is finished
301   Wait( application, TRANSITION_DURATION );
302   DALI_TEST_CHECK( !foldEffect.IsTransiting() );
303
304   END_TEST;
305 }
306
307 //Test common codes in base class
308 int UtcDaliCubeTransitionEffectSetCurrentImage(void)
309 {
310   ToolkitTestApplication application;
311   tet_infoline(" UtcDaliCubeTransitionEffectSetCurrentImage ");
312
313   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
314   ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40) ;
315
316   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
317   waveEffect.SetCurrentImage( imageActor );
318
319   // the current image content is set to the tiles facing the camera
320   ImageActor tile = ImageActor::DownCast( (waveEffect.GetRoot().GetChildAt(0).GetChildAt(0)));
321
322   //check the pixel area set to the cube
323   ImageActor::PixelArea pixelAreaDef( 0, 0, VIEW_AREA_SIZE.x / NUM_COLUMNS, VIEW_AREA_SIZE.y / NUM_ROWS);
324   ImageActor::PixelArea pixelArea = tile.GetPixelArea();
325   DALI_TEST_CHECK ( pixelAreaDef == pixelArea );
326
327   //check the size of the off screen rendered image
328   Wait( application, OFFSCREEN_RENDER_DURATION );
329   DALI_TEST_EQUALS( tile.GetImage().GetWidth(), VIEW_AREA_SIZE.x, TEST_LOCATION  );
330   DALI_TEST_EQUALS( tile.GetImage().GetHeight(), VIEW_AREA_SIZE.y, TEST_LOCATION  );
331   END_TEST;
332 }
333
334 //Test common codes in base class
335 int UtcDaliCubeTransitionEffectSetTargetImage(void)
336 {
337   ToolkitTestApplication application;
338   tet_infoline(" UtcDaliCubeTransitionEffectSetTargetImage ");
339
340   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
341  ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
342
343   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
344   Actor rootActor = waveEffect.GetRoot();
345   Stage::GetCurrent().Add( rootActor );
346
347   waveEffect.SetCurrentImage( imageActor );
348   waveEffect.SetTargetImage( imageActor );
349
350   // the target image content is set to the tiles currently invisible to the camera
351   ImageActor tile = ImageActor::DownCast( (rootActor.GetChildAt(0).GetChildAt(1)));
352
353   //check the pixel area set to the cube
354   ImageActor::PixelArea pixelAreaDef( 0, 0, VIEW_AREA_SIZE.x / NUM_COLUMNS, VIEW_AREA_SIZE.y / NUM_ROWS);
355   ImageActor::PixelArea pixelArea = tile.GetPixelArea();
356   DALI_TEST_CHECK ( pixelAreaDef == pixelArea );
357
358   //check the size of the off screen rendered image
359   Wait( application, OFFSCREEN_RENDER_DURATION );
360   DALI_TEST_EQUALS( tile.GetImage().GetWidth(), VIEW_AREA_SIZE.x, TEST_LOCATION  );
361   DALI_TEST_EQUALS( tile.GetImage().GetHeight(), VIEW_AREA_SIZE.y, TEST_LOCATION  );
362   END_TEST;
363 }
364
365 int UtcDaliCubeTransitionWaveEffectStartTransition(void)
366 {
367   ToolkitTestApplication application;
368   tet_infoline(" UtcDaliCubeTransitionWaveEffectStartTransition ");
369
370   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
371   ImageActor imageActor = ImageActor::New(ResourceImage::New("Image.jpg"));
372
373   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
374   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
375   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
376   Actor rootActor = waveEffect.GetRoot();
377   Stage::GetCurrent().Add( rootActor );
378   Actor cube = rootActor.GetChildAt(0);
379
380   waveEffect.SetCurrentImage( imageActor );
381
382   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
383   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
384
385   //check the cube rotation value and color values after different transitions
386   waveEffect.SetTargetImage( imageActor );
387   waveEffect.StartTransition(true);
388   Wait( application, TRANSITION_DURATION );
389   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
390   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
391   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
392
393   waveEffect.SetTargetImage( imageActor );
394   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
395   Wait( application, TRANSITION_DURATION );
396   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
397   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
398   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
399
400   waveEffect.SetTargetImage( imageActor );
401   waveEffect.StartTransition(false);
402   Wait( application, TRANSITION_DURATION );
403   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
404   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
405   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
406
407   waveEffect.SetTargetImage( imageActor );
408   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
409   Wait( application, TRANSITION_DURATION );
410   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
411   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
412   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
413   END_TEST;
414 }
415
416 int UtcDaliCubeTransitionCrossEffectStartTransition(void)
417 {
418   ToolkitTestApplication application;
419   tet_infoline(" UtcDaliCubeTransitionCrossEffectStartTransition ");
420
421   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
422   ImageActor imageActor = ImageActor::New(ResourceImage::New("Image.jpg"));
423
424   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
425   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
426   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
427   Actor rootActor = crossEffect.GetRoot();
428   Stage::GetCurrent().Add( rootActor );
429   crossEffect.SetCurrentImage( imageActor );
430   Actor cube0 = rootActor.GetChildAt(0);
431   Actor cube1 = rootActor.GetChildAt(1);
432
433   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
434   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
435
436   //check the cube rotation values and color values after different transitions
437   crossEffect.SetTargetImage( imageActor );
438   crossEffect.StartTransition(true);
439   Wait( application, TRANSITION_DURATION );
440   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
441   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
442   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
443   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
444
445
446   crossEffect.SetTargetImage( imageActor );
447   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
448   Wait( application, TRANSITION_DURATION );
449   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
450   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
451   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
452   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
453
454
455   crossEffect.SetTargetImage( imageActor );
456   crossEffect.StartTransition(false);
457   Wait( application, TRANSITION_DURATION );
458   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
459   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
460   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
461   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
462
463   crossEffect.SetTargetImage( imageActor );
464   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
465   Wait( application, TRANSITION_DURATION );
466   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
467   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
468   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
469   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
470   END_TEST;
471 }
472
473 int UtcDaliCubeTransitionFoldEffectStartTransition(void)
474 {
475   ToolkitTestApplication application;
476   tet_infoline(" UtcDaliCubeTransitionFoldEffectStartTransition ");
477
478   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
479   ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
480
481   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
482   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
483   Actor rootActor = foldEffect.GetRoot();
484   Stage::GetCurrent().Add( rootActor );
485   foldEffect.SetCurrentImage( imageActor );
486   Actor cube0 = rootActor.GetChildAt(0);
487   Actor cube1 = rootActor.GetChildAt(1);
488
489   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
490   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
491
492   //check the cube rotation values and color values after different transitions
493   foldEffect.SetTargetImage( imageActor );
494   foldEffect.StartTransition(true);
495   Wait( application, TRANSITION_DURATION );
496   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
497   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
498   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
499   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
500
501   foldEffect.SetTargetImage( imageActor );
502   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
503   Wait( application, TRANSITION_DURATION );
504   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
505   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
506   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
507   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
508
509
510   foldEffect.SetTargetImage( imageActor );
511   foldEffect.StartTransition(false);
512   Wait( application, TRANSITION_DURATION );
513   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
514   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
515   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
516   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(),fullBrightness, FLT_EPISILON, TEST_LOCATION );
517
518   foldEffect.SetTargetImage( imageActor );
519   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
520   Wait( application, TRANSITION_DURATION );
521   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
522   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
523   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
524   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
525   END_TEST;
526 }
527
528 int UtcDaliCubeTransitionEffectSignalTransitionCompleted(void)
529 {
530   ToolkitTestApplication application;
531   tet_infoline(" UtcDaliCubeTransitionEffectSignalTransitionCompleted ");
532
533   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
534   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
535   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
536   ImageActor thirdImageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40);
537
538   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
539   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
540   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
541   Actor rootActor = waveEffect.GetRoot();
542   Stage::GetCurrent().Add( rootActor );
543
544   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
545   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
546   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
547   rootActor = crossEffect.GetRoot();
548   Stage::GetCurrent().Add( rootActor );
549
550   CubeTransitionEffect foldEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
551   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
552   rootActor = foldEffect.GetRoot();
553   Stage::GetCurrent().Add( rootActor );
554
555   bool signalVerified = false;
556   CubeTransitionEffect currentEffect;
557   ImageActor actorTransitTo;
558   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
559   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
560   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
561   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
562
563   //check that the wave effect is used to transit to secondImageActor
564   currentEffect = waveEffect;
565   actorTransitTo = secondImageActor;
566   waveEffect.SetCurrentImage( firstImageActor );
567   waveEffect.SetTargetImage( secondImageActor );
568   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
569   Wait( application, TRANSITION_DURATION );
570   DALI_TEST_CHECK(callback.mSignalVerified);
571   callback.Reset();
572
573   //check that the wave effect is used to transit to thirdImageActor
574   actorTransitTo = thirdImageActor;
575   waveEffect.SetTargetImage( thirdImageActor );
576   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
577   Wait( application, TRANSITION_DURATION );
578   DALI_TEST_CHECK(callback.mSignalVerified);
579   callback.Reset();
580
581   //check that the cross effect is used to transit to secondImageActor
582   currentEffect = crossEffect;
583   actorTransitTo = secondImageActor;
584   crossEffect.SetCurrentImage( thirdImageActor );
585   crossEffect.SetTargetImage( secondImageActor );
586   crossEffect.StartTransition(true);
587   Wait( application, TRANSITION_DURATION );
588   DALI_TEST_CHECK(callback.mSignalVerified);
589   callback.Reset();
590
591   //check that the cross effect is used to transit to firstImageActor
592   actorTransitTo = firstImageActor;
593   crossEffect.SetTargetImage( firstImageActor );
594   crossEffect.StartTransition(false);
595   Wait( application, TRANSITION_DURATION );
596   DALI_TEST_CHECK(callback.mSignalVerified);
597   callback.Reset();
598
599   //check that the fold effect is used to transit to secondImageActor
600   currentEffect = foldEffect;
601   actorTransitTo = secondImageActor;
602   foldEffect.SetCurrentImage( firstImageActor );
603   foldEffect.SetTargetImage( secondImageActor );
604   foldEffect.StartTransition();
605   Wait( application, TRANSITION_DURATION );
606   DALI_TEST_CHECK( callback.mSignalVerified );
607   callback.Reset();
608
609   //check that the fold effect is used to transit to thirdImageActor
610   actorTransitTo = thirdImageActor;
611   foldEffect.SetTargetImage( thirdImageActor );
612   foldEffect.StartTransition( false );
613   Wait( application, TRANSITION_DURATION );
614   DALI_TEST_CHECK( callback.mSignalVerified );
615   END_TEST;
616 }
617
618 int UtcDaliCubeTransitionEffectPauseResumeTransition(void)
619 {
620   ToolkitTestApplication application;
621   tet_infoline(" UtcDaliCubeTransitionEffectPauseResumeTransition ");
622
623   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
624   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
625   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
626
627   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
628   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
629   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
630   Actor rootActor = waveEffect.GetRoot();
631   Stage::GetCurrent().Add( rootActor );
632
633   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
634   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
635   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
636   rootActor = crossEffect.GetRoot();
637   Stage::GetCurrent().Add( rootActor );
638
639   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
640   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
641   rootActor = crossEffect.GetRoot();
642   Stage::GetCurrent().Add( rootActor );
643
644   bool signalVerified = false;
645   CubeTransitionEffect currentEffect;
646   ImageActor actorTransitTo;
647   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
648   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
649   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
650   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
651
652   currentEffect = waveEffect;
653   actorTransitTo = secondImageActor;
654   waveEffect.SetCurrentImage( firstImageActor );
655   waveEffect.SetTargetImage( secondImageActor );
656   // start transition; transit for 0.5*duration; pause for 0.5*duration;
657   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
658   // only until now the transition finished signal can be received
659   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
660   Wait( application, TRANSITION_DURATION*0.5f );
661   DALI_TEST_CHECK(!callback.mSignalVerified);
662   waveEffect.PauseTransition();
663   Wait( application, TRANSITION_DURATION*0.5f );
664   DALI_TEST_CHECK(!callback.mSignalVerified);
665   waveEffect.ResumeTransition();
666   Wait( application, TRANSITION_DURATION*0.25f );
667   DALI_TEST_CHECK(!callback.mSignalVerified);
668   waveEffect.PauseTransition();
669   Wait( application, TRANSITION_DURATION*0.25f );
670   DALI_TEST_CHECK(!callback.mSignalVerified);
671   waveEffect.ResumeTransition();
672   Wait( application, TRANSITION_DURATION*0.25f );
673   DALI_TEST_CHECK(callback.mSignalVerified);
674   callback.Reset();
675
676   currentEffect = crossEffect;
677   actorTransitTo = firstImageActor;
678   crossEffect.SetCurrentImage( secondImageActor );
679   crossEffect.SetTargetImage( firstImageActor );
680   // start transition; transit for 0.25*duration; pause for 0.2*duration;
681   // resume for 0.5*duration; pause for 0.2*duration; resume for another 0.25*duration;
682   // only until now the transition finished signal can be received
683   crossEffect.StartTransition(false);
684   Wait( application, TRANSITION_DURATION*0.25f );
685   DALI_TEST_CHECK(!callback.mSignalVerified);
686   crossEffect.PauseTransition();
687   Wait( application, TRANSITION_DURATION*0.2f );
688   DALI_TEST_CHECK(!callback.mSignalVerified);
689   crossEffect.ResumeTransition();
690   Wait( application, TRANSITION_DURATION*0.5f );
691   DALI_TEST_CHECK(!callback.mSignalVerified);
692   crossEffect.PauseTransition();
693   Wait( application, TRANSITION_DURATION*0.2f );
694   DALI_TEST_CHECK(!callback.mSignalVerified);
695   crossEffect.ResumeTransition();
696   Wait( application, TRANSITION_DURATION*0.25f );
697   DALI_TEST_CHECK(callback.mSignalVerified);
698   callback.Reset();
699
700   currentEffect = foldEffect;
701   actorTransitTo = secondImageActor;
702   foldEffect.SetCurrentImage( firstImageActor );
703   foldEffect.SetTargetImage( secondImageActor );
704   // start transition; transit for 0.5*duration; pause for 0.5*duration;
705   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
706   // only until now the transition finished signal can be received
707   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
708   Wait( application, TRANSITION_DURATION*0.5f );
709   DALI_TEST_CHECK(!callback.mSignalVerified);
710   foldEffect.PauseTransition();
711   Wait( application, TRANSITION_DURATION*0.5f );
712   DALI_TEST_CHECK(!callback.mSignalVerified);
713   foldEffect.ResumeTransition();
714   Wait( application, TRANSITION_DURATION*0.25f );
715   DALI_TEST_CHECK(!callback.mSignalVerified);
716   foldEffect.PauseTransition();
717   Wait( application, TRANSITION_DURATION*0.25f );
718   DALI_TEST_CHECK(!callback.mSignalVerified);
719   foldEffect.ResumeTransition();
720   Wait( application, TRANSITION_DURATION*0.25f );
721   DALI_TEST_CHECK(callback.mSignalVerified);
722   END_TEST;
723 }
724
725 int UtcDaliCubeTransitionWaveEffectStopTransition(void)
726 {
727   ToolkitTestApplication application;
728   tet_infoline(" UtcDaliCubeTransitionWaveEffectStopTransition ");
729
730   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
731   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
732   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
733
734   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
735   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
736   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
737   Actor rootActor = waveEffect.GetRoot();
738   Stage::GetCurrent().Add( rootActor );
739   Actor cube = rootActor.GetChildAt(0);
740   waveEffect.SetCurrentImage( firstImageActor );
741
742   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
743   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
744
745   //check the cube rotation value and color values after stopping different transitions in the middle
746   waveEffect.SetTargetImage( secondImageActor );
747   waveEffect.StartTransition(true);
748   Wait( application, TRANSITION_DURATION*0.2f );
749   waveEffect.StopTransition();
750   application.SendNotification();
751   application.Render(RENDER_FRAME_INTERVAL);
752   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
753   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
754   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
755
756   waveEffect.SetTargetImage( firstImageActor );
757   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
758   Wait( application, TRANSITION_DURATION*0.4f );
759   waveEffect.StopTransition();
760   application.SendNotification();
761   application.Render(RENDER_FRAME_INTERVAL);
762   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
763   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
764   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
765
766   waveEffect.SetTargetImage( secondImageActor );
767   waveEffect.StartTransition(false);
768   Wait( application, TRANSITION_DURATION*0.6f );
769   waveEffect.StopTransition();
770   application.SendNotification();
771   application.Render(RENDER_FRAME_INTERVAL);
772   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
773   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
774   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
775
776   waveEffect.SetTargetImage( firstImageActor );
777   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
778   Wait( application, TRANSITION_DURATION*0.8f );
779   waveEffect.StopTransition();
780   application.SendNotification();
781   application.Render(RENDER_FRAME_INTERVAL);
782   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
783   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
784   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
785   END_TEST;
786 }
787
788 int UtcDaliCubeTransitionCrossEffectStopTransition(void)
789 {
790   ToolkitTestApplication application;
791   tet_infoline(" UtcDaliCubeTransitionCrossEffectStopTransition ");
792
793   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
794   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
795   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
796
797   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
798   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
799   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
800   Actor rootActor = crossEffect.GetRoot();
801   Stage::GetCurrent().Add( rootActor );
802   crossEffect.SetCurrentImage( firstImageActor );
803   Actor cube0 = rootActor.GetChildAt(0);
804   Actor cube1 = rootActor.GetChildAt(1);
805
806   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
807   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
808
809   //check the cube rotation values and color values after stop the different transitions in the middle
810   crossEffect.SetTargetImage( secondImageActor );
811   crossEffect.StartTransition(true);
812   Wait( application, TRANSITION_DURATION*0.2f );
813   crossEffect.StopTransition();
814   application.SendNotification();
815   application.Render(RENDER_FRAME_INTERVAL);
816   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
817   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
818
819   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
820   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
821
822   crossEffect.SetTargetImage( firstImageActor );
823   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
824   Wait( application, TRANSITION_DURATION*0.4f );
825   crossEffect.StopTransition();
826   application.SendNotification();
827   application.Render(RENDER_FRAME_INTERVAL);
828   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
829   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
830   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
831   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
832
833   crossEffect.SetTargetImage( secondImageActor );
834   crossEffect.StartTransition(false);
835   Wait( application, TRANSITION_DURATION*0.6f );
836   crossEffect.StopTransition();
837   application.SendNotification();
838   application.Render(RENDER_FRAME_INTERVAL);
839   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
840   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
841   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
842   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
843
844   crossEffect.SetTargetImage( firstImageActor );
845   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
846   Wait( application, TRANSITION_DURATION*0.8f );
847   crossEffect.StopTransition();
848   application.SendNotification();
849   application.Render(RENDER_FRAME_INTERVAL);
850   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
851   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
852   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
853   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
854   END_TEST;
855 }
856
857 int UtcDaliCubeTransitionFoldEffectStopTransition(void)
858 {
859   ToolkitTestApplication application;
860   tet_infoline(" UtcDaliCubeTransitionFoldEffectStopTransition ");
861
862   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
863   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
864   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
865
866   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
867   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
868   Actor rootActor = foldEffect.GetRoot();
869   Stage::GetCurrent().Add( rootActor );
870   foldEffect.SetCurrentImage( firstImageActor );
871   Actor cube0 = rootActor.GetChildAt(0);
872   Actor cube1 = rootActor.GetChildAt(1);
873
874   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
875   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
876
877   //check the cube rotation values and color values after stop the different transitions in the middle
878   foldEffect.SetTargetImage( secondImageActor );
879   foldEffect.StartTransition(true);
880   Wait( application, TRANSITION_DURATION*0.2f );
881   foldEffect.StopTransition();
882   application.SendNotification();
883   application.Render(RENDER_FRAME_INTERVAL);
884   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
885   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
886   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
887   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
888
889   foldEffect.SetTargetImage( firstImageActor );
890   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
891   Wait( application, TRANSITION_DURATION*0.4f );
892   foldEffect.StopTransition();
893   application.SendNotification();
894   application.Render(RENDER_FRAME_INTERVAL);
895   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
896   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
897   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
898   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
899
900   foldEffect.SetTargetImage( secondImageActor );
901   foldEffect.StartTransition(false);
902   Wait( application, TRANSITION_DURATION*0.6f );
903   foldEffect.StopTransition();
904   application.SendNotification();
905   application.Render(RENDER_FRAME_INTERVAL);
906   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
907   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
908   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
909   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
910
911   foldEffect.SetTargetImage( firstImageActor );
912   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
913   Wait( application, TRANSITION_DURATION*0.8f );
914   foldEffect.StopTransition();
915   application.SendNotification();
916   application.Render(RENDER_FRAME_INTERVAL);
917   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
918   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
919   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
920   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
921   END_TEST;
922 }