[dali_1.0.14] Merge branch 'tizen'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-unmanaged / 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 ROTATION_EPSILON = 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 = NULL;
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 = NULL;
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 = NULL;
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), ROTATION_EPSILON, TEST_LOCATION  );
392   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == halfBrightness );
393   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == fullBrightness );
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), ROTATION_EPSILON, TEST_LOCATION  );
399   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == fullBrightness );
400   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == halfBrightness );
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), ROTATION_EPSILON, TEST_LOCATION  );
406   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == halfBrightness );
407   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == fullBrightness );
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), ROTATION_EPSILON, TEST_LOCATION  );
413   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == fullBrightness );
414   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == halfBrightness );
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), ROTATION_EPSILON, TEST_LOCATION  );
443   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
444   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
445   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
446
447   crossEffect.SetTargetImage( imageActor );
448   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
449   Wait( application, TRANSITION_DURATION );
450   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
451   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
452   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
453   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
454
455
456   crossEffect.SetTargetImage( imageActor );
457   crossEffect.StartTransition(false);
458   Wait( application, TRANSITION_DURATION );
459   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
460   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
461   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
462   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
463
464   crossEffect.SetTargetImage( imageActor );
465   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
466   Wait( application, TRANSITION_DURATION );
467   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
468   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
469   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
470   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
471   END_TEST;
472 }
473
474 int UtcDaliCubeTransitionFoldEffectStartTransition(void)
475 {
476   ToolkitTestApplication application;
477   tet_infoline(" UtcDaliCubeTransitionFoldEffectStartTransition ");
478
479   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
480   ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
481
482   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
483   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
484   Actor rootActor = foldEffect.GetRoot();
485   Stage::GetCurrent().Add( rootActor );
486   foldEffect.SetCurrentImage( imageActor );
487   Actor cube0 = rootActor.GetChildAt(0);
488   Actor cube1 = rootActor.GetChildAt(1);
489
490   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
491   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
492
493   //check the cube rotation values and color values after different transitions
494   foldEffect.SetTargetImage( imageActor );
495   foldEffect.StartTransition(true);
496   Wait( application, TRANSITION_DURATION );
497   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
498   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
499   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
500   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
501
502   foldEffect.SetTargetImage( imageActor );
503   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
504   Wait( application, TRANSITION_DURATION );
505   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
506   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
507   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
508   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
509
510
511   foldEffect.SetTargetImage( imageActor );
512   foldEffect.StartTransition(false);
513   Wait( application, TRANSITION_DURATION );
514   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
515   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
516   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
517   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
518
519   foldEffect.SetTargetImage( imageActor );
520   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
521   Wait( application, TRANSITION_DURATION );
522   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
523   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
524   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
525   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
526   END_TEST;
527 }
528
529 int UtcDaliCubeTransitionEffectSignalTransitionCompleted(void)
530 {
531   ToolkitTestApplication application;
532   tet_infoline(" UtcDaliCubeTransitionEffectSignalTransitionCompleted ");
533
534   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
535   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
536   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
537   ImageActor thirdImageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40);
538
539   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
540   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
541   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
542   Actor rootActor = waveEffect.GetRoot();
543   Stage::GetCurrent().Add( rootActor );
544
545   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
546   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
547   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
548   rootActor = crossEffect.GetRoot();
549   Stage::GetCurrent().Add( rootActor );
550
551   CubeTransitionEffect foldEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
552   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
553   rootActor = foldEffect.GetRoot();
554   Stage::GetCurrent().Add( rootActor );
555
556   bool signalVerified = false;
557   CubeTransitionEffect currentEffect;
558   ImageActor actorTransitTo;
559   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
560   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
561   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
562   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
563
564   //check that the wave effect is used to transit to secondImageActor
565   currentEffect = waveEffect;
566   actorTransitTo = secondImageActor;
567   waveEffect.SetCurrentImage( firstImageActor );
568   waveEffect.SetTargetImage( secondImageActor );
569   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
570   Wait( application, TRANSITION_DURATION );
571   DALI_TEST_CHECK(callback.mSignalVerified);
572   callback.Reset();
573
574   //check that the wave effect is used to transit to thirdImageActor
575   actorTransitTo = thirdImageActor;
576   waveEffect.SetTargetImage( thirdImageActor );
577   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
578   Wait( application, TRANSITION_DURATION );
579   DALI_TEST_CHECK(callback.mSignalVerified);
580   callback.Reset();
581
582   //check that the cross effect is used to transit to secondImageActor
583   currentEffect = crossEffect;
584   actorTransitTo = secondImageActor;
585   crossEffect.SetCurrentImage( thirdImageActor );
586   crossEffect.SetTargetImage( secondImageActor );
587   crossEffect.StartTransition(true);
588   Wait( application, TRANSITION_DURATION );
589   DALI_TEST_CHECK(callback.mSignalVerified);
590   callback.Reset();
591
592   //check that the cross effect is used to transit to firstImageActor
593   actorTransitTo = firstImageActor;
594   crossEffect.SetTargetImage( firstImageActor );
595   crossEffect.StartTransition(false);
596   Wait( application, TRANSITION_DURATION );
597   DALI_TEST_CHECK(callback.mSignalVerified);
598   callback.Reset();
599
600   //check that the fold effect is used to transit to secondImageActor
601   currentEffect = foldEffect;
602   actorTransitTo = secondImageActor;
603   foldEffect.SetCurrentImage( firstImageActor );
604   foldEffect.SetTargetImage( secondImageActor );
605   foldEffect.StartTransition();
606   Wait( application, TRANSITION_DURATION );
607   DALI_TEST_CHECK( callback.mSignalVerified );
608   callback.Reset();
609
610   //check that the fold effect is used to transit to thirdImageActor
611   actorTransitTo = thirdImageActor;
612   foldEffect.SetTargetImage( thirdImageActor );
613   foldEffect.StartTransition( false );
614   Wait( application, TRANSITION_DURATION );
615   DALI_TEST_CHECK( callback.mSignalVerified );
616   END_TEST;
617 }
618
619 int UtcDaliCubeTransitionEffectPauseResumeTransition(void)
620 {
621   ToolkitTestApplication application;
622   tet_infoline(" UtcDaliCubeTransitionEffectPauseResumeTransition ");
623
624   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
625   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
626   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
627
628   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
629   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
630   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
631   Actor rootActor = waveEffect.GetRoot();
632   Stage::GetCurrent().Add( rootActor );
633
634   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
635   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
636   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
637   rootActor = crossEffect.GetRoot();
638   Stage::GetCurrent().Add( rootActor );
639
640   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
641   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
642   rootActor = crossEffect.GetRoot();
643   Stage::GetCurrent().Add( rootActor );
644
645   bool signalVerified = false;
646   CubeTransitionEffect currentEffect;
647   ImageActor actorTransitTo;
648   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
649   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
650   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
651   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
652
653   currentEffect = waveEffect;
654   actorTransitTo = secondImageActor;
655   waveEffect.SetCurrentImage( firstImageActor );
656   waveEffect.SetTargetImage( secondImageActor );
657   // start transition; transit for 0.5*duration; pause for 0.5*duration;
658   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
659   // only until now the transition finished signal can be received
660   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
661   Wait( application, TRANSITION_DURATION*0.5f );
662   DALI_TEST_CHECK(!callback.mSignalVerified);
663   waveEffect.PauseTransition();
664   Wait( application, TRANSITION_DURATION*0.5f );
665   DALI_TEST_CHECK(!callback.mSignalVerified);
666   waveEffect.ResumeTransition();
667   Wait( application, TRANSITION_DURATION*0.25f );
668   DALI_TEST_CHECK(!callback.mSignalVerified);
669   waveEffect.PauseTransition();
670   Wait( application, TRANSITION_DURATION*0.25f );
671   DALI_TEST_CHECK(!callback.mSignalVerified);
672   waveEffect.ResumeTransition();
673   Wait( application, TRANSITION_DURATION*0.25f );
674   DALI_TEST_CHECK(callback.mSignalVerified);
675   callback.Reset();
676
677   currentEffect = crossEffect;
678   actorTransitTo = firstImageActor;
679   crossEffect.SetCurrentImage( secondImageActor );
680   crossEffect.SetTargetImage( firstImageActor );
681   // start transition; transit for 0.25*duration; pause for 0.2*duration;
682   // resume for 0.5*duration; pause for 0.2*duration; resume for another 0.25*duration;
683   // only until now the transition finished signal can be received
684   crossEffect.StartTransition(false);
685   Wait( application, TRANSITION_DURATION*0.25f );
686   DALI_TEST_CHECK(!callback.mSignalVerified);
687   crossEffect.PauseTransition();
688   Wait( application, TRANSITION_DURATION*0.2f );
689   DALI_TEST_CHECK(!callback.mSignalVerified);
690   crossEffect.ResumeTransition();
691   Wait( application, TRANSITION_DURATION*0.5f );
692   DALI_TEST_CHECK(!callback.mSignalVerified);
693   crossEffect.PauseTransition();
694   Wait( application, TRANSITION_DURATION*0.2f );
695   DALI_TEST_CHECK(!callback.mSignalVerified);
696   crossEffect.ResumeTransition();
697   Wait( application, TRANSITION_DURATION*0.25f );
698   DALI_TEST_CHECK(callback.mSignalVerified);
699   callback.Reset();
700
701   currentEffect = foldEffect;
702   actorTransitTo = secondImageActor;
703   foldEffect.SetCurrentImage( firstImageActor );
704   foldEffect.SetTargetImage( secondImageActor );
705   // start transition; transit for 0.5*duration; pause for 0.5*duration;
706   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
707   // only until now the transition finished signal can be received
708   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
709   Wait( application, TRANSITION_DURATION*0.5f );
710   DALI_TEST_CHECK(!callback.mSignalVerified);
711   foldEffect.PauseTransition();
712   Wait( application, TRANSITION_DURATION*0.5f );
713   DALI_TEST_CHECK(!callback.mSignalVerified);
714   foldEffect.ResumeTransition();
715   Wait( application, TRANSITION_DURATION*0.25f );
716   DALI_TEST_CHECK(!callback.mSignalVerified);
717   foldEffect.PauseTransition();
718   Wait( application, TRANSITION_DURATION*0.25f );
719   DALI_TEST_CHECK(!callback.mSignalVerified);
720   foldEffect.ResumeTransition();
721   Wait( application, TRANSITION_DURATION*0.25f );
722   DALI_TEST_CHECK(callback.mSignalVerified);
723   END_TEST;
724 }
725
726 int UtcDaliCubeTransitionWaveEffectStopTransition(void)
727 {
728   ToolkitTestApplication application;
729   tet_infoline(" UtcDaliCubeTransitionWaveEffectStopTransition ");
730
731   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
732   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
733   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
734
735   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
736   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
737   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
738   Actor rootActor = waveEffect.GetRoot();
739   Stage::GetCurrent().Add( rootActor );
740   Actor cube = rootActor.GetChildAt(0);
741   waveEffect.SetCurrentImage( firstImageActor );
742
743   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
744   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
745
746   //check the cube rotation value and color values after stopping different transitions in the middle
747   waveEffect.SetTargetImage( secondImageActor );
748   waveEffect.StartTransition(true);
749   Wait( application, TRANSITION_DURATION*0.2f );
750   waveEffect.StopTransition();
751   application.SendNotification();
752   application.Render(RENDER_FRAME_INTERVAL);
753   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
754   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == halfBrightness );
755   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == fullBrightness );
756
757   waveEffect.SetTargetImage( firstImageActor );
758   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
759   Wait( application, TRANSITION_DURATION*0.4f );
760   waveEffect.StopTransition();
761   application.SendNotification();
762   application.Render(RENDER_FRAME_INTERVAL);
763   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
764   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == fullBrightness );
765   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == halfBrightness );
766
767   waveEffect.SetTargetImage( secondImageActor );
768   waveEffect.StartTransition(false);
769   Wait( application, TRANSITION_DURATION*0.6f );
770   waveEffect.StopTransition();
771   application.SendNotification();
772   application.Render(RENDER_FRAME_INTERVAL);
773   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
774   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == halfBrightness );
775   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == fullBrightness );
776
777   waveEffect.SetTargetImage( firstImageActor );
778   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
779   Wait( application, TRANSITION_DURATION*0.8f );
780   waveEffect.StopTransition();
781   application.SendNotification();
782   application.Render(RENDER_FRAME_INTERVAL);
783   DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
784   DALI_TEST_CHECK( cube.GetChildAt(0).GetCurrentColor() == fullBrightness );
785   DALI_TEST_CHECK( cube.GetChildAt(1).GetCurrentColor() == halfBrightness );
786   END_TEST;
787 }
788
789 int UtcDaliCubeTransitionCrossEffectStopTransition(void)
790 {
791   ToolkitTestApplication application;
792   tet_infoline(" UtcDaliCubeTransitionCrossEffectStopTransition ");
793
794   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
795   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
796   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
797
798   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
799   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
800   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
801   Actor rootActor = crossEffect.GetRoot();
802   Stage::GetCurrent().Add( rootActor );
803   crossEffect.SetCurrentImage( firstImageActor );
804   Actor cube0 = rootActor.GetChildAt(0);
805   Actor cube1 = rootActor.GetChildAt(1);
806
807   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
808   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
809
810   //check the cube rotation values and color values after stop the different transitions in the middle
811   crossEffect.SetTargetImage( secondImageActor );
812   crossEffect.StartTransition(true);
813   Wait( application, TRANSITION_DURATION*0.2f );
814   crossEffect.StopTransition();
815   application.SendNotification();
816   application.Render(RENDER_FRAME_INTERVAL);
817   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
818   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
819
820   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
821   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
822
823   crossEffect.SetTargetImage( firstImageActor );
824   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
825   Wait( application, TRANSITION_DURATION*0.4f );
826   crossEffect.StopTransition();
827   application.SendNotification();
828   application.Render(RENDER_FRAME_INTERVAL);
829   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
830   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
831   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
832   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
833
834   crossEffect.SetTargetImage( secondImageActor );
835   crossEffect.StartTransition(false);
836   Wait( application, TRANSITION_DURATION*0.6f );
837   crossEffect.StopTransition();
838   application.SendNotification();
839   application.Render(RENDER_FRAME_INTERVAL);
840   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
841   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
842   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
843   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
844
845   crossEffect.SetTargetImage( firstImageActor );
846   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
847   Wait( application, TRANSITION_DURATION*0.8f );
848   crossEffect.StopTransition();
849   application.SendNotification();
850   application.Render(RENDER_FRAME_INTERVAL);
851   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
852   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::XAXIS), ROTATION_EPSILON, TEST_LOCATION  );
853   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
854   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
855   END_TEST;
856 }
857
858 int UtcDaliCubeTransitionFoldEffectStopTransition(void)
859 {
860   ToolkitTestApplication application;
861   tet_infoline(" UtcDaliCubeTransitionFoldEffectStopTransition ");
862
863   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
864   ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
865   ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
866
867   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
868   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
869   Actor rootActor = foldEffect.GetRoot();
870   Stage::GetCurrent().Add( rootActor );
871   foldEffect.SetCurrentImage( firstImageActor );
872   Actor cube0 = rootActor.GetChildAt(0);
873   Actor cube1 = rootActor.GetChildAt(1);
874
875   Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
876   Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
877
878   //check the cube rotation values and color values after stop the different transitions in the middle
879   foldEffect.SetTargetImage( secondImageActor );
880   foldEffect.StartTransition(true);
881   Wait( application, TRANSITION_DURATION*0.2f );
882   foldEffect.StopTransition();
883   application.SendNotification();
884   application.Render(RENDER_FRAME_INTERVAL);
885   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
886   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
887   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
888   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
889
890   foldEffect.SetTargetImage( firstImageActor );
891   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
892   Wait( application, TRANSITION_DURATION*0.4f );
893   foldEffect.StopTransition();
894   application.SendNotification();
895   application.Render(RENDER_FRAME_INTERVAL);
896   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
897   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
898   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
899   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
900
901   foldEffect.SetTargetImage( secondImageActor );
902   foldEffect.StartTransition(false);
903   Wait( application, TRANSITION_DURATION*0.6f );
904   foldEffect.StopTransition();
905   application.SendNotification();
906   application.Render(RENDER_FRAME_INTERVAL);
907   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
908   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
909   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == halfBrightness );
910   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == fullBrightness );
911
912   foldEffect.SetTargetImage( firstImageActor );
913   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
914   Wait( application, TRANSITION_DURATION*0.8f );
915   foldEffect.StopTransition();
916   application.SendNotification();
917   application.Render(RENDER_FRAME_INTERVAL);
918   DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
919   DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f,  Vector3::YAXIS), ROTATION_EPSILON, TEST_LOCATION  );
920   DALI_TEST_CHECK( cube0.GetChildAt(0).GetCurrentColor() == fullBrightness );
921   DALI_TEST_CHECK( cube0.GetChildAt(1).GetCurrentColor() == halfBrightness );
922   END_TEST;
923 }