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