2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
24 using namespace Dali::Toolkit;
29 const unsigned int NUM_ROWS = 16;
30 const unsigned int NUM_COLUMNS = 10;
31 const Vector2 VIEW_AREA_SIZE( 480.0f, 800.0f );
32 const float TRANSITION_DURATION = 0.5f;
33 const float CUBE_DISPLACEMENT = 55.f;
34 const Vector2 PAN_POSITION1( VIEW_AREA_SIZE.x * 0.75f, VIEW_AREA_SIZE.y * 0.25f );
35 const Vector2 PAN_DISPLACEMENT1( -5.f, 5.f );
36 const Vector2 PAN_POSITION2( VIEW_AREA_SIZE.x * 0.25f, VIEW_AREA_SIZE.y * 0.75f );
37 const Vector2 PAN_DISPLACEMENT2( 5.f, 5.f );
38 const int RENDER_FRAME_INTERVAL = 16;
39 static const float FLT_EPISILON = 0.0001f;
40 const float OFFSCREEN_RENDER_DURATION = 0.05f;
42 static bool gObjectCreatedCallBackCalled;
43 static void TestCallback(BaseHandle handle)
45 gObjectCreatedCallBackCalled = true;
49 * Simulate time passed by, waiting for certain process to finish
50 * @param[in] application Test application instance
51 * @param[in] durationToPass Time to pass in milliseconds.
53 void Wait(ToolkitTestApplication& application, float durationToPass)
55 int duration = static_cast<int>(durationToPass*1000.f);
56 // wait 2 more frames to compensate the two frames used by the image waiting for the loading succeeded signal
57 for(int i = 0; i <= duration/RENDER_FRAME_INTERVAL+2 ; i++)
59 application.SendNotification();
60 application.Render(RENDER_FRAME_INTERVAL);
66 //Callback class to test whether transition completed signal is emitted when the transition animation is finished
67 class TransitionCompletedCallback : public Dali::ConnectionTracker
70 TransitionCompletedCallback( bool& signalReceived, CubeTransitionEffect& effect, ImageActor& imageActor )
71 : mSignalVerified( signalReceived ),
72 mCurrentEffect( effect ),
73 mActorTransitTo( imageActor )
77 void Callback( CubeTransitionEffect effect, ImageActor imageActor )
79 tet_infoline( "Verifying TransitionCompletedSignal" );
81 if( mCurrentEffect == effect && mActorTransitTo == imageActor )
83 mSignalVerified = true;
89 mSignalVerified = false;
92 bool& mSignalVerified;
93 CubeTransitionEffect& mCurrentEffect;
94 ImageActor& mActorTransitTo;
101 void cube_transition_effect_startup(void)
103 test_return_value = TET_UNDEF;
106 void cube_transition_effect_cleanup(void)
108 test_return_value = TET_PASS;
111 int UtcDaliCubeTransitionWaveEffectNew(void)
113 ToolkitTestApplication application;
114 tet_infoline(" UtcDaliCubeTransitionWaveEffectNew ");
116 CubeTransitionEffect waveEffect;
118 DALI_TEST_CHECK( !waveEffect );
120 waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
122 DALI_TEST_CHECK( waveEffect );
126 //Additional check to ensure object is created by checking if it's registered
127 ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
128 DALI_TEST_CHECK( registry );
130 gObjectCreatedCallBackCalled = false;
131 registry.ObjectCreatedSignal().Connect( &TestCallback );
133 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
135 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
139 int UtcDaliCubeTransitionCrossEffectNew(void)
141 ToolkitTestApplication application;
142 tet_infoline(" UtcDaliCubeTransitionCrossEffectNew ");
144 CubeTransitionEffect crossEffect;
146 DALI_TEST_CHECK( !crossEffect );
148 crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
150 DALI_TEST_CHECK( crossEffect );
154 //Additional check to ensure object is created by checking if it's registered
155 ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
156 DALI_TEST_CHECK( registry );
158 gObjectCreatedCallBackCalled = false;
159 registry.ObjectCreatedSignal().Connect( &TestCallback );
161 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
163 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
167 int UtcDaliCubeTransitionFoldEffectNew(void)
169 ToolkitTestApplication application;
170 tet_infoline( " UtcDaliCubeTransitionFoldEffectNew " );
172 CubeTransitionEffect foldEffect;
174 DALI_TEST_CHECK( !foldEffect );
176 foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
178 DALI_TEST_CHECK( foldEffect );
182 //Additional check to ensure object is created by checking if it is registered
183 ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
184 DALI_TEST_CHECK( registry );
186 gObjectCreatedCallBackCalled = false;
187 registry.ObjectCreatedSignal().Connect( &TestCallback );
189 CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
191 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
195 int UtcDaliCubeTransitionEffectSetGetTransitionDuration(void)
197 ToolkitTestApplication application;
198 tet_infoline(" UtcDaliCubeTransitionEffectSetGetTransitionDuration ");
200 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
201 waveEffect.SetTransitionDuration( TRANSITION_DURATION );
202 DALI_TEST_EQUALS( TRANSITION_DURATION, waveEffect.GetTransitionDuration(), TEST_LOCATION );
204 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
205 crossEffect.SetTransitionDuration( TRANSITION_DURATION );
206 DALI_TEST_EQUALS( TRANSITION_DURATION, crossEffect.GetTransitionDuration(), TEST_LOCATION );
208 CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
209 foldEffect.SetTransitionDuration( TRANSITION_DURATION );
210 DALI_TEST_EQUALS( TRANSITION_DURATION, foldEffect.GetTransitionDuration(), TEST_LOCATION );
214 int UtcDaliCubeTransitionEffectSetGetCubeDisplacement(void)
216 ToolkitTestApplication application;
217 tet_infoline(" UtcDaliCubeTransitionEffectSetGetTransitionDuration ");
219 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
220 waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
221 DALI_TEST_EQUALS( CUBE_DISPLACEMENT, waveEffect.GetCubeDisplacement(), TEST_LOCATION );
223 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
224 crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
225 DALI_TEST_EQUALS( CUBE_DISPLACEMENT, crossEffect.GetCubeDisplacement(), TEST_LOCATION );
227 //Cube displacement is not used in CubeTransitionFoldEffect
231 //Test common codes in base class
232 int UtcDaliCubeTransitionEffectGetRoot(void)
234 ToolkitTestApplication application;
235 tet_infoline(" UtcDaliCubeTransitionEffectGetRoot ");
237 unsigned int totalNum = NUM_ROWS*NUM_COLUMNS;
239 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
240 Actor rootActor = waveEffect.GetRoot();
242 // check that we have a total of NUM_ROWS*NUM_COLUMNS cubes;
243 DALI_TEST_CHECK( totalNum == rootActor.GetChildCount() );
245 // check that every cube has two children
246 DALI_TEST_CHECK( 2 == rootActor.GetChildAt(0).GetChildCount() );
247 DALI_TEST_CHECK( 2 == rootActor.GetChildAt(totalNum/2).GetChildCount() );
248 DALI_TEST_CHECK( 2 == rootActor.GetChildAt(totalNum-1).GetChildCount() );
252 int UtcDaliCubeTransitionEffectIsTransiting(void)
254 ToolkitTestApplication application;
255 tet_infoline(" UtcDaliCubeTransitionEffectIsTransiting ");
257 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
258 ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
260 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
261 Actor rootActor = waveEffect.GetRoot();
262 Stage::GetCurrent().Add( rootActor );
264 waveEffect.SetTransitionDuration( TRANSITION_DURATION );
265 waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
266 DALI_TEST_CHECK( !waveEffect.IsTransiting() );
268 waveEffect.SetCurrentImage(imageActor);
269 waveEffect.SetTargetImage(imageActor);
270 //transition is started
271 waveEffect.StartTransition();
272 DALI_TEST_CHECK( waveEffect.IsTransiting() );
273 //transition is finished
274 Wait( application, TRANSITION_DURATION );
275 DALI_TEST_CHECK( !waveEffect.IsTransiting() );
277 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
278 crossEffect.SetTransitionDuration( TRANSITION_DURATION );
279 crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
280 DALI_TEST_CHECK( !crossEffect.IsTransiting() );
282 crossEffect.SetCurrentImage(imageActor);
283 crossEffect.SetTargetImage(imageActor);
284 //transition is started
285 crossEffect.StartTransition(false);
286 DALI_TEST_CHECK( crossEffect.IsTransiting() );
287 //transition is finished
288 Wait( application, TRANSITION_DURATION );
289 DALI_TEST_CHECK( !crossEffect.IsTransiting() );
291 CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
292 foldEffect.SetTransitionDuration( TRANSITION_DURATION );
293 DALI_TEST_CHECK( !foldEffect.IsTransiting() );
295 foldEffect.SetCurrentImage( imageActor );
296 foldEffect.SetTargetImage( imageActor );
297 //transition is started
298 foldEffect.StartTransition(true);
299 DALI_TEST_CHECK(foldEffect.IsTransiting() );
300 //transition is finished
301 Wait( application, TRANSITION_DURATION );
302 DALI_TEST_CHECK( !foldEffect.IsTransiting() );
307 //Test common codes in base class
308 int UtcDaliCubeTransitionEffectSetCurrentImage(void)
310 ToolkitTestApplication application;
311 tet_infoline(" UtcDaliCubeTransitionEffectSetCurrentImage ");
313 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
314 ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40) ;
316 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
317 waveEffect.SetCurrentImage( imageActor );
319 // the current image content is set to the tiles facing the camera
320 ImageActor tile = ImageActor::DownCast( (waveEffect.GetRoot().GetChildAt(0).GetChildAt(0)));
322 //check the pixel area set to the cube
323 ImageActor::PixelArea pixelAreaDef( 0, 0, VIEW_AREA_SIZE.x / NUM_COLUMNS, VIEW_AREA_SIZE.y / NUM_ROWS);
324 ImageActor::PixelArea pixelArea = tile.GetPixelArea();
325 DALI_TEST_CHECK ( pixelAreaDef == pixelArea );
327 //check the size of the off screen rendered image
328 Wait( application, OFFSCREEN_RENDER_DURATION );
329 DALI_TEST_EQUALS( tile.GetImage().GetWidth(), VIEW_AREA_SIZE.x, TEST_LOCATION );
330 DALI_TEST_EQUALS( tile.GetImage().GetHeight(), VIEW_AREA_SIZE.y, TEST_LOCATION );
334 //Test common codes in base class
335 int UtcDaliCubeTransitionEffectSetTargetImage(void)
337 ToolkitTestApplication application;
338 tet_infoline(" UtcDaliCubeTransitionEffectSetTargetImage ");
340 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
341 ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
343 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
344 Actor rootActor = waveEffect.GetRoot();
345 Stage::GetCurrent().Add( rootActor );
347 waveEffect.SetCurrentImage( imageActor );
348 waveEffect.SetTargetImage( imageActor );
350 // the target image content is set to the tiles currently invisible to the camera
351 ImageActor tile = ImageActor::DownCast( (rootActor.GetChildAt(0).GetChildAt(1)));
353 //check the pixel area set to the cube
354 ImageActor::PixelArea pixelAreaDef( 0, 0, VIEW_AREA_SIZE.x / NUM_COLUMNS, VIEW_AREA_SIZE.y / NUM_ROWS);
355 ImageActor::PixelArea pixelArea = tile.GetPixelArea();
356 DALI_TEST_CHECK ( pixelAreaDef == pixelArea );
358 //check the size of the off screen rendered image
359 Wait( application, OFFSCREEN_RENDER_DURATION );
360 DALI_TEST_EQUALS( tile.GetImage().GetWidth(), VIEW_AREA_SIZE.x, TEST_LOCATION );
361 DALI_TEST_EQUALS( tile.GetImage().GetHeight(), VIEW_AREA_SIZE.y, TEST_LOCATION );
365 int UtcDaliCubeTransitionWaveEffectStartTransition(void)
367 ToolkitTestApplication application;
368 tet_infoline(" UtcDaliCubeTransitionWaveEffectStartTransition ");
370 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
371 ImageActor imageActor = ImageActor::New(ResourceImage::New("Image.jpg"));
373 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
374 waveEffect.SetTransitionDuration( TRANSITION_DURATION );
375 waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
376 Actor rootActor = waveEffect.GetRoot();
377 Stage::GetCurrent().Add( rootActor );
378 Actor cube = rootActor.GetChildAt(0);
380 waveEffect.SetCurrentImage( imageActor );
382 Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
383 Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
385 //check the cube rotation value and color values after different transitions
386 waveEffect.SetTargetImage( imageActor );
387 waveEffect.StartTransition(true);
388 Wait( application, TRANSITION_DURATION );
389 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
390 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
391 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
393 waveEffect.SetTargetImage( imageActor );
394 waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
395 Wait( application, TRANSITION_DURATION );
396 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
397 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
398 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
400 waveEffect.SetTargetImage( imageActor );
401 waveEffect.StartTransition(false);
402 Wait( application, TRANSITION_DURATION );
403 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
404 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
405 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
407 waveEffect.SetTargetImage( imageActor );
408 waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
409 Wait( application, TRANSITION_DURATION );
410 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
411 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
412 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
416 int UtcDaliCubeTransitionCrossEffectStartTransition(void)
418 ToolkitTestApplication application;
419 tet_infoline(" UtcDaliCubeTransitionCrossEffectStartTransition ");
421 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
422 ImageActor imageActor = ImageActor::New(ResourceImage::New("Image.jpg"));
424 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
425 crossEffect.SetTransitionDuration( TRANSITION_DURATION );
426 crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
427 Actor rootActor = crossEffect.GetRoot();
428 Stage::GetCurrent().Add( rootActor );
429 crossEffect.SetCurrentImage( imageActor );
430 Actor cube0 = rootActor.GetChildAt(0);
431 Actor cube1 = rootActor.GetChildAt(1);
433 Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
434 Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
436 //check the cube rotation values and color values after different transitions
437 crossEffect.SetTargetImage( imageActor );
438 crossEffect.StartTransition(true);
439 Wait( application, TRANSITION_DURATION );
440 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
441 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
442 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
443 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
446 crossEffect.SetTargetImage( imageActor );
447 crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
448 Wait( application, TRANSITION_DURATION );
449 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
450 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
451 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
452 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
455 crossEffect.SetTargetImage( imageActor );
456 crossEffect.StartTransition(false);
457 Wait( application, TRANSITION_DURATION );
458 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
459 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
460 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
461 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
463 crossEffect.SetTargetImage( imageActor );
464 crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
465 Wait( application, TRANSITION_DURATION );
466 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
467 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
468 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
469 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
473 int UtcDaliCubeTransitionFoldEffectStartTransition(void)
475 ToolkitTestApplication application;
476 tet_infoline(" UtcDaliCubeTransitionFoldEffectStartTransition ");
478 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
479 ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30);
481 CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
482 foldEffect.SetTransitionDuration( TRANSITION_DURATION );
483 Actor rootActor = foldEffect.GetRoot();
484 Stage::GetCurrent().Add( rootActor );
485 foldEffect.SetCurrentImage( imageActor );
486 Actor cube0 = rootActor.GetChildAt(0);
487 Actor cube1 = rootActor.GetChildAt(1);
489 Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
490 Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
492 //check the cube rotation values and color values after different transitions
493 foldEffect.SetTargetImage( imageActor );
494 foldEffect.StartTransition(true);
495 Wait( application, TRANSITION_DURATION );
496 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
497 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
498 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
499 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
501 foldEffect.SetTargetImage( imageActor );
502 foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
503 Wait( application, TRANSITION_DURATION );
504 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
505 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
506 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
507 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
510 foldEffect.SetTargetImage( imageActor );
511 foldEffect.StartTransition(false);
512 Wait( application, TRANSITION_DURATION );
513 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
514 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
515 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
516 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(),fullBrightness, FLT_EPISILON, TEST_LOCATION );
518 foldEffect.SetTargetImage( imageActor );
519 foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
520 Wait( application, TRANSITION_DURATION );
521 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
522 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
523 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
524 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
528 int UtcDaliCubeTransitionEffectSignalTransitionCompleted(void)
530 ToolkitTestApplication application;
531 tet_infoline(" UtcDaliCubeTransitionEffectSignalTransitionCompleted ");
533 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
534 ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
535 ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
536 ImageActor thirdImageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40);
538 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
539 waveEffect.SetTransitionDuration( TRANSITION_DURATION );
540 waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
541 Actor rootActor = waveEffect.GetRoot();
542 Stage::GetCurrent().Add( rootActor );
544 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
545 crossEffect.SetTransitionDuration( TRANSITION_DURATION );
546 crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
547 rootActor = crossEffect.GetRoot();
548 Stage::GetCurrent().Add( rootActor );
550 CubeTransitionEffect foldEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
551 foldEffect.SetTransitionDuration( TRANSITION_DURATION );
552 rootActor = foldEffect.GetRoot();
553 Stage::GetCurrent().Add( rootActor );
555 bool signalVerified = false;
556 CubeTransitionEffect currentEffect;
557 ImageActor actorTransitTo;
558 TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
559 waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
560 crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
561 foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
563 //check that the wave effect is used to transit to secondImageActor
564 currentEffect = waveEffect;
565 actorTransitTo = secondImageActor;
566 waveEffect.SetCurrentImage( firstImageActor );
567 waveEffect.SetTargetImage( secondImageActor );
568 waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
569 Wait( application, TRANSITION_DURATION );
570 DALI_TEST_CHECK(callback.mSignalVerified);
573 //check that the wave effect is used to transit to thirdImageActor
574 actorTransitTo = thirdImageActor;
575 waveEffect.SetTargetImage( thirdImageActor );
576 waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
577 Wait( application, TRANSITION_DURATION );
578 DALI_TEST_CHECK(callback.mSignalVerified);
581 //check that the cross effect is used to transit to secondImageActor
582 currentEffect = crossEffect;
583 actorTransitTo = secondImageActor;
584 crossEffect.SetCurrentImage( thirdImageActor );
585 crossEffect.SetTargetImage( secondImageActor );
586 crossEffect.StartTransition(true);
587 Wait( application, TRANSITION_DURATION );
588 DALI_TEST_CHECK(callback.mSignalVerified);
591 //check that the cross effect is used to transit to firstImageActor
592 actorTransitTo = firstImageActor;
593 crossEffect.SetTargetImage( firstImageActor );
594 crossEffect.StartTransition(false);
595 Wait( application, TRANSITION_DURATION );
596 DALI_TEST_CHECK(callback.mSignalVerified);
599 //check that the fold effect is used to transit to secondImageActor
600 currentEffect = foldEffect;
601 actorTransitTo = secondImageActor;
602 foldEffect.SetCurrentImage( firstImageActor );
603 foldEffect.SetTargetImage( secondImageActor );
604 foldEffect.StartTransition();
605 Wait( application, TRANSITION_DURATION );
606 DALI_TEST_CHECK( callback.mSignalVerified );
609 //check that the fold effect is used to transit to thirdImageActor
610 actorTransitTo = thirdImageActor;
611 foldEffect.SetTargetImage( thirdImageActor );
612 foldEffect.StartTransition( false );
613 Wait( application, TRANSITION_DURATION );
614 DALI_TEST_CHECK( callback.mSignalVerified );
618 int UtcDaliCubeTransitionEffectPauseResumeTransition(void)
620 ToolkitTestApplication application;
621 tet_infoline(" UtcDaliCubeTransitionEffectPauseResumeTransition ");
623 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
624 ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
625 ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
627 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
628 waveEffect.SetTransitionDuration( TRANSITION_DURATION );
629 waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
630 Actor rootActor = waveEffect.GetRoot();
631 Stage::GetCurrent().Add( rootActor );
633 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
634 crossEffect.SetTransitionDuration( TRANSITION_DURATION );
635 crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
636 rootActor = crossEffect.GetRoot();
637 Stage::GetCurrent().Add( rootActor );
639 CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
640 foldEffect.SetTransitionDuration( TRANSITION_DURATION );
641 rootActor = crossEffect.GetRoot();
642 Stage::GetCurrent().Add( rootActor );
644 bool signalVerified = false;
645 CubeTransitionEffect currentEffect;
646 ImageActor actorTransitTo;
647 TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo);
648 waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
649 crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
650 foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback );
652 currentEffect = waveEffect;
653 actorTransitTo = secondImageActor;
654 waveEffect.SetCurrentImage( firstImageActor );
655 waveEffect.SetTargetImage( secondImageActor );
656 // start transition; transit for 0.5*duration; pause for 0.5*duration;
657 // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
658 // only until now the transition finished signal can be received
659 waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
660 Wait( application, TRANSITION_DURATION*0.5f );
661 DALI_TEST_CHECK(!callback.mSignalVerified);
662 waveEffect.PauseTransition();
663 Wait( application, TRANSITION_DURATION*0.5f );
664 DALI_TEST_CHECK(!callback.mSignalVerified);
665 waveEffect.ResumeTransition();
666 Wait( application, TRANSITION_DURATION*0.25f );
667 DALI_TEST_CHECK(!callback.mSignalVerified);
668 waveEffect.PauseTransition();
669 Wait( application, TRANSITION_DURATION*0.25f );
670 DALI_TEST_CHECK(!callback.mSignalVerified);
671 waveEffect.ResumeTransition();
672 Wait( application, TRANSITION_DURATION*0.25f );
673 DALI_TEST_CHECK(callback.mSignalVerified);
676 currentEffect = crossEffect;
677 actorTransitTo = firstImageActor;
678 crossEffect.SetCurrentImage( secondImageActor );
679 crossEffect.SetTargetImage( firstImageActor );
680 // start transition; transit for 0.25*duration; pause for 0.2*duration;
681 // resume for 0.5*duration; pause for 0.2*duration; resume for another 0.25*duration;
682 // only until now the transition finished signal can be received
683 crossEffect.StartTransition(false);
684 Wait( application, TRANSITION_DURATION*0.25f );
685 DALI_TEST_CHECK(!callback.mSignalVerified);
686 crossEffect.PauseTransition();
687 Wait( application, TRANSITION_DURATION*0.2f );
688 DALI_TEST_CHECK(!callback.mSignalVerified);
689 crossEffect.ResumeTransition();
690 Wait( application, TRANSITION_DURATION*0.5f );
691 DALI_TEST_CHECK(!callback.mSignalVerified);
692 crossEffect.PauseTransition();
693 Wait( application, TRANSITION_DURATION*0.2f );
694 DALI_TEST_CHECK(!callback.mSignalVerified);
695 crossEffect.ResumeTransition();
696 Wait( application, TRANSITION_DURATION*0.25f );
697 DALI_TEST_CHECK(callback.mSignalVerified);
700 currentEffect = foldEffect;
701 actorTransitTo = secondImageActor;
702 foldEffect.SetCurrentImage( firstImageActor );
703 foldEffect.SetTargetImage( secondImageActor );
704 // start transition; transit for 0.5*duration; pause for 0.5*duration;
705 // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration;
706 // only until now the transition finished signal can be received
707 foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
708 Wait( application, TRANSITION_DURATION*0.5f );
709 DALI_TEST_CHECK(!callback.mSignalVerified);
710 foldEffect.PauseTransition();
711 Wait( application, TRANSITION_DURATION*0.5f );
712 DALI_TEST_CHECK(!callback.mSignalVerified);
713 foldEffect.ResumeTransition();
714 Wait( application, TRANSITION_DURATION*0.25f );
715 DALI_TEST_CHECK(!callback.mSignalVerified);
716 foldEffect.PauseTransition();
717 Wait( application, TRANSITION_DURATION*0.25f );
718 DALI_TEST_CHECK(!callback.mSignalVerified);
719 foldEffect.ResumeTransition();
720 Wait( application, TRANSITION_DURATION*0.25f );
721 DALI_TEST_CHECK(callback.mSignalVerified);
725 int UtcDaliCubeTransitionWaveEffectStopTransition(void)
727 ToolkitTestApplication application;
728 tet_infoline(" UtcDaliCubeTransitionWaveEffectStopTransition ");
730 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
731 ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
732 ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
734 CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
735 waveEffect.SetTransitionDuration( TRANSITION_DURATION );
736 waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
737 Actor rootActor = waveEffect.GetRoot();
738 Stage::GetCurrent().Add( rootActor );
739 Actor cube = rootActor.GetChildAt(0);
740 waveEffect.SetCurrentImage( firstImageActor );
742 Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
743 Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
745 //check the cube rotation value and color values after stopping different transitions in the middle
746 waveEffect.SetTargetImage( secondImageActor );
747 waveEffect.StartTransition(true);
748 Wait( application, TRANSITION_DURATION*0.2f );
749 waveEffect.StopTransition();
750 application.SendNotification();
751 application.Render(RENDER_FRAME_INTERVAL);
752 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
753 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
754 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
756 waveEffect.SetTargetImage( firstImageActor );
757 waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
758 Wait( application, TRANSITION_DURATION*0.4f );
759 waveEffect.StopTransition();
760 application.SendNotification();
761 application.Render(RENDER_FRAME_INTERVAL);
762 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
763 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
764 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
766 waveEffect.SetTargetImage( secondImageActor );
767 waveEffect.StartTransition(false);
768 Wait( application, TRANSITION_DURATION*0.6f );
769 waveEffect.StopTransition();
770 application.SendNotification();
771 application.Render(RENDER_FRAME_INTERVAL);
772 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
773 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
774 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
776 waveEffect.SetTargetImage( firstImageActor );
777 waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
778 Wait( application, TRANSITION_DURATION*0.8f );
779 waveEffect.StopTransition();
780 application.SendNotification();
781 application.Render(RENDER_FRAME_INTERVAL);
782 DALI_TEST_EQUALS( cube.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
783 DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
784 DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
788 int UtcDaliCubeTransitionCrossEffectStopTransition(void)
790 ToolkitTestApplication application;
791 tet_infoline(" UtcDaliCubeTransitionCrossEffectStopTransition ");
793 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
794 ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
795 ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
797 CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
798 crossEffect.SetTransitionDuration( TRANSITION_DURATION );
799 crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT );
800 Actor rootActor = crossEffect.GetRoot();
801 Stage::GetCurrent().Add( rootActor );
802 crossEffect.SetCurrentImage( firstImageActor );
803 Actor cube0 = rootActor.GetChildAt(0);
804 Actor cube1 = rootActor.GetChildAt(1);
806 Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
807 Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
809 //check the cube rotation values and color values after stop the different transitions in the middle
810 crossEffect.SetTargetImage( secondImageActor );
811 crossEffect.StartTransition(true);
812 Wait( application, TRANSITION_DURATION*0.2f );
813 crossEffect.StopTransition();
814 application.SendNotification();
815 application.Render(RENDER_FRAME_INTERVAL);
816 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
817 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
819 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
820 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
822 crossEffect.SetTargetImage( firstImageActor );
823 crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
824 Wait( application, TRANSITION_DURATION*0.4f );
825 crossEffect.StopTransition();
826 application.SendNotification();
827 application.Render(RENDER_FRAME_INTERVAL);
828 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
829 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
830 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
831 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
833 crossEffect.SetTargetImage( secondImageActor );
834 crossEffect.StartTransition(false);
835 Wait( application, TRANSITION_DURATION*0.6f );
836 crossEffect.StopTransition();
837 application.SendNotification();
838 application.Render(RENDER_FRAME_INTERVAL);
839 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
840 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
841 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
842 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
844 crossEffect.SetTargetImage( firstImageActor );
845 crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
846 Wait( application, TRANSITION_DURATION*0.8f );
847 crossEffect.StopTransition();
848 application.SendNotification();
849 application.Render(RENDER_FRAME_INTERVAL);
850 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
851 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION );
852 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
853 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
857 int UtcDaliCubeTransitionFoldEffectStopTransition(void)
859 ToolkitTestApplication application;
860 tet_infoline(" UtcDaliCubeTransitionFoldEffectStopTransition ");
862 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE );
863 ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30);
864 ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20);
866 CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE );
867 foldEffect.SetTransitionDuration( TRANSITION_DURATION );
868 Actor rootActor = foldEffect.GetRoot();
869 Stage::GetCurrent().Add( rootActor );
870 foldEffect.SetCurrentImage( firstImageActor );
871 Actor cube0 = rootActor.GetChildAt(0);
872 Actor cube1 = rootActor.GetChildAt(1);
874 Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f);
875 Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f);
877 //check the cube rotation values and color values after stop the different transitions in the middle
878 foldEffect.SetTargetImage( secondImageActor );
879 foldEffect.StartTransition(true);
880 Wait( application, TRANSITION_DURATION*0.2f );
881 foldEffect.StopTransition();
882 application.SendNotification();
883 application.Render(RENDER_FRAME_INTERVAL);
884 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
885 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
886 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
887 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
889 foldEffect.SetTargetImage( firstImageActor );
890 foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1);
891 Wait( application, TRANSITION_DURATION*0.4f );
892 foldEffect.StopTransition();
893 application.SendNotification();
894 application.Render(RENDER_FRAME_INTERVAL);
895 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
896 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 2.f*Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
897 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
898 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
900 foldEffect.SetTargetImage( secondImageActor );
901 foldEffect.StartTransition(false);
902 Wait( application, TRANSITION_DURATION*0.6f );
903 foldEffect.StopTransition();
904 application.SendNotification();
905 application.Render(RENDER_FRAME_INTERVAL);
906 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( -Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
907 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( Math::PI_2, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
908 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );
909 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
911 foldEffect.SetTargetImage( firstImageActor );
912 foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2);
913 Wait( application, TRANSITION_DURATION*0.8f );
914 foldEffect.StopTransition();
915 application.SendNotification();
916 application.Render(RENDER_FRAME_INTERVAL);
917 DALI_TEST_EQUALS( cube1.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
918 DALI_TEST_EQUALS( cube0.GetCurrentRotation(), Quaternion( 0.f, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION );
919 DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION );
920 DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION );