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 <toolkit-vector-animation-renderer.h>
25 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
27 #include <dali-toolkit/devel-api/controls/control-devel.h>
28 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
31 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
32 #include <dali/devel-api/rendering/renderer-devel.h>
33 #include <dali/devel-api/adaptor-framework/window-devel.h>
34 #include "dummy-control.h"
37 using namespace Dali::Toolkit;
39 void dali_animated_vector_image_visual_startup(void)
41 test_return_value = TET_UNDEF;
44 void dali_animated_vector_image_visual_cleanup(void)
46 test_return_value = TET_PASS;
52 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
54 bool gAnimationFinishedSignalFired = false;
56 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
58 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
60 gAnimationFinishedSignalFired = true;
66 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
68 ToolkitTestApplication application;
69 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
71 VisualFactory factory = VisualFactory::Get();
72 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
73 DALI_TEST_CHECK( visual );
75 DummyControl actor = DummyControl::New( true );
76 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
77 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
78 actor.SetSize( 200.0f, 200.0f );
79 Stage::GetCurrent().Add( actor );
81 application.SendNotification();
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 // renderer is added to actor
118 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
119 Renderer renderer = actor.GetRendererAt( 0u );
120 DALI_TEST_CHECK( renderer );
123 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
128 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
130 ToolkitTestApplication application;
131 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
133 int startFrame = 1, endFrame = 3;
134 Property::Array playRange;
135 playRange.PushBack( startFrame );
136 playRange.PushBack( endFrame );
138 Property::Map propertyMap;
139 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
140 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
141 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
142 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
144 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
145 DALI_TEST_CHECK( visual );
147 DummyControl actor = DummyControl::New( true );
148 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
149 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
150 actor.SetSize( 200.0f, 200.0f );
151 Stage::GetCurrent().Add( actor );
153 application.SendNotification();
154 application.Render();
156 // renderer is added to actor
157 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
158 Renderer renderer = actor.GetRendererAt( 0u );
159 DALI_TEST_CHECK( renderer );
162 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
167 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
169 ToolkitTestApplication application;
170 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
172 int startFrame = 1, endFrame = 3;
173 Property::Array playRange;
174 playRange.PushBack( startFrame );
175 playRange.PushBack( endFrame );
177 Property::Map propertyMap;
178 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
179 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
180 .Add( "loopCount", 3 )
181 .Add( "playRange", playRange )
182 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
183 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
185 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
186 DALI_TEST_CHECK( visual );
188 DummyControl actor = DummyControl::New( true );
189 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
190 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
191 actor.SetSize( 200.0f, 200.0f );
192 Stage::GetCurrent().Add( actor );
194 application.SendNotification();
195 application.Render();
197 // renderer is added to actor
198 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
199 Renderer renderer = actor.GetRendererAt( 0u );
200 DALI_TEST_CHECK( renderer );
202 Property::Map resultMap;
203 visual.CreatePropertyMap( resultMap );
205 // check the property values from the returned map from a visual
206 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
207 DALI_TEST_CHECK( value );
208 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
210 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
211 DALI_TEST_CHECK( value );
212 DALI_TEST_CHECK( value->Get< int >() == 3 );
214 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
215 DALI_TEST_CHECK( value );
217 Property::Array* result = value->GetArray();
218 DALI_TEST_CHECK( result );
220 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
221 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
223 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
224 DALI_TEST_CHECK( value );
225 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
227 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
228 DALI_TEST_CHECK( value );
229 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
232 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
237 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
239 ToolkitTestApplication application;
240 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
242 int startFrame = 1, endFrame = 3;
243 Property::Array playRange;
244 playRange.PushBack( startFrame );
245 playRange.PushBack( endFrame );
247 Property::Map propertyMap;
248 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
249 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
250 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
251 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
253 // request AnimatedVectorImageVisual with a property map
254 VisualFactory factory = VisualFactory::Get();
255 Visual::Base visual = factory.CreateVisual( propertyMap );
257 DummyControl actor = DummyControl::New( true );
258 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
259 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
261 Vector2 controlSize( 20.f, 30.f );
262 actor.SetSize( controlSize );
264 Stage::GetCurrent().Add( actor );
266 application.SendNotification();
267 application.Render();
269 Property::Map resultMap;
270 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
272 // check the property values from the returned map from a visual
273 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
274 DALI_TEST_CHECK( value );
275 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
277 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
278 DALI_TEST_CHECK( value );
279 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
281 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
282 DALI_TEST_CHECK( value );
283 DALI_TEST_CHECK( value->Get< int >() == 3 );
285 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
286 DALI_TEST_CHECK( value );
288 Property::Array* result = value->GetArray();
289 DALI_TEST_CHECK( result );
291 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
292 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
294 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
295 DALI_TEST_CHECK( value );
296 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
298 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
299 DALI_TEST_CHECK( value );
300 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
302 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
303 DALI_TEST_CHECK( value );
305 // request AnimatedVectorImageVisual with an URL
306 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
309 visual2.CreatePropertyMap( resultMap );
311 // check the property values from the returned map from a visual
312 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
313 DALI_TEST_CHECK( value );
314 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
316 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
317 DALI_TEST_CHECK( value );
318 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
323 int UtcDaliAnimatedVectorImageVisualPlayback(void)
325 ToolkitTestApplication application;
327 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
330 // request AnimatedVectorImageVisual with a property map
331 VisualFactory factory = VisualFactory::Get();
332 Visual::Base visual = factory.CreateVisual(
334 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
335 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
337 DummyControl dummyControl = DummyControl::New( true );
338 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
339 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
340 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
342 Property::Map attributes;
343 tet_infoline( "Test Play action" );
344 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
346 Stage::GetCurrent().Add( dummyControl );
347 application.SendNotification();
348 application.Render( 16 );
350 std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); // wait for one animation loop (16fps, 5frames, need 80ms)
352 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
353 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
354 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
356 tet_infoline( "Test Pause action" );
357 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
359 application.SendNotification();
360 application.Render(16);
362 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
364 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
365 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
366 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
368 tet_infoline( "Test Play action" );
369 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
371 application.SendNotification();
372 application.Render(16);
374 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
375 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
376 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
378 tet_infoline( "Test Stop action" );
379 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
381 application.SendNotification();
382 application.Render(16);
384 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
385 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
386 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
388 tet_infoline( "Test Stop action again" );
389 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
391 application.SendNotification();
392 application.Render(16);
394 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
395 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
396 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
398 tet_infoline( "Test Play action" );
399 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
401 application.SendNotification();
402 application.Render(16);
404 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
405 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
406 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
408 tet_infoline( "Off stage" );
409 dummyControl.Unparent();
411 application.SendNotification();
412 application.Render(16);
414 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
415 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
416 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
418 tet_infoline( "On stage again" );
419 Stage::GetCurrent().Add( dummyControl );
421 application.SendNotification();
422 application.Render(16);
424 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
425 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
426 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
428 tet_infoline( "Test Play action" );
429 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
431 application.SendNotification();
432 application.Render(16);
434 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
435 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
436 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
439 Vector3 newSize( 100.0f, 100.0f, 0.0f );
440 dummyControl.SetSize( newSize );
442 application.SendNotification();
443 application.Render(16);
445 // Size should be changed
446 Vector3 naturalSize = dummyControl.GetNaturalSize();
447 DALI_TEST_CHECK( naturalSize == newSize );
449 dummyControl.Unparent();
455 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
457 ToolkitTestApplication application;
458 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
460 VisualFactory factory = VisualFactory::Get();
461 Property::Map properties;
462 Property::Map shader;
463 const std::string vertexShader = "Foobar";
464 const std::string fragmentShader = "Foobar sampler2D Foobar";
465 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
466 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
468 properties[Visual::Property::TYPE] = Visual::IMAGE;
469 properties[Visual::Property::SHADER] = shader;
470 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
472 Visual::Base visual = factory.CreateVisual( properties );
474 // trigger creation through setting on stage
475 DummyControl dummy = DummyControl::New( true );
476 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
477 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
479 dummy.SetSize( 200.f, 200.f );
480 dummy.SetParentOrigin( ParentOrigin::CENTER );
481 Stage::GetCurrent().Add( dummy );
483 application.SendNotification();
484 application.Render();
486 Renderer renderer = dummy.GetRendererAt( 0 );
487 Shader shader2 = renderer.GetShader();
488 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
489 Property::Map* map = value.GetMap();
490 DALI_TEST_CHECK( map );
492 std::string resultFragmentShader, resultVertexShader;
493 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
494 fragment->Get( resultFragmentShader );
495 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
497 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
498 vertex->Get( resultVertexShader );
499 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
504 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
506 ToolkitTestApplication application;
507 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
509 VisualFactory factory = VisualFactory::Get();
510 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
511 DALI_TEST_CHECK( visual );
513 DummyControl actor = DummyControl::New( true );
514 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
515 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
517 Vector2 controlSize( 20.f, 30.f );
520 Stage::GetCurrent().Add( actor );
522 application.SendNotification();
523 application.Render();
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 visual.GetNaturalSize( naturalSize );
536 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
541 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
543 ToolkitTestApplication application;
544 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
546 Property::Map propertyMap;
547 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
548 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
549 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
551 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
552 DALI_TEST_CHECK( visual );
554 DummyControl actor = DummyControl::New( true );
555 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
556 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
558 Vector2 controlSize( 20.f, 30.f );
559 actor.SetSize( controlSize );
561 Stage::GetCurrent().Add( actor );
563 Property::Map attributes;
564 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
566 application.SendNotification();
567 application.Render();
569 // Trigger count is 1 - animation finished
570 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
572 // renderer is added to actor
573 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
574 Renderer renderer = actor.GetRendererAt( 0u );
575 DALI_TEST_CHECK( renderer );
580 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
582 ToolkitTestApplication application;
583 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
585 int startFrame = 1, endFrame = 3;
586 Property::Array array;
587 array.PushBack( endFrame );
588 array.PushBack( startFrame );
590 Property::Map propertyMap;
591 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
592 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
593 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
595 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
596 DALI_TEST_CHECK( visual );
598 DummyControl actor = DummyControl::New( true );
599 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
600 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
602 Vector2 controlSize( 20.f, 30.f );
603 actor.SetSize( controlSize );
605 Stage::GetCurrent().Add( actor );
607 Property::Map attributes;
608 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
610 application.SendNotification();
611 application.Render();
613 // renderer is added to actor
614 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
615 Renderer renderer = actor.GetRendererAt( 0u );
616 DALI_TEST_CHECK( renderer );
618 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
619 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
621 int resultStartFrame, resultEndFrame;
622 Property::Array* result = value->GetArray();
623 result->GetElementAt( 0 ).Get( resultStartFrame );
624 result->GetElementAt( 1 ).Get( resultEndFrame );
626 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
627 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
629 // Set invalid play range
632 array.PushBack( 100 );
635 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
636 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
638 application.SendNotification();
639 application.Render();
641 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
642 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
644 result = value->GetArray();
645 result->GetElementAt( 0 ).Get( resultStartFrame );
646 result->GetElementAt( 1 ).Get( resultEndFrame );
648 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
649 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
651 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
653 application.SendNotification();
654 application.Render();
656 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
658 application.SendNotification();
659 application.Render();
661 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
662 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
663 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
670 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
671 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
673 application.SendNotification();
674 application.Render();
676 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
677 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
679 result = value->GetArray();
680 result->GetElementAt( 0 ).Get( resultStartFrame );
681 result->GetElementAt( 1 ).Get( resultEndFrame );
683 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
684 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
686 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
687 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
692 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
694 ToolkitTestApplication application;
695 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
697 Property::Array array;
698 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
700 Property::Map propertyMap;
701 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
702 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
703 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
705 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
706 DALI_TEST_CHECK( visual );
708 DummyControl actor = DummyControl::New( true );
709 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
710 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
712 Vector2 controlSize( 20.f, 30.f );
713 actor.SetSize( controlSize );
715 Stage::GetCurrent().Add( actor );
717 Property::Map attributes;
718 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
720 application.SendNotification();
721 application.Render();
723 // renderer is added to actor
724 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
725 Renderer renderer = actor.GetRendererAt( 0u );
726 DALI_TEST_CHECK( renderer );
728 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
729 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
731 int resultStartFrame, resultEndFrame;
732 Property::Array* result = value->GetArray();
733 result->GetElementAt( 0 ).Get( resultStartFrame );
734 result->GetElementAt( 1 ).Get( resultEndFrame );
736 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
737 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
741 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
742 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
745 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
746 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
748 application.SendNotification();
749 application.Render();
751 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
752 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
754 result = value->GetArray();
755 result->GetElementAt( 0 ).Get( resultStartFrame );
756 result->GetElementAt( 1 ).Get( resultEndFrame );
758 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
759 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
761 // Set invalid play range
764 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
767 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
768 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
770 application.SendNotification();
771 application.Render();
773 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
774 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
776 result = value->GetArray();
777 result->GetElementAt( 0 ).Get( resultStartFrame );
778 result->GetElementAt( 1 ).Get( resultEndFrame );
780 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
781 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
786 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
788 ToolkitTestApplication application;
789 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
791 Property::Map propertyMap;
792 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
793 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
794 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
796 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
797 DALI_TEST_CHECK( visual );
799 DummyControl actor = DummyControl::New( true );
800 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
801 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
803 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
805 Vector2 controlSize( 20.f, 30.f );
806 actor.SetSize( controlSize );
808 Stage::GetCurrent().Add( actor );
810 Property::Map attributes;
811 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
813 application.SendNotification();
814 application.Render();
816 // Wait for animation finish
817 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
819 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
820 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
821 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
823 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
828 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
830 ToolkitTestApplication application;
831 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
833 Property::Map propertyMap;
834 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
835 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
837 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
838 DALI_TEST_CHECK( visual );
840 DummyControl actor = DummyControl::New( true );
841 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
842 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
844 Vector2 controlSize( 20.f, 30.f );
845 actor.SetSize( controlSize );
847 Stage::GetCurrent().Add( actor );
849 application.SendNotification();
850 application.Render();
852 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
854 application.SendNotification();
855 application.Render();
857 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
858 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
859 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
861 Property::Array array;
865 Property::Map attributes;
866 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
867 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
869 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
871 application.SendNotification();
872 application.Render();
874 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
875 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
876 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
885 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
886 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
889 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
891 application.SendNotification();
892 application.Render();
894 // Stop and jump to 3
895 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
897 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
899 application.SendNotification();
900 application.Render();
902 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
903 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
904 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
906 // Jump to the same position
907 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
909 application.SendNotification();
910 application.Render();
912 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
913 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
914 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
919 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
921 ToolkitTestApplication application;
922 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
924 int startFrame = 1, endFrame = 3;
925 Property::Array playRange;
926 playRange.PushBack( startFrame );
927 playRange.PushBack( endFrame );
929 Property::Map propertyMap;
930 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
931 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
932 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
933 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
935 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
936 DALI_TEST_CHECK( visual );
938 DummyControl actor = DummyControl::New( true );
939 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
940 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
942 Vector2 controlSize( 20.f, 30.f );
943 actor.SetSize( controlSize );
945 Stage::GetCurrent().Add( actor );
947 application.SendNotification();
948 application.Render();
950 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
951 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
952 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
954 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
955 DALI_TEST_CHECK( value );
957 Property::Array* result = value->GetArray();
958 DALI_TEST_CHECK( result );
960 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
961 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
964 playRange.PushBack( 0 );
965 playRange.PushBack( 2 );
967 Property::Map attributes;
968 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
969 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
971 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
973 application.SendNotification();
974 application.Render();
976 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
977 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
978 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
980 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
981 result = value->GetArray();
982 DALI_TEST_CHECK( result );
984 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
985 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
990 playRange.PushBack( startFrame );
991 playRange.PushBack( endFrame );
993 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
995 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
997 application.SendNotification();
998 application.Render();
1000 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1001 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1003 result = value->GetArray();
1004 DALI_TEST_CHECK( result );
1006 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1007 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1009 // Play and update property
1011 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1013 application.SendNotification();
1014 application.Render();
1016 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1018 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1020 application.SendNotification();
1021 application.Render();
1023 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1024 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1025 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1030 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1032 ToolkitTestApplication application;
1033 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1035 Property::Map propertyMap;
1036 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1037 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1038 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1039 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1041 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1042 DALI_TEST_CHECK( visual );
1044 DummyControl actor = DummyControl::New( true );
1045 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1046 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1048 Vector2 controlSize( 20.f, 30.f );
1049 actor.SetSize( controlSize );
1051 Stage::GetCurrent().Add( actor );
1053 Property::Map attributes;
1054 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1056 application.SendNotification();
1057 application.Render();
1059 // Trigger count is 1 - animation finished
1060 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1062 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1063 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1064 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1066 // Change stop behavior
1067 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1069 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1074 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1076 application.SendNotification();
1077 application.Render();
1079 // Trigger count is 1 - animation finished
1080 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1082 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1084 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1085 int totalFrameNumber = value1->Get< int >();
1087 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1088 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1090 // Change stop behavior
1091 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1092 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1094 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1099 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1101 application.SendNotification();
1102 application.Render();
1105 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1107 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1108 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1109 int currentFrameNumber = value->Get< int >();
1112 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1114 application.SendNotification();
1115 application.Render( 16 );
1117 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1118 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1119 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1124 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1126 ToolkitTestApplication application;
1127 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1129 Property::Map propertyMap;
1130 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1131 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1132 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1133 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1134 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1136 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1137 DALI_TEST_CHECK( visual );
1139 DummyControl actor = DummyControl::New( true );
1140 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1141 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1143 Vector2 controlSize( 20.f, 30.f );
1144 actor.SetSize( controlSize );
1146 Stage::GetCurrent().Add( actor );
1148 Property::Map attributes;
1149 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1151 application.SendNotification();
1152 application.Render();
1154 // Trigger count is 1 - animation finished
1155 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1157 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1158 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1159 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1161 // Change stop behavior
1162 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1164 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1167 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1169 application.SendNotification();
1170 application.Render();
1172 // Trigger count is 1 - animation finished
1173 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1175 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1176 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1177 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1179 // Change looping mode
1180 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1182 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1185 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1187 application.SendNotification();
1188 application.Render();
1190 // Trigger count is 1 - animation finished
1191 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1193 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1194 int totalFrameNumber = value1->Get< int >();
1196 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1197 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1198 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1203 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1205 ToolkitTestApplication application;
1206 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1208 Property::Map propertyMap;
1209 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1210 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1212 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1213 DALI_TEST_CHECK( visual );
1215 DummyControl actor = DummyControl::New( true );
1216 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1217 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1219 Vector2 controlSize( 20.f, 30.f );
1220 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1221 actor.SetSize( controlSize );
1222 actor.SetScale( controlScale );
1224 Stage::GetCurrent().Add( actor );
1226 application.SendNotification();
1227 application.Render();
1229 application.SendNotification();
1230 application.Render();
1232 Renderer renderer = actor.GetRendererAt( 0u );
1233 DALI_TEST_CHECK( renderer );
1235 auto textureSet = renderer.GetTextures();
1236 auto texture = textureSet.GetTexture(0);
1238 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1239 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1241 // Change scale and size
1242 controlSize = Vector2( 50.f, 40.f );
1243 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1244 actor.SetSize( controlSize );
1245 actor.SetScale( controlScale );
1247 application.SendNotification();
1248 application.Render();
1250 application.SendNotification();
1251 application.Render();
1253 renderer = actor.GetRendererAt( 0u );
1254 DALI_TEST_CHECK( renderer );
1256 textureSet = renderer.GetTextures();
1257 texture = textureSet.GetTexture(0);
1259 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1260 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1265 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1267 ToolkitTestApplication application;
1268 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1270 Property::Map propertyMap;
1271 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1272 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1274 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1275 DALI_TEST_CHECK( visual1 );
1277 DummyControl actor1 = DummyControl::New( true );
1278 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1279 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1281 Vector2 controlSize( 20.f, 30.f );
1282 actor1.SetSize( controlSize );
1284 Stage::GetCurrent().Add( actor1 );
1286 propertyMap.Clear();
1287 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1288 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1290 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1291 DALI_TEST_CHECK( visual2 );
1293 DummyControl actor2 = DummyControl::New( true );
1294 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1295 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1297 actor2.SetSize( controlSize );
1299 Stage::GetCurrent().Add( actor2 );
1301 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1303 application.SendNotification();
1304 application.Render();
1306 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1308 Property::Map attributes;
1309 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1311 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1312 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1314 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1316 // renderer is added to actor
1317 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1318 Renderer renderer1 = actor1.GetRendererAt( 0u );
1319 DALI_TEST_CHECK( renderer1 );
1321 // renderer is added to actor
1322 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1323 Renderer renderer2 = actor2.GetRendererAt( 0u );
1324 DALI_TEST_CHECK( renderer2 );
1329 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1331 ToolkitTestApplication application;
1332 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1334 Property::Map propertyMap;
1335 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1336 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1338 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1339 DALI_TEST_CHECK( visual );
1341 DummyControl actor = DummyControl::New( true );
1342 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1343 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1345 Vector2 controlSize( 20.f, 30.f );
1346 actor.SetSize( controlSize );
1348 Stage::GetCurrent().Add( actor );
1350 application.SendNotification();
1351 application.Render();
1353 Property::Map attributes;
1354 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1356 // Check rendering behavior
1357 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1358 Renderer renderer = actor.GetRendererAt( 0u );
1359 DALI_TEST_CHECK( renderer );
1360 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1362 actor.SetVisible( false );
1364 application.SendNotification();
1365 application.Render();
1367 // Check rendering behavior again
1368 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1373 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1375 ToolkitTestApplication application;
1376 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1378 Property::Map propertyMap;
1379 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1380 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1382 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1383 DALI_TEST_CHECK( visual );
1385 DummyControl actor = DummyControl::New( true );
1386 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1387 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1389 Vector2 controlSize( 20.f, 30.f );
1390 actor.SetSize( controlSize );
1392 Stage::GetCurrent().Add( actor );
1394 application.SendNotification();
1395 application.Render();
1397 Property::Map attributes;
1398 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1400 // Check rendering behavior
1401 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1402 Renderer renderer = actor.GetRendererAt( 0u );
1403 DALI_TEST_CHECK( renderer );
1404 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1406 Window window = DevelWindow::Get( actor );
1409 application.SendNotification();
1410 application.Render();
1412 // Check rendering behavior again
1413 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );