2 * Copyright (c) 2018 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.
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <toolkit-timer.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <dali-toolkit/dali-toolkit.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
28 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
31 #include "dummy-control.h"
34 using namespace Dali::Toolkit;
36 void dali_animated_vector_image_visual_startup(void)
38 test_return_value = TET_UNDEF;
41 void dali_animated_vector_image_visual_cleanup(void)
43 test_return_value = TET_PASS;
49 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
51 bool gAnimationFinishedSignalFired = false;
53 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
55 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
57 gAnimationFinishedSignalFired = true;
63 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
65 ToolkitTestApplication application;
66 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
68 VisualFactory factory = VisualFactory::Get();
69 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
70 DALI_TEST_CHECK( visual );
72 DummyControl actor = DummyControl::New( true );
73 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
74 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
75 actor.SetSize( 200.0f, 200.0f );
76 Stage::GetCurrent().Add( actor );
78 application.SendNotification();
81 // Wait for resource ready event callback
82 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
84 // renderer is added to actor
85 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
86 Renderer renderer = actor.GetRendererAt( 0u );
87 DALI_TEST_CHECK( renderer );
89 // Test SetOffStage().
91 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
96 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
98 ToolkitTestApplication application;
99 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
101 Property::Map propertyMap;
102 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
103 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
105 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
106 DALI_TEST_CHECK( visual );
108 DummyControl actor = DummyControl::New( true );
109 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
110 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
111 actor.SetSize( 200.0f, 200.0f );
112 Stage::GetCurrent().Add( actor );
114 application.SendNotification();
115 application.Render();
117 // Wait for resource ready event callback
118 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
120 // renderer is added to actor
121 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
122 Renderer renderer = actor.GetRendererAt( 0u );
123 DALI_TEST_CHECK( renderer );
126 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
131 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
133 ToolkitTestApplication application;
134 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
136 int startFrame = 1, endFrame = 3;
137 Property::Array playRange;
138 playRange.PushBack( startFrame );
139 playRange.PushBack( endFrame );
141 Property::Map propertyMap;
142 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
143 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
144 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
145 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
147 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
148 DALI_TEST_CHECK( visual );
150 DummyControl actor = DummyControl::New( true );
151 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
152 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
153 actor.SetSize( 200.0f, 200.0f );
154 Stage::GetCurrent().Add( actor );
156 application.SendNotification();
157 application.Render();
159 // Wait for resource ready event callback
160 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
162 // renderer is added to actor
163 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
164 Renderer renderer = actor.GetRendererAt( 0u );
165 DALI_TEST_CHECK( renderer );
168 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
173 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
175 ToolkitTestApplication application;
176 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
178 int startFrame = 1, endFrame = 3;
179 Property::Array playRange;
180 playRange.PushBack( startFrame );
181 playRange.PushBack( endFrame );
183 Property::Map propertyMap;
184 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
185 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
186 .Add( "loopCount", 3 )
187 .Add( "playRange", playRange )
188 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
189 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
191 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
192 DALI_TEST_CHECK( visual );
194 DummyControl actor = DummyControl::New( true );
195 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
196 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
197 actor.SetSize( 200.0f, 200.0f );
198 Stage::GetCurrent().Add( actor );
200 application.SendNotification();
201 application.Render();
203 // Wait for resource ready event callback
204 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
206 // renderer is added to actor
207 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
208 Renderer renderer = actor.GetRendererAt( 0u );
209 DALI_TEST_CHECK( renderer );
211 Property::Map resultMap;
212 visual.CreatePropertyMap( resultMap );
214 // check the property values from the returned map from a visual
215 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
216 DALI_TEST_CHECK( value );
217 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
219 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
220 DALI_TEST_CHECK( value );
221 DALI_TEST_CHECK( value->Get< int >() == 3 );
223 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
224 DALI_TEST_CHECK( value );
226 Property::Array* result = value->GetArray();
227 DALI_TEST_CHECK( result );
229 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
230 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
232 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
233 DALI_TEST_CHECK( value );
234 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
236 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
237 DALI_TEST_CHECK( value );
238 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
241 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
246 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
248 ToolkitTestApplication application;
249 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
251 int startFrame = 1, endFrame = 3;
252 Property::Array playRange;
253 playRange.PushBack( startFrame );
254 playRange.PushBack( endFrame );
256 Property::Map propertyMap;
257 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
258 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
259 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
260 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
262 // request AnimatedVectorImageVisual with a property map
263 VisualFactory factory = VisualFactory::Get();
264 Visual::Base visual = factory.CreateVisual( propertyMap );
266 Property::Map resultMap;
267 visual.CreatePropertyMap( resultMap );
269 // check the property values from the returned map from a visual
270 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
271 DALI_TEST_CHECK( value );
272 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
274 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
275 DALI_TEST_CHECK( value );
276 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
278 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
279 DALI_TEST_CHECK( value );
280 DALI_TEST_CHECK( value->Get< int >() == 3 );
282 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
283 DALI_TEST_CHECK( value );
285 Property::Array* result = value->GetArray();
286 DALI_TEST_CHECK( result );
288 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
289 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
291 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
292 DALI_TEST_CHECK( value );
293 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
295 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
296 DALI_TEST_CHECK( value );
297 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
299 // request AnimatedVectorImageVisual with an URL
300 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
303 visual2.CreatePropertyMap( resultMap );
305 // check the property values from the returned map from a visual
306 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
307 DALI_TEST_CHECK( value );
308 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
310 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
311 DALI_TEST_CHECK( value );
312 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
317 int UtcDaliAnimatedVectorImageVisualPlayback(void)
319 ToolkitTestApplication application;
321 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
324 // request AnimatedVectorImageVisual with a property map
325 VisualFactory factory = VisualFactory::Get();
326 Visual::Base visual = factory.CreateVisual(
328 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
329 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
331 DummyControl dummyControl = DummyControl::New( true );
332 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
333 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
334 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
336 Property::Map attributes;
337 tet_infoline( "Test Play action" );
338 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
340 Stage::GetCurrent().Add( dummyControl );
341 application.SendNotification();
342 application.Render( 16 );
344 std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); // wait for one animation loop (16fps, 5frames, need 80ms)
346 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
348 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
349 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
350 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
352 tet_infoline( "Test Pause action" );
353 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
355 application.SendNotification();
356 application.Render(16);
358 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
360 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
361 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
362 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
364 tet_infoline( "Test Play action" );
365 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
367 application.SendNotification();
368 application.Render(16);
370 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
371 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
372 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
374 tet_infoline( "Test Stop action" );
375 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
377 application.SendNotification();
378 application.Render(16);
380 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
381 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
382 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
384 tet_infoline( "Test Stop action again" );
385 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
387 application.SendNotification();
388 application.Render(16);
390 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
391 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
392 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
394 tet_infoline( "Test Play action" );
395 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
397 application.SendNotification();
398 application.Render(16);
400 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
401 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
402 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
404 tet_infoline( "Off stage" );
405 dummyControl.Unparent();
407 application.SendNotification();
408 application.Render(16);
410 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
411 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
412 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
414 tet_infoline( "On stage again" );
415 Stage::GetCurrent().Add( dummyControl );
417 application.SendNotification();
418 application.Render(16);
420 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
421 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
422 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
424 tet_infoline( "Test Play action" );
425 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
427 application.SendNotification();
428 application.Render(16);
430 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
431 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
432 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
435 Vector3 newSize( 100.0f, 100.0f, 0.0f );
436 dummyControl.SetSize( newSize );
438 application.SendNotification();
439 application.Render(16);
441 // Size should be changed
442 Vector3 naturalSize = dummyControl.GetNaturalSize();
443 DALI_TEST_CHECK( naturalSize == newSize );
445 dummyControl.Unparent();
451 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
453 ToolkitTestApplication application;
454 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
456 VisualFactory factory = VisualFactory::Get();
457 Property::Map properties;
458 Property::Map shader;
459 const std::string vertexShader = "Foobar";
460 const std::string fragmentShader = "Foobar sampler2D Foobar";
461 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
462 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
464 properties[Visual::Property::TYPE] = Visual::IMAGE;
465 properties[Visual::Property::SHADER] = shader;
466 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
468 Visual::Base visual = factory.CreateVisual( properties );
470 // trigger creation through setting on stage
471 DummyControl dummy = DummyControl::New( true );
472 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
473 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
475 dummy.SetSize( 200.f, 200.f );
476 dummy.SetParentOrigin( ParentOrigin::CENTER );
477 Stage::GetCurrent().Add( dummy );
479 application.SendNotification();
480 application.Render();
482 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
484 Renderer renderer = dummy.GetRendererAt( 0 );
485 Shader shader2 = renderer.GetShader();
486 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
487 Property::Map* map = value.GetMap();
488 DALI_TEST_CHECK( map );
490 std::string resultFragmentShader, resultVertexShader;
491 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
492 fragment->Get( resultFragmentShader );
493 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
495 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
496 vertex->Get( resultVertexShader );
497 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
502 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
504 ToolkitTestApplication application;
505 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
507 VisualFactory factory = VisualFactory::Get();
508 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
509 DALI_TEST_CHECK( visual );
511 DummyControl actor = DummyControl::New( true );
512 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
513 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
515 Vector2 controlSize( 20.f, 30.f );
518 Stage::GetCurrent().Add( actor );
520 application.SendNotification();
521 application.Render();
523 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
525 visual.GetNaturalSize( naturalSize );
527 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
529 actor.SetSize( controlSize );
531 application.SendNotification();
532 application.Render();
534 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
536 visual.GetNaturalSize( naturalSize );
538 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
543 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
545 ToolkitTestApplication application;
546 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
548 Property::Map propertyMap;
549 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
550 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
551 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
553 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
554 DALI_TEST_CHECK( visual );
556 DummyControl actor = DummyControl::New( true );
557 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
558 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
560 Vector2 controlSize( 20.f, 30.f );
561 actor.SetSize( controlSize );
563 Stage::GetCurrent().Add( actor );
565 Property::Map attributes;
566 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
568 application.SendNotification();
569 application.Render();
571 // Trigger count is 2 - resource ready and animation finished
572 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
574 // renderer is added to actor
575 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
576 Renderer renderer = actor.GetRendererAt( 0u );
577 DALI_TEST_CHECK( renderer );
582 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
584 ToolkitTestApplication application;
585 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
587 int startFrame = 3, endFrame = 1;
588 Property::Array array;
589 array.PushBack( startFrame );
590 array.PushBack( endFrame );
592 Property::Map propertyMap;
593 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
594 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
595 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
597 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
598 DALI_TEST_CHECK( visual );
600 DummyControl actor = DummyControl::New( true );
601 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
602 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
604 Vector2 controlSize( 20.f, 30.f );
605 actor.SetSize( controlSize );
607 Stage::GetCurrent().Add( actor );
609 Property::Map attributes;
610 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
612 application.SendNotification();
613 application.Render();
615 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
617 // renderer is added to actor
618 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
619 Renderer renderer = actor.GetRendererAt( 0u );
620 DALI_TEST_CHECK( renderer );
622 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
623 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
625 int resultStartFrame, resultEndFrame;
626 Property::Array* result = value->GetArray();
627 result->GetElementAt( 0 ).Get( resultStartFrame );
628 result->GetElementAt( 1 ).Get( resultEndFrame );
630 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
631 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
633 // Set invalid play range
635 array.PushBack( -1 );
636 array.PushBack( 100 );
639 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
640 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
642 application.SendNotification();
643 application.Render();
645 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
646 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
648 result = value->GetArray();
649 result->GetElementAt( 0 ).Get( resultStartFrame );
650 result->GetElementAt( 1 ).Get( resultEndFrame );
652 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
653 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
658 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
660 ToolkitTestApplication application;
661 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
663 Property::Map propertyMap;
664 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
665 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
666 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
668 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
669 DALI_TEST_CHECK( visual );
671 DummyControl actor = DummyControl::New( true );
672 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
673 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
675 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
677 Vector2 controlSize( 20.f, 30.f );
678 actor.SetSize( controlSize );
680 Stage::GetCurrent().Add( actor );
682 Property::Map attributes;
683 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
685 application.SendNotification();
686 application.Render();
688 // Wait for animation finish
689 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
691 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
692 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
693 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
695 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
700 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
702 ToolkitTestApplication application;
703 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
705 Property::Map propertyMap;
706 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
707 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
709 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
710 DALI_TEST_CHECK( visual );
712 DummyControl actor = DummyControl::New( true );
713 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
714 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
716 Vector2 controlSize( 20.f, 30.f );
717 actor.SetSize( controlSize );
719 Stage::GetCurrent().Add( actor );
721 application.SendNotification();
722 application.Render();
724 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
726 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
728 application.SendNotification();
729 application.Render();
731 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
732 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
733 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
735 Property::Array array;
739 Property::Map attributes;
740 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
741 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
743 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
745 application.SendNotification();
746 application.Render();
748 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
749 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
750 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
759 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
760 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
763 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
765 application.SendNotification();
766 application.Render();
768 // Stop and jump to 3
769 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
771 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
773 application.SendNotification();
774 application.Render();
776 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
777 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
778 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
783 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
785 ToolkitTestApplication application;
786 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
788 int startFrame = 1, endFrame = 3;
789 Property::Array playRange;
790 playRange.PushBack( startFrame );
791 playRange.PushBack( endFrame );
793 Property::Map propertyMap;
794 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
795 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
796 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
797 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
799 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
800 DALI_TEST_CHECK( visual );
802 DummyControl actor = DummyControl::New( true );
803 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
804 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
806 Vector2 controlSize( 20.f, 30.f );
807 actor.SetSize( controlSize );
809 Stage::GetCurrent().Add( actor );
811 application.SendNotification();
812 application.Render();
814 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
816 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
817 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
818 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
820 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
821 DALI_TEST_CHECK( value );
823 Property::Array* result = value->GetArray();
824 DALI_TEST_CHECK( result );
826 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
827 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
830 playRange.PushBack( 0 );
831 playRange.PushBack( 2 );
833 Property::Map attributes;
834 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
835 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
837 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
839 application.SendNotification();
840 application.Render();
842 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
843 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
844 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
846 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
847 result = value->GetArray();
848 DALI_TEST_CHECK( result );
850 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
851 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
856 playRange.PushBack( startFrame );
857 playRange.PushBack( endFrame );
859 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
861 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
863 application.SendNotification();
864 application.Render();
866 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
867 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
869 result = value->GetArray();
870 DALI_TEST_CHECK( result );
872 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
873 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
878 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
880 ToolkitTestApplication application;
881 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
883 Property::Map propertyMap;
884 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
885 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
886 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
887 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
889 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
890 DALI_TEST_CHECK( visual );
892 DummyControl actor = DummyControl::New( true );
893 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
894 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
896 Vector2 controlSize( 20.f, 30.f );
897 actor.SetSize( controlSize );
899 Stage::GetCurrent().Add( actor );
901 Property::Map attributes;
902 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
904 application.SendNotification();
905 application.Render();
907 // Trigger count is 2 - resource ready and animation finished
908 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
910 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
911 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
912 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
914 // Change stop behavior
915 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
917 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
922 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
924 application.SendNotification();
925 application.Render();
927 // Trigger count is 1 - animation finished
928 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
930 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
932 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
933 int totalFrameNumber = value1->Get< int >();
935 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
936 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
938 // Change stop behavior
939 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
940 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
942 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
947 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
949 application.SendNotification();
950 application.Render();
953 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
955 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
956 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
957 int currentFrameNumber = value->Get< int >();
960 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
962 // Trigger count is 1 - animation finished
963 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
965 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
966 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
967 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
972 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
974 ToolkitTestApplication application;
975 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
977 Property::Map propertyMap;
978 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
979 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
980 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
981 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
982 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
984 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
985 DALI_TEST_CHECK( visual );
987 DummyControl actor = DummyControl::New( true );
988 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
989 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
991 Vector2 controlSize( 20.f, 30.f );
992 actor.SetSize( controlSize );
994 Stage::GetCurrent().Add( actor );
996 Property::Map attributes;
997 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
999 application.SendNotification();
1000 application.Render();
1002 // Trigger count is 2 - resource ready and animation finished
1003 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1005 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1006 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1007 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1009 // Change stop behavior
1010 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1012 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1015 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1017 application.SendNotification();
1018 application.Render();
1020 // Trigger count is 1 - animation finished
1021 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1023 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1024 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1025 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1027 // Change looping mode
1028 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1030 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1033 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1035 application.SendNotification();
1036 application.Render();
1038 // Trigger count is 1 - animation finished
1039 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1041 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1042 int totalFrameNumber = value1->Get< int >();
1044 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1045 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1046 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame