Merge "Added config section to stylesheet" into devel/master
[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/public-api/images/buffer-image.h>
27 #include <dali/devel-api/adaptor-framework/image-loading.h>
28 #include <dali/devel-api/adaptor-framework/pixel-buffer.h>
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   Devel::PixelBuffer pixelBuffer = LoadImageFromFile(TEST_RESOURCE_DIR "/gallery-small-1.jpg");
435   PixelData pixelData = Devel::PixelBuffer::Convert( pixelBuffer );
436   Texture texture = Texture::New( TextureType::TEXTURE_2D, pixelData.GetPixelFormat(), pixelData.GetWidth(), pixelData.GetHeight() );
437   texture.Upload( pixelData );
438
439   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS );
440   waveEffect.SetSize( VIEW_AREA_SIZE );
441   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
442   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
443   waveEffect.SetCurrentTexture( texture );
444
445   Stage::GetCurrent().Add( waveEffect );
446
447   application.SendNotification();
448   application.Render();
449
450   waveEffect.StartTransition( true );
451
452   Actor cube = waveEffect.GetChildAt(0).GetChildAt(0);
453
454   //check the cube rotation value and color values just before the end of different transitions
455   waveEffect.SetTargetTexture( texture );
456   Wait( application, TRANSITION_BEFORE_END_DURATION );
457   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
458   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
459   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
460
461   waveEffect.SetTargetTexture( texture );
462   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
463   Wait( application, TRANSITION_BEFORE_END_DURATION );
464   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
465   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
466   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
467
468   waveEffect.SetTargetTexture( texture );
469   waveEffect.StartTransition(false);
470   Wait( application, TRANSITION_BEFORE_END_DURATION );
471   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
472   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
473   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
474
475   waveEffect.SetTargetTexture( texture );
476   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
477   Wait( application, TRANSITION_BEFORE_END_DURATION );
478   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
479   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
480   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
481   END_TEST;
482 }
483
484 int UtcDaliCubeTransitionCrossEffectStartTransition(void)
485 {
486   ToolkitTestApplication application;
487   tet_infoline(" UtcDaliCubeTransitionCrossEffectStartTransition ");
488
489   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
490
491   Devel::PixelBuffer pixelBuffer = LoadImageFromFile(TEST_RESOURCE_DIR "/gallery-small-1.jpg");
492   PixelData pixelData = Devel::PixelBuffer::Convert( pixelBuffer );
493   Texture texture = Texture::New( TextureType::TEXTURE_2D, pixelData.GetPixelFormat(), pixelData.GetWidth(), pixelData.GetHeight() );
494   texture.Upload( pixelData );
495
496   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS );
497   crossEffect.SetSize( VIEW_AREA_SIZE );
498   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
499   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
500   crossEffect.SetCurrentTexture( texture );
501   crossEffect.SetTargetTexture( texture );
502
503   Stage::GetCurrent().Add( crossEffect );
504
505   application.SendNotification();
506   application.Render();
507
508   crossEffect.StartTransition(true);
509
510   Actor cube0 = crossEffect.GetChildAt(0).GetChildAt(0);
511   Actor cube1 = crossEffect.GetChildAt(0).GetChildAt(1);
512
513   //check the cube rotation value and color values just before the end of different transitions
514   Wait( application, TRANSITION_BEFORE_END_DURATION );
515   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION );
516   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::XAXIS), EPISILON, TEST_LOCATION );
517   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
518   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
519
520
521   crossEffect.SetTargetTexture( texture );
522   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
523   Wait( application, TRANSITION_BEFORE_END_DURATION );
524   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION );
525   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::XAXIS), EPISILON, TEST_LOCATION );
526   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
527   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
528
529
530   crossEffect.SetTargetTexture( texture );
531   crossEffect.StartTransition(false);
532   Wait( application, TRANSITION_BEFORE_END_DURATION );
533   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
534   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::XAXIS), EPISILON, TEST_LOCATION  );
535   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
536   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
537
538   crossEffect.SetTargetTexture( texture );
539   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
540   Wait( application, TRANSITION_BEFORE_END_DURATION );
541   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION );
542   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::XAXIS), EPISILON, TEST_LOCATION );
543   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
544   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
545   END_TEST;
546 }
547
548 int UtcDaliCubeTransitionFoldEffectStartTransition(void)
549 {
550   ToolkitTestApplication application;
551   tet_infoline(" UtcDaliCubeTransitionFoldEffectStartTransition ");
552
553   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
554   Texture texture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 40, 40 );
555   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS );
556   foldEffect.SetSize( VIEW_AREA_SIZE );
557   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
558   foldEffect.SetCurrentTexture( texture );
559   foldEffect.SetTargetTexture( texture );
560
561   Stage::GetCurrent().Add( foldEffect );
562
563   application.SendNotification();
564   application.Render();
565
566   foldEffect.StartTransition(true);
567
568   Actor cube0 = foldEffect.GetChildAt(0).GetChildAt(0);
569   Actor cube1 = foldEffect.GetChildAt(0).GetChildAt(1);
570
571   //check the cube rotation value and color values just before the end of different transitions
572   Wait( application, TRANSITION_BEFORE_END_DURATION );
573   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
574   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
575   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
576   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
577
578   foldEffect.SetTargetTexture( texture );
579   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
580   Wait( application, TRANSITION_BEFORE_END_DURATION );
581   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
582   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
583   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
584   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
585
586
587   foldEffect.SetTargetTexture( texture );
588   foldEffect.StartTransition(false);
589   Wait( application, TRANSITION_BEFORE_END_DURATION );
590   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
591   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
592   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
593   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(),FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
594
595   foldEffect.SetTargetTexture( texture );
596   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
597   Wait( application, TRANSITION_BEFORE_END_DURATION );
598   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
599   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90,  Vector3::YAXIS), EPISILON, TEST_LOCATION  );
600   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION );
601   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION );
602   END_TEST;
603 }
604
605 int UtcDaliCubeTransitionEffectSignalTransitionCompleted(void)
606 {
607   ToolkitTestApplication application;
608   tet_infoline(" UtcDaliCubeTransitionEffectSignalTransitionCompleted ");
609
610   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
611   Texture firstTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 30, 30 );
612   Texture secondTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 20, 20 );
613   Texture thirdTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 40, 40 );
614
615   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS );
616   waveEffect.SetSize( VIEW_AREA_SIZE );
617   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
618   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
619   Stage::GetCurrent().Add( waveEffect );
620
621   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS );
622   crossEffect.SetSize( VIEW_AREA_SIZE );
623   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
624   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
625   Stage::GetCurrent().Add( crossEffect );
626
627   CubeTransitionEffect foldEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS );
628   foldEffect.SetSize( VIEW_AREA_SIZE );
629   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
630   Stage::GetCurrent().Add( foldEffect );
631
632   bool signalVerified = false;
633   CubeTransitionEffect currentEffect;
634   Texture actorTransitTo;
635   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
636   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
637   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
638   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
639
640   //check that the wave effect is used to transit to secondTexture
641   currentEffect = waveEffect;
642   actorTransitTo = secondTexture;
643   waveEffect.SetCurrentTexture( firstTexture );
644   waveEffect.SetTargetTexture( secondTexture );
645   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
646   Wait( application, TRANSITION_DURATION );
647   DALI_TEST_CHECK(callback.mSignalVerified);
648   callback.Reset();
649
650   //check that the wave effect is used to transit to thirdTexture
651   actorTransitTo = thirdTexture;
652   waveEffect.SetTargetTexture( thirdTexture );
653   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
654   Wait( application, TRANSITION_DURATION );
655   DALI_TEST_CHECK(callback.mSignalVerified);
656   callback.Reset();
657
658   //check that the cross effect is used to transit to secondTexture
659   currentEffect = crossEffect;
660   actorTransitTo = secondTexture;
661   crossEffect.SetCurrentTexture( thirdTexture );
662   crossEffect.SetTargetTexture( secondTexture );
663   crossEffect.StartTransition(true);
664   Wait( application, TRANSITION_DURATION );
665   DALI_TEST_CHECK(callback.mSignalVerified);
666   callback.Reset();
667
668   //check that the cross effect is used to transit to firstTexture
669   actorTransitTo = firstTexture;
670   crossEffect.SetTargetTexture( firstTexture );
671   crossEffect.StartTransition(false);
672   Wait( application, TRANSITION_DURATION );
673   DALI_TEST_CHECK(callback.mSignalVerified);
674   callback.Reset();
675
676   //check that the fold effect is used to transit to secondTexture
677   currentEffect = foldEffect;
678   actorTransitTo = secondTexture;
679   foldEffect.SetCurrentTexture( firstTexture );
680   foldEffect.SetTargetTexture( secondTexture );
681   foldEffect.StartTransition();
682   Wait( application, TRANSITION_DURATION );
683   DALI_TEST_CHECK( callback.mSignalVerified );
684   callback.Reset();
685
686   //check that the fold effect is used to transit to thirdTexture
687   actorTransitTo = thirdTexture;
688   foldEffect.SetTargetTexture( thirdTexture );
689   foldEffect.StartTransition( false );
690   Wait( application, TRANSITION_DURATION );
691   DALI_TEST_CHECK( callback.mSignalVerified );
692   END_TEST;
693 }
694
695 int UtcDaliCubeTransitionEffectPauseResumeTransition(void)
696 {
697   ToolkitTestApplication application;
698   tet_infoline(" UtcDaliCubeTransitionEffectPauseResumeTransition ");
699
700   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
701   Texture firstTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 30, 30 );
702   Texture secondTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 20, 20 );
703
704   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS );
705   waveEffect.SetSize( VIEW_AREA_SIZE );
706   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
707   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
708   Stage::GetCurrent().Add( waveEffect );
709
710   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS );
711   crossEffect.SetSize( VIEW_AREA_SIZE );
712   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
713   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
714   Stage::GetCurrent().Add( crossEffect );
715
716   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS );
717   foldEffect.SetSize( VIEW_AREA_SIZE );
718   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
719   Stage::GetCurrent().Add( foldEffect );
720
721   bool signalVerified = false;
722   CubeTransitionEffect currentEffect;
723   Texture actorTransitTo;
724   TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
725   waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
726   crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
727   foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
728
729   currentEffect = waveEffect;
730   actorTransitTo = secondTexture;
731   waveEffect.SetCurrentTexture( firstTexture );
732   waveEffect.SetTargetTexture( secondTexture );
733   // start transition; transit for 0.5*duration; pause for 0.5*duration;
734   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
735   // only until now the transition finished signal can be received
736   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
737   Wait( application, TRANSITION_DURATION*0.5f );
738   DALI_TEST_CHECK(!callback.mSignalVerified);
739   waveEffect.PauseTransition();
740   Wait( application, TRANSITION_DURATION*0.5f );
741   DALI_TEST_CHECK(!callback.mSignalVerified);
742   waveEffect.ResumeTransition();
743   Wait( application, TRANSITION_DURATION*0.25f );
744   DALI_TEST_CHECK(!callback.mSignalVerified);
745   waveEffect.PauseTransition();
746   Wait( application, TRANSITION_DURATION*0.25f );
747   DALI_TEST_CHECK(!callback.mSignalVerified);
748   waveEffect.ResumeTransition();
749   Wait( application, TRANSITION_DURATION*0.25f );
750   DALI_TEST_CHECK(callback.mSignalVerified);
751   callback.Reset();
752
753   currentEffect = crossEffect;
754   actorTransitTo = firstTexture;
755   crossEffect.SetCurrentTexture( secondTexture );
756   crossEffect.SetTargetTexture( firstTexture );
757   // start transition; transit for 0.25*duration; pause for 0.2*duration;
758   // resume for 0.5*duration; pause for 0.2*duration; resume for another 0.25*duration;
759   // only until now the transition finished signal can be received
760   crossEffect.StartTransition(false);
761   Wait( application, TRANSITION_DURATION*0.25f );
762   DALI_TEST_CHECK(!callback.mSignalVerified);
763   crossEffect.PauseTransition();
764   Wait( application, TRANSITION_DURATION*0.2f );
765   DALI_TEST_CHECK(!callback.mSignalVerified);
766   crossEffect.ResumeTransition();
767   Wait( application, TRANSITION_DURATION*0.5f );
768   DALI_TEST_CHECK(!callback.mSignalVerified);
769   crossEffect.PauseTransition();
770   Wait( application, TRANSITION_DURATION*0.2f );
771   DALI_TEST_CHECK(!callback.mSignalVerified);
772   crossEffect.ResumeTransition();
773   Wait( application, TRANSITION_DURATION*0.25f );
774   DALI_TEST_CHECK(callback.mSignalVerified);
775   callback.Reset();
776
777   currentEffect = foldEffect;
778   actorTransitTo = secondTexture;
779   foldEffect.SetCurrentTexture( firstTexture );
780   foldEffect.SetTargetTexture( secondTexture );
781   // start transition; transit for 0.5*duration; pause for 0.5*duration;
782   // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
783   // only until now the transition finished signal can be received
784   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
785   Wait( application, TRANSITION_DURATION*0.5f );
786   DALI_TEST_CHECK(!callback.mSignalVerified);
787   foldEffect.PauseTransition();
788   Wait( application, TRANSITION_DURATION*0.5f );
789   DALI_TEST_CHECK(!callback.mSignalVerified);
790   foldEffect.ResumeTransition();
791   Wait( application, TRANSITION_DURATION*0.25f );
792   DALI_TEST_CHECK(!callback.mSignalVerified);
793   foldEffect.PauseTransition();
794   Wait( application, TRANSITION_DURATION*0.25f );
795   DALI_TEST_CHECK(!callback.mSignalVerified);
796   foldEffect.ResumeTransition();
797   Wait( application, TRANSITION_DURATION*0.25f );
798   DALI_TEST_CHECK(callback.mSignalVerified);
799   END_TEST;
800 }
801
802 int UtcDaliCubeTransitionWaveEffectStopTransition(void)
803 {
804   ToolkitTestApplication application;
805   tet_infoline(" UtcDaliCubeTransitionWaveEffectStopTransition ");
806
807   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
808   Texture firstTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 30, 30 );
809   Texture secondTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 20, 20 );
810
811   CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS );
812   waveEffect.SetSize( VIEW_AREA_SIZE );
813   waveEffect.SetTransitionDuration( TRANSITION_DURATION );
814   waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
815   waveEffect.SetCurrentTexture( firstTexture );
816   waveEffect.SetTargetTexture( secondTexture );
817
818   Stage::GetCurrent().Add( waveEffect );
819
820   application.SendNotification();
821   application.Render();
822
823   waveEffect.StartTransition(true);
824
825   Actor cube = waveEffect.GetChildAt(0).GetChildAt(0);
826
827   //check the cube rotation value and color values reset after stopping different transitions in the middle
828   Wait( application, TRANSITION_DURATION*0.2f );
829   waveEffect.StopTransition();
830   application.SendNotification();
831   application.Render(RENDER_FRAME_INTERVAL);
832   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
833   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
834   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
835
836   waveEffect.SetTargetTexture( firstTexture );
837   waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
838   Wait( application, TRANSITION_DURATION*0.4f );
839   waveEffect.StopTransition();
840   application.SendNotification();
841   application.Render(RENDER_FRAME_INTERVAL);
842   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
843   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
844   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
845
846   waveEffect.SetTargetTexture( secondTexture );
847   waveEffect.StartTransition(false);
848   Wait( application, TRANSITION_DURATION*0.6f );
849   waveEffect.StopTransition();
850   application.SendNotification();
851   application.Render(RENDER_FRAME_INTERVAL);
852   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
853   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
854   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
855
856   waveEffect.SetTargetTexture( firstTexture );
857   waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
858   Wait( application, TRANSITION_DURATION*0.8f );
859   waveEffect.StopTransition();
860   application.SendNotification();
861   application.Render(RENDER_FRAME_INTERVAL);
862   DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
863   DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
864   DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
865   END_TEST;
866 }
867
868 int UtcDaliCubeTransitionCrossEffectStopTransition(void)
869 {
870   ToolkitTestApplication application;
871   tet_infoline(" UtcDaliCubeTransitionCrossEffectStopTransition ");
872
873   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
874   Texture firstTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 30, 30 );
875   Texture secondTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 20, 20 );
876
877   CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS );
878   crossEffect.SetSize( VIEW_AREA_SIZE );
879   crossEffect.SetTransitionDuration( TRANSITION_DURATION );
880   crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
881   crossEffect.SetCurrentTexture( firstTexture );
882   crossEffect.SetTargetTexture( secondTexture );
883
884   Stage::GetCurrent().Add( crossEffect );
885
886   application.SendNotification();
887   application.Render();
888
889   crossEffect.StartTransition(true);
890
891   Actor cube0 = crossEffect.GetChildAt(0).GetChildAt(0);
892   Actor cube1 = crossEffect.GetChildAt(0).GetChildAt(1);
893
894   //check the cube rotation values and color values reset after stop the different transitions in the middle
895   Wait( application, TRANSITION_DURATION*0.2f );
896   crossEffect.StopTransition();
897   application.SendNotification();
898   application.Render(RENDER_FRAME_INTERVAL);
899   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
900   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
901   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
902   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
903
904   crossEffect.SetTargetTexture( firstTexture );
905   crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
906   Wait( application, TRANSITION_DURATION*0.4f );
907   crossEffect.StopTransition();
908   application.SendNotification();
909   application.Render(RENDER_FRAME_INTERVAL);
910   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
911   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
912   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
913   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
914
915   crossEffect.SetTargetTexture( secondTexture );
916   crossEffect.StartTransition(false);
917   Wait( application, TRANSITION_DURATION*0.6f );
918   crossEffect.StopTransition();
919   application.SendNotification();
920   application.Render(RENDER_FRAME_INTERVAL);
921   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
922   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::ZERO), FLT_EPISILON, TEST_LOCATION  );
923   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
924   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
925
926   crossEffect.SetTargetTexture( firstTexture );
927   crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
928   Wait( application, TRANSITION_DURATION*0.8f );
929   crossEffect.StopTransition();
930   application.SendNotification();
931   application.Render(RENDER_FRAME_INTERVAL);
932   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
933   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
934   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
935   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
936   END_TEST;
937 }
938
939 int UtcDaliCubeTransitionFoldEffectStopTransition(void)
940 {
941   ToolkitTestApplication application;
942   tet_infoline(" UtcDaliCubeTransitionFoldEffectStopTransition ");
943
944   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
945   Texture firstTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 30, 30 );
946   Texture secondTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 20, 20 );
947
948   CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS );
949   foldEffect.SetSize( VIEW_AREA_SIZE );
950   foldEffect.SetTransitionDuration( TRANSITION_DURATION );
951   foldEffect.SetCurrentTexture( firstTexture );
952   foldEffect.SetTargetTexture( secondTexture );
953
954   Stage::GetCurrent().Add( foldEffect );
955
956   application.SendNotification();
957   application.Render();
958
959   foldEffect.StartTransition(true);
960
961   Actor cube0 = foldEffect.GetChildAt(0).GetChildAt(0);
962   Actor cube1 = foldEffect.GetChildAt(0).GetChildAt(1);
963
964   //check the cube rotation values and color values after stop the different transitions in the middle
965   Wait( application, TRANSITION_DURATION*0.2f );
966   foldEffect.StopTransition();
967   application.SendNotification();
968   application.Render(RENDER_FRAME_INTERVAL);
969
970   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
971   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
972   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
973   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
974
975   foldEffect.SetTargetTexture( firstTexture );
976   foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
977   Wait( application, TRANSITION_DURATION*0.4f );
978   foldEffect.StopTransition();
979   application.SendNotification();
980   application.Render(RENDER_FRAME_INTERVAL);
981   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
982   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
983   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
984   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
985
986   foldEffect.SetTargetTexture( secondTexture );
987   foldEffect.StartTransition(false);
988   Wait( application, TRANSITION_DURATION*0.6f );
989   foldEffect.StopTransition();
990   application.SendNotification();
991   application.Render(RENDER_FRAME_INTERVAL);
992   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
993   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION  );
994   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
995   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
996
997   foldEffect.SetTargetTexture( firstTexture );
998   foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
999   Wait( application, TRANSITION_DURATION*0.8f );
1000   foldEffect.StopTransition();
1001   application.SendNotification();
1002   application.Render(RENDER_FRAME_INTERVAL);
1003   DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
1004   DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0,  Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION  );
1005   DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
1006   DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION );
1007   END_TEST;
1008 }