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