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 Property::Map propertyMap;
179 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
180 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
181 .Add( "loopCount", 3 )
182 .Add( "playRange", Vector2( 0.2f, 0.8f ) );
184 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
185 DALI_TEST_CHECK( visual );
187 DummyControl actor = DummyControl::New( true );
188 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
189 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
190 actor.SetSize( 200.0f, 200.0f );
191 Stage::GetCurrent().Add( actor );
193 application.SendNotification();
194 application.Render();
196 // Wait for resource ready event callback
197 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
199 // renderer is added to actor
200 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
201 Renderer renderer = actor.GetRendererAt( 0u );
202 DALI_TEST_CHECK( renderer );
205 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
210 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
212 ToolkitTestApplication application;
213 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
215 int startFrame = 1, endFrame = 3;
216 Property::Array playRange;
217 playRange.PushBack( startFrame );
218 playRange.PushBack( endFrame );
220 Property::Map propertyMap;
221 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
222 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
223 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
224 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
226 // request AnimatedVectorImageVisual with a property map
227 VisualFactory factory = VisualFactory::Get();
228 Visual::Base visual = factory.CreateVisual( propertyMap );
230 Property::Map resultMap;
231 visual.CreatePropertyMap( resultMap );
233 // check the property values from the returned map from a visual
234 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
235 DALI_TEST_CHECK( value );
236 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
238 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
239 DALI_TEST_CHECK( value );
240 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
242 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
243 DALI_TEST_CHECK( value );
244 DALI_TEST_CHECK( value->Get< int >() == 3 );
246 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
247 DALI_TEST_CHECK( value );
249 Property::Array* result = value->GetArray();
250 DALI_TEST_CHECK( result );
252 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
253 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
255 // request AnimatedVectorImageVisual with an URL
256 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
259 visual2.CreatePropertyMap( resultMap );
261 // check the property values from the returned map from a visual
262 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
263 DALI_TEST_CHECK( value );
264 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
266 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
267 DALI_TEST_CHECK( value );
268 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
273 int UtcDaliAnimatedVectorImageVisualPlayback(void)
275 ToolkitTestApplication application;
277 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
280 // request AnimatedVectorImageVisual with a property map
281 VisualFactory factory = VisualFactory::Get();
282 Visual::Base visual = factory.CreateVisual(
284 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
285 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
287 DummyControl dummyControl = DummyControl::New( true );
288 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
289 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
290 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
292 Property::Map attributes;
293 tet_infoline( "Test Play action" );
294 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
296 Stage::GetCurrent().Add( dummyControl );
297 application.SendNotification();
298 application.Render( 16 );
300 std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); // wait for one animation loop (16fps, 5frames, need 80ms)
302 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
304 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
305 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
306 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
308 tet_infoline( "Test Pause action" );
309 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
311 application.SendNotification();
312 application.Render(16);
314 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
316 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
317 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
318 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PAUSED ) );
320 tet_infoline( "Test Play action" );
321 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
323 application.SendNotification();
324 application.Render(16);
326 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
327 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
328 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
330 tet_infoline( "Test Stop action" );
331 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
333 application.SendNotification();
334 application.Render(16);
336 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
337 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
338 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
340 tet_infoline( "Test Stop action again" );
341 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
343 application.SendNotification();
344 application.Render(16);
346 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
347 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
348 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
350 tet_infoline( "Test Play action" );
351 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
353 application.SendNotification();
354 application.Render(16);
356 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
357 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
358 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
360 tet_infoline( "Off stage" );
361 dummyControl.Unparent();
363 application.SendNotification();
364 application.Render(16);
366 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
367 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
368 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PAUSED ) );
370 tet_infoline( "On stage again" );
371 Stage::GetCurrent().Add( dummyControl );
373 application.SendNotification();
374 application.Render(16);
376 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
377 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
378 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PAUSED ) );
380 tet_infoline( "Test Play action" );
381 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
383 application.SendNotification();
384 application.Render(16);
386 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
387 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
388 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
391 Vector3 newSize( 100.0f, 100.0f, 0.0f );
392 dummyControl.SetSize( newSize );
394 application.SendNotification();
395 application.Render(16);
397 // Size should be changed
398 Vector3 naturalSize = dummyControl.GetNaturalSize();
399 DALI_TEST_CHECK( naturalSize == newSize );
401 dummyControl.Unparent();
407 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
409 ToolkitTestApplication application;
410 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
412 VisualFactory factory = VisualFactory::Get();
413 Property::Map properties;
414 Property::Map shader;
415 const std::string vertexShader = "Foobar";
416 const std::string fragmentShader = "Foobar sampler2D Foobar";
417 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
418 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
420 properties[Visual::Property::TYPE] = Visual::IMAGE;
421 properties[Visual::Property::SHADER] = shader;
422 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
424 Visual::Base visual = factory.CreateVisual( properties );
426 // trigger creation through setting on stage
427 DummyControl dummy = DummyControl::New( true );
428 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
429 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
431 dummy.SetSize( 200.f, 200.f );
432 dummy.SetParentOrigin( ParentOrigin::CENTER );
433 Stage::GetCurrent().Add( dummy );
435 application.SendNotification();
436 application.Render();
438 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
440 Renderer renderer = dummy.GetRendererAt( 0 );
441 Shader shader2 = renderer.GetShader();
442 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
443 Property::Map* map = value.GetMap();
444 DALI_TEST_CHECK( map );
446 std::string resultFragmentShader, resultVertexShader;
447 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
448 fragment->Get( resultFragmentShader );
449 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
451 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
452 vertex->Get( resultVertexShader );
453 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
458 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
460 ToolkitTestApplication application;
461 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
463 VisualFactory factory = VisualFactory::Get();
464 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
465 DALI_TEST_CHECK( visual );
467 DummyControl actor = DummyControl::New( true );
468 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
469 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
471 Vector2 controlSize( 20.f, 30.f );
474 Stage::GetCurrent().Add( actor );
476 application.SendNotification();
477 application.Render();
479 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
481 visual.GetNaturalSize( naturalSize );
483 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
485 actor.SetSize( controlSize );
487 application.SendNotification();
488 application.Render();
490 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
492 visual.GetNaturalSize( naturalSize );
494 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
499 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
501 ToolkitTestApplication application;
502 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
504 Property::Map propertyMap;
505 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
506 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
507 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
509 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
510 DALI_TEST_CHECK( visual );
512 DummyControl actor = DummyControl::New( true );
513 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
514 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
516 Vector2 controlSize( 20.f, 30.f );
517 actor.SetSize( controlSize );
519 Stage::GetCurrent().Add( actor );
521 Property::Map attributes;
522 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
524 application.SendNotification();
525 application.Render();
527 // Trigger count is 2 - resource ready and animation finished
528 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
530 // renderer is added to actor
531 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
532 Renderer renderer = actor.GetRendererAt( 0u );
533 DALI_TEST_CHECK( renderer );
538 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
540 ToolkitTestApplication application;
541 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
543 int startFrame = 3, endFrame = 1;
544 Property::Array array;
545 array.PushBack( startFrame );
546 array.PushBack( endFrame );
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::PLAY_RANGE, array );
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 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
573 // renderer is added to actor
574 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
575 Renderer renderer = actor.GetRendererAt( 0u );
576 DALI_TEST_CHECK( renderer );
578 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
579 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
581 int resultStartFrame, resultEndFrame;
582 Property::Array* result = value->GetArray();
583 result->GetElementAt( 0 ).Get( resultStartFrame );
584 result->GetElementAt( 1 ).Get( resultEndFrame );
586 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
587 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
589 // Set invalid play range
591 array.PushBack( -1 );
592 array.PushBack( 100 );
595 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
596 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
598 application.SendNotification();
599 application.Render();
601 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
602 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
604 result = value->GetArray();
605 result->GetElementAt( 0 ).Get( resultStartFrame );
606 result->GetElementAt( 1 ).Get( resultEndFrame );
608 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
609 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
614 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
616 ToolkitTestApplication application;
617 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
619 Property::Map propertyMap;
620 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
621 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
622 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
624 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
625 DALI_TEST_CHECK( visual );
627 DummyControl actor = DummyControl::New( true );
628 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
629 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
631 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
633 Vector2 controlSize( 20.f, 30.f );
634 actor.SetSize( controlSize );
636 Stage::GetCurrent().Add( actor );
638 Property::Map attributes;
639 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
641 application.SendNotification();
642 application.Render();
644 // Wait for animation finish
645 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
647 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
648 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
649 DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
651 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
656 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
658 ToolkitTestApplication application;
659 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
661 Property::Map propertyMap;
662 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
663 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
665 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
666 DALI_TEST_CHECK( visual );
668 DummyControl actor = DummyControl::New( true );
669 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
670 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
672 Vector2 controlSize( 20.f, 30.f );
673 actor.SetSize( controlSize );
675 Stage::GetCurrent().Add( actor );
677 application.SendNotification();
678 application.Render();
680 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
682 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
684 application.SendNotification();
685 application.Render();
687 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
688 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
689 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
691 Property::Array array;
695 Property::Map attributes;
696 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
697 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
699 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
701 application.SendNotification();
702 application.Render();
704 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
705 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
706 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
715 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
716 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
719 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
721 application.SendNotification();
722 application.Render();
724 // Stop and jump to 3
725 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
727 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
729 application.SendNotification();
730 application.Render();
732 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
733 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
734 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
739 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
741 ToolkitTestApplication application;
742 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
744 int startFrame = 1, endFrame = 3;
745 Property::Array playRange;
746 playRange.PushBack( startFrame );
747 playRange.PushBack( endFrame );
749 Property::Map propertyMap;
750 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
751 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
752 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
753 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
755 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
756 DALI_TEST_CHECK( visual );
758 DummyControl actor = DummyControl::New( true );
759 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
760 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
762 Vector2 controlSize( 20.f, 30.f );
763 actor.SetSize( controlSize );
765 Stage::GetCurrent().Add( actor );
767 application.SendNotification();
768 application.Render();
770 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
772 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
773 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
774 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
776 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
777 DALI_TEST_CHECK( value );
779 Property::Array* result = value->GetArray();
780 DALI_TEST_CHECK( result );
782 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
783 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
786 playRange.PushBack( 0 );
787 playRange.PushBack( 2 );
789 Property::Map attributes;
790 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
791 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
793 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
795 application.SendNotification();
796 application.Render();
798 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
799 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
800 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
802 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
803 result = value->GetArray();
804 DALI_TEST_CHECK( result );
806 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
807 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
812 playRange.PushBack( startFrame );
813 playRange.PushBack( endFrame );
815 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
817 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
819 application.SendNotification();
820 application.Render();
822 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
823 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
825 result = value->GetArray();
826 DALI_TEST_CHECK( result );
828 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
829 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );