Merge "Remove Constraints from Cluster,ToolBar,View & ImageView" into tizen
[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 bitmapImage 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   ImageAttributes attributes( tile.GetImage().GetAttributes() );
330   DALI_TEST_EQUALS( static_cast<float>(attributes.GetWidth()), VIEW_AREA_SIZE.x, TEST_LOCATION  );
331   DALI_TEST_EQUALS( static_cast<float>(attributes.GetHeight()), VIEW_AREA_SIZE.y, TEST_LOCATION  );
332   END_TEST;
333 }
334
335 //Test common codes in base class
336 int UtcDaliCubeTransitionEffectSetTargetImage(void)
337 {
338   ToolkitTestApplication application;
339   tet_infoline(" UtcDaliCubeTransitionEffectSetTargetImage ");
340
341   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
342  ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
343
344   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
345   Actor rootActor = waveEffect.GetRoot();
346   Stage::GetCurrent().Add( rootActor );
347
348   waveEffect.SetCurrentImage( imageActor );
349   waveEffect.SetTargetImage( imageActor );
350
351   // the target image content is set to the tiles currently invisible to the camera
352   ImageActor tile = ImageActor::DownCast( (rootActor.GetChildAt(0).GetChildAt(1)));
353
354   //check the pixel area set to the cube
355   ImageActor::PixelArea pixelAreaDef( 0, 0, VIEW_AREA_SIZE.x / NUM_COLUMNS, VIEW_AREA_SIZE.y / NUM_ROWS);
356   ImageActor::PixelArea pixelArea = tile.GetPixelArea();
357   DALI_TEST_CHECK ( pixelAreaDef == pixelArea );
358
359   //check the size of the off screen rendered image
360   Wait( application, OFFSCREEN_RENDER_DURATION );
361   ImageAttributes attributes( tile.GetImage().GetAttributes() );
362   DALI_TEST_EQUALS( static_cast<float>(attributes.GetWidth()), VIEW_AREA_SIZE.x, TEST_LOCATION  );
363   DALI_TEST_EQUALS( static_cast<float>(attributes.GetHeight()), VIEW_AREA_SIZE.y, TEST_LOCATION  );
364   END_TEST;
365 }
366
367 int UtcDaliCubeTransitionWaveEffectStartTransition(void)
368 {
369   ToolkitTestApplication application;
370   tet_infoline(" UtcDaliCubeTransitionWaveEffectStartTransition ");
371
372   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
373   ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
374
375   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
376   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
377   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
378   Actor rootActor = waveEffect.GetRoot();
379   Stage::GetCurrent().Add( rootActor );
380   Actor cube = rootActor.GetChildAt(0);
381
382   waveEffect.SetCurrentImage( imageActor );
383
384   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
385   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
386
387   //check the cube rotation value and color values after different transitions
388   waveEffect.SetTargetImage( imageActor );
389   waveEffect.StartTransition(true);
390   Wait( application, TRANSITION_DURATION );
391   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
392   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
393   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
394
395   waveEffect.SetTargetImage( imageActor );
396   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
397   Wait( application, TRANSITION_DURATION );
398   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
399   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
400   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
401
402   waveEffect.SetTargetImage( imageActor );
403   waveEffect.StartTransition(false);
404   Wait( application, TRANSITION_DURATION );
405   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
406   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
407   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
408
409   waveEffect.SetTargetImage( imageActor );
410   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
411   Wait( application, TRANSITION_DURATION );
412   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
413   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
414   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
415   END_TEST;
416 }
417
418 int UtcDaliCubeTransitionCrossEffectStartTransition(void)
419 {
420   ToolkitTestApplication application;
421   tet_infoline(" UtcDaliCubeTransitionCrossEffectStartTransition ");
422
423   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
424   ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
425
426   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
427   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
428   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
429   Actor rootActor = crossEffect.GetRoot();
430   Stage::GetCurrent().Add( rootActor );
431   crossEffect.SetCurrentImage( imageActor );
432   Actor cube0 = rootActor.GetChildAt(0);
433   Actor cube1 = rootActor.GetChildAt(1);
434
435   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
436   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
437
438   //check the cube rotation values and color values after different transitions
439   crossEffect.SetTargetImage( imageActor );
440   crossEffect.StartTransition(true);
441   Wait( application, TRANSITION_DURATION );
442   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
443   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
444   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
445   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
446
447
448   crossEffect.SetTargetImage( imageActor );
449   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
450   Wait( application, TRANSITION_DURATION );
451   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
452   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
453   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
454   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
455
456
457   crossEffect.SetTargetImage( imageActor );
458   crossEffect.StartTransition(false);
459   Wait( application, TRANSITION_DURATION );
460   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
461   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
462   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
463   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
464
465   crossEffect.SetTargetImage( imageActor );
466   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
467   Wait( application, TRANSITION_DURATION );
468   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
469   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
470   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
471   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
472   END_TEST;
473 }
474
475 int UtcDaliCubeTransitionFoldEffectStartTransition(void)
476 {
477   ToolkitTestApplication application;
478   tet_infoline(" UtcDaliCubeTransitionFoldEffectStartTransition ");
479
480   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
481   ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
482
483   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
484   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
485   Actor rootActor = foldEffect.GetRoot();
486   Stage::GetCurrent().Add( rootActor );
487   foldEffect.SetCurrentImage( imageActor );
488   Actor cube0 = rootActor.GetChildAt(0);
489   Actor cube1 = rootActor.GetChildAt(1);
490
491   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
492   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
493
494   //check the cube rotation values and color values after different transitions
495   foldEffect.SetTargetImage( imageActor );
496   foldEffect.StartTransition(true);
497   Wait( application, TRANSITION_DURATION );
498   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
499   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
500   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
501   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
502
503   foldEffect.SetTargetImage( imageActor );
504   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
505   Wait( application, TRANSITION_DURATION );
506   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
507   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
508   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
509   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
510
511
512   foldEffect.SetTargetImage( imageActor );
513   foldEffect.StartTransition(false);
514   Wait( application, TRANSITION_DURATION );
515   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
516   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
517   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
518   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(),fullBrightness, FLT_EPISILON, TEST_LOCATION );
519
520   foldEffect.SetTargetImage( imageActor );
521   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
522   Wait( application, TRANSITION_DURATION );
523   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
524   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
525   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
526   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
527   END_TEST;
528 }
529
530 int UtcDaliCubeTransitionEffectSignalTransitionCompleted(void)
531 {
532   ToolkitTestApplication application;
533   tet_infoline(" UtcDaliCubeTransitionEffectSignalTransitionCompleted ");
534
535   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
536   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
537   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
538   ImageActor thirdImageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40);
539
540   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
541   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
542   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
543   Actor rootActor = waveEffect.GetRoot();
544   Stage::GetCurrent().Add( rootActor );
545
546   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
547   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
548   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
549   rootActor = crossEffect.GetRoot();
550   Stage::GetCurrent().Add( rootActor );
551
552   CubeTransitionEffect foldEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
553   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
554   rootActor = foldEffect.GetRoot();
555   Stage::GetCurrent().Add( rootActor );
556
557   bool signalVerified = false;
558   CubeTransitionEffect currentEffect;
559   ImageActor actorTransitTo;
560   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
561   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
562   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
563   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
564
565   //check that the wave effect is used to transit to secondImageActor
566   currentEffect = waveEffect;
567   actorTransitTo = secondImageActor;
568   waveEffect.SetCurrentImage( firstImageActor );
569   waveEffect.SetTargetImage( secondImageActor );
570   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
571   Wait( application, TRANSITION_DURATION );
572   DALI_TEST_CHECK(callback.mSignalVerified);
573   callback.Reset();
574
575   //check that the wave effect is used to transit to thirdImageActor
576   actorTransitTo = thirdImageActor;
577   waveEffect.SetTargetImage( thirdImageActor );
578   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
579   Wait( application, TRANSITION_DURATION );
580   DALI_TEST_CHECK(callback.mSignalVerified);
581   callback.Reset();
582
583   //check that the cross effect is used to transit to secondImageActor
584   currentEffect = crossEffect;
585   actorTransitTo = secondImageActor;
586   crossEffect.SetCurrentImage( thirdImageActor );
587   crossEffect.SetTargetImage( secondImageActor );
588   crossEffect.StartTransition(true);
589   Wait( application, TRANSITION_DURATION );
590   DALI_TEST_CHECK(callback.mSignalVerified);
591   callback.Reset();
592
593   //check that the cross effect is used to transit to firstImageActor
594   actorTransitTo = firstImageActor;
595   crossEffect.SetTargetImage( firstImageActor );
596   crossEffect.StartTransition(false);
597   Wait( application, TRANSITION_DURATION );
598   DALI_TEST_CHECK(callback.mSignalVerified);
599   callback.Reset();
600
601   //check that the fold effect is used to transit to secondImageActor
602   currentEffect = foldEffect;
603   actorTransitTo = secondImageActor;
604   foldEffect.SetCurrentImage( firstImageActor );
605   foldEffect.SetTargetImage( secondImageActor );
606   foldEffect.StartTransition();
607   Wait( application, TRANSITION_DURATION );
608   DALI_TEST_CHECK( callback.mSignalVerified );
609   callback.Reset();
610
611   //check that the fold effect is used to transit to thirdImageActor
612   actorTransitTo = thirdImageActor;
613   foldEffect.SetTargetImage( thirdImageActor );
614   foldEffect.StartTransition( false );
615   Wait( application, TRANSITION_DURATION );
616   DALI_TEST_CHECK( callback.mSignalVerified );
617   END_TEST;
618 }
619
620 int UtcDaliCubeTransitionEffectPauseResumeTransition(void)
621 {
622   ToolkitTestApplication application;
623   tet_infoline(" UtcDaliCubeTransitionEffectPauseResumeTransition ");
624
625   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
626   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
627   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
628
629   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
630   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
631   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
632   Actor rootActor = waveEffect.GetRoot();
633   Stage::GetCurrent().Add( rootActor );
634
635   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
636   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
637   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
638   rootActor = crossEffect.GetRoot();
639   Stage::GetCurrent().Add( rootActor );
640
641   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
642   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
643   rootActor = crossEffect.GetRoot();
644   Stage::GetCurrent().Add( rootActor );
645
646   bool signalVerified = false;
647   CubeTransitionEffect currentEffect;
648   ImageActor actorTransitTo;
649   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
650   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
651   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
652   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
653
654   currentEffect = waveEffect;
655   actorTransitTo = secondImageActor;
656   waveEffect.SetCurrentImage( firstImageActor );
657   waveEffect.SetTargetImage( secondImageActor );
658   // start transition; transit for 0.5*duration; pause for 0.5*duration;
659   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
660   // only until now the transition finished signal can be received
661   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
662   Wait( application, TRANSITION_DURATION*0.5f );
663   DALI_TEST_CHECK(!callback.mSignalVerified);
664   waveEffect.PauseTransition();
665   Wait( application, TRANSITION_DURATION*0.5f );
666   DALI_TEST_CHECK(!callback.mSignalVerified);
667   waveEffect.ResumeTransition();
668   Wait( application, TRANSITION_DURATION*0.25f );
669   DALI_TEST_CHECK(!callback.mSignalVerified);
670   waveEffect.PauseTransition();
671   Wait( application, TRANSITION_DURATION*0.25f );
672   DALI_TEST_CHECK(!callback.mSignalVerified);
673   waveEffect.ResumeTransition();
674   Wait( application, TRANSITION_DURATION*0.25f );
675   DALI_TEST_CHECK(callback.mSignalVerified);
676   callback.Reset();
677
678   currentEffect = crossEffect;
679   actorTransitTo = firstImageActor;
680   crossEffect.SetCurrentImage( secondImageActor );
681   crossEffect.SetTargetImage( firstImageActor );
682   // start transition; transit for 0.25*duration; pause for 0.2*duration;
683   // resume for 0.5*duration; pause for 0.2*duration; resume for another 0.25*duration;
684   // only until now the transition finished signal can be received
685   crossEffect.StartTransition(false);
686   Wait( application, TRANSITION_DURATION*0.25f );
687   DALI_TEST_CHECK(!callback.mSignalVerified);
688   crossEffect.PauseTransition();
689   Wait( application, TRANSITION_DURATION*0.2f );
690   DALI_TEST_CHECK(!callback.mSignalVerified);
691   crossEffect.ResumeTransition();
692   Wait( application, TRANSITION_DURATION*0.5f );
693   DALI_TEST_CHECK(!callback.mSignalVerified);
694   crossEffect.PauseTransition();
695   Wait( application, TRANSITION_DURATION*0.2f );
696   DALI_TEST_CHECK(!callback.mSignalVerified);
697   crossEffect.ResumeTransition();
698   Wait( application, TRANSITION_DURATION*0.25f );
699   DALI_TEST_CHECK(callback.mSignalVerified);
700   callback.Reset();
701
702   currentEffect = foldEffect;
703   actorTransitTo = secondImageActor;
704   foldEffect.SetCurrentImage( firstImageActor );
705   foldEffect.SetTargetImage( secondImageActor );
706   // start transition; transit for 0.5*duration; pause for 0.5*duration;
707   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
708   // only until now the transition finished signal can be received
709   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
710   Wait( application, TRANSITION_DURATION*0.5f );
711   DALI_TEST_CHECK(!callback.mSignalVerified);
712   foldEffect.PauseTransition();
713   Wait( application, TRANSITION_DURATION*0.5f );
714   DALI_TEST_CHECK(!callback.mSignalVerified);
715   foldEffect.ResumeTransition();
716   Wait( application, TRANSITION_DURATION*0.25f );
717   DALI_TEST_CHECK(!callback.mSignalVerified);
718   foldEffect.PauseTransition();
719   Wait( application, TRANSITION_DURATION*0.25f );
720   DALI_TEST_CHECK(!callback.mSignalVerified);
721   foldEffect.ResumeTransition();
722   Wait( application, TRANSITION_DURATION*0.25f );
723   DALI_TEST_CHECK(callback.mSignalVerified);
724   END_TEST;
725 }
726
727 int UtcDaliCubeTransitionWaveEffectStopTransition(void)
728 {
729   ToolkitTestApplication application;
730   tet_infoline(" UtcDaliCubeTransitionWaveEffectStopTransition ");
731
732   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
733   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
734   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
735
736   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
737   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
738   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
739   Actor rootActor = waveEffect.GetRoot();
740   Stage::GetCurrent().Add( rootActor );
741   Actor cube = rootActor.GetChildAt(0);
742   waveEffect.SetCurrentImage( firstImageActor );
743
744   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
745   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
746
747   //check the cube rotation value and color values after stopping different transitions in the middle
748   waveEffect.SetTargetImage( secondImageActor );
749   waveEffect.StartTransition(true);
750   Wait( application, TRANSITION_DURATION*0.2f );
751   waveEffect.StopTransition();
752   application.SendNotification();
753   application.Render(RENDER_FRAME_INTERVAL);
754   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
755   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
756   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
757
758   waveEffect.SetTargetImage( firstImageActor );
759   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
760   Wait( application, TRANSITION_DURATION*0.4f );
761   waveEffect.StopTransition();
762   application.SendNotification();
763   application.Render(RENDER_FRAME_INTERVAL);
764   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
765   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
766   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
767
768   waveEffect.SetTargetImage( secondImageActor );
769   waveEffect.StartTransition(false);
770   Wait( application, TRANSITION_DURATION*0.6f );
771   waveEffect.StopTransition();
772   application.SendNotification();
773   application.Render(RENDER_FRAME_INTERVAL);
774   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
775   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
776   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
777
778   waveEffect.SetTargetImage( firstImageActor );
779   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
780   Wait( application, TRANSITION_DURATION*0.8f );
781   waveEffect.StopTransition();
782   application.SendNotification();
783   application.Render(RENDER_FRAME_INTERVAL);
784   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
785   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
786   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
787   END_TEST;
788 }
789
790 int UtcDaliCubeTransitionCrossEffectStopTransition(void)
791 {
792   ToolkitTestApplication application;
793   tet_infoline(" UtcDaliCubeTransitionCrossEffectStopTransition ");
794
795   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
796   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
797   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
798
799   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
800   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
801   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
802   Actor rootActor = crossEffect.GetRoot();
803   Stage::GetCurrent().Add( rootActor );
804   crossEffect.SetCurrentImage( firstImageActor );
805   Actor cube0 = rootActor.GetChildAt(0);
806   Actor cube1 = rootActor.GetChildAt(1);
807
808   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
809   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
810
811   //check the cube rotation values and color values after stop the different transitions in the middle
812   crossEffect.SetTargetImage( secondImageActor );
813   crossEffect.StartTransition(true);
814   Wait( application, TRANSITION_DURATION*0.2f );
815   crossEffect.StopTransition();
816   application.SendNotification();
817   application.Render(RENDER_FRAME_INTERVAL);
818   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
819   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
820
821   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
822   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
823
824   crossEffect.SetTargetImage( firstImageActor );
825   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
826   Wait( application, TRANSITION_DURATION*0.4f );
827   crossEffect.StopTransition();
828   application.SendNotification();
829   application.Render(RENDER_FRAME_INTERVAL);
830   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
831   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
832   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
833   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
834
835   crossEffect.SetTargetImage( secondImageActor );
836   crossEffect.StartTransition(false);
837   Wait( application, TRANSITION_DURATION*0.6f );
838   crossEffect.StopTransition();
839   application.SendNotification();
840   application.Render(RENDER_FRAME_INTERVAL);
841   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
842   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
843   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
844   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
845
846   crossEffect.SetTargetImage( firstImageActor );
847   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
848   Wait( application, TRANSITION_DURATION*0.8f );
849   crossEffect.StopTransition();
850   application.SendNotification();
851   application.Render(RENDER_FRAME_INTERVAL);
852   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
853   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
854   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
855   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
856   END_TEST;
857 }
858
859 int UtcDaliCubeTransitionFoldEffectStopTransition(void)
860 {
861   ToolkitTestApplication application;
862   tet_infoline(" UtcDaliCubeTransitionFoldEffectStopTransition ");
863
864   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
865   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
866   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
867
868   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
869   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
870   Actor rootActor = foldEffect.GetRoot();
871   Stage::GetCurrent().Add( rootActor );
872   foldEffect.SetCurrentImage( firstImageActor );
873   Actor cube0 = rootActor.GetChildAt(0);
874   Actor cube1 = rootActor.GetChildAt(1);
875
876   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
877   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
878
879   //check the cube rotation values and color values after stop the different transitions in the middle
880   foldEffect.SetTargetImage( secondImageActor );
881   foldEffect.StartTransition(true);
882   Wait( application, TRANSITION_DURATION*0.2f );
883   foldEffect.StopTransition();
884   application.SendNotification();
885   application.Render(RENDER_FRAME_INTERVAL);
886   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
887   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
888   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
889   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
890
891   foldEffect.SetTargetImage( firstImageActor );
892   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
893   Wait( application, TRANSITION_DURATION*0.4f );
894   foldEffect.StopTransition();
895   application.SendNotification();
896   application.Render(RENDER_FRAME_INTERVAL);
897   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
898   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
899   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
900   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
901
902   foldEffect.SetTargetImage( secondImageActor );
903   foldEffect.StartTransition(false);
904   Wait( application, TRANSITION_DURATION*0.6f );
905   foldEffect.StopTransition();
906   application.SendNotification();
907   application.Render(RENDER_FRAME_INTERVAL);
908   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
909   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
910   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
911   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
912
913   foldEffect.SetTargetImage( firstImageActor );
914   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
915   Wait( application, TRANSITION_DURATION*0.8f );
916   foldEffect.StopTransition();
917   application.SendNotification();
918   application.Render(RENDER_FRAME_INTERVAL);
919   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
920   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
921   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
922   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
923   END_TEST;
924 }