2 * Copyright (c) 2020 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.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
79 application.GetScene().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 SetOffScene().
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.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
112 application.GetScene().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.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
151 application.GetScene().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.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
192 application.GetScene().Add( actor );
194 application.SendNotification();
195 application.Render();
197 // Trigger count is 1 - render a frame
198 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
200 // renderer is added to actor
201 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
203 Renderer renderer = actor.GetRendererAt( 0u );
204 DALI_TEST_CHECK( renderer );
206 Property::Map resultMap;
207 visual.CreatePropertyMap( resultMap );
209 // check the property values from the returned map from a visual
210 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
211 DALI_TEST_CHECK( value );
212 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
214 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
215 DALI_TEST_CHECK( value );
216 DALI_TEST_CHECK( value->Get< int >() == 3 );
218 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
219 DALI_TEST_CHECK( value );
221 Property::Array* result = value->GetArray();
222 DALI_TEST_CHECK( result );
224 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
225 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
227 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
228 DALI_TEST_CHECK( value );
229 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
231 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
232 DALI_TEST_CHECK( value );
233 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
236 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
241 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
243 ToolkitTestApplication application;
244 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
246 int startFrame = 1, endFrame = 3;
247 Property::Array playRange;
248 playRange.PushBack( startFrame );
249 playRange.PushBack( endFrame );
251 Property::Map propertyMap;
252 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
253 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
254 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
255 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
257 // request AnimatedVectorImageVisual with a property map
258 VisualFactory factory = VisualFactory::Get();
259 Visual::Base visual = factory.CreateVisual( propertyMap );
261 DummyControl actor = DummyControl::New( true );
262 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
263 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
265 Vector2 controlSize( 20.f, 30.f );
266 actor.SetProperty( Actor::Property::SIZE, controlSize );
268 application.GetScene().Add( actor );
270 application.SendNotification();
271 application.Render();
273 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
275 Property::Map resultMap;
276 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
278 // check the property values from the returned map from a visual
279 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
280 DALI_TEST_CHECK( value );
281 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
283 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
284 DALI_TEST_CHECK( value );
285 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
287 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
288 DALI_TEST_CHECK( value );
289 DALI_TEST_CHECK( value->Get< int >() == 3 );
291 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
292 DALI_TEST_CHECK( value );
294 Property::Array* result = value->GetArray();
295 DALI_TEST_CHECK( result );
297 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
298 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
300 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
301 DALI_TEST_CHECK( value );
302 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
304 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
305 DALI_TEST_CHECK( value );
306 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
308 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
309 DALI_TEST_CHECK( value );
311 // request AnimatedVectorImageVisual with an URL
312 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
315 visual2.CreatePropertyMap( resultMap );
317 // check the property values from the returned map from a visual
318 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
319 DALI_TEST_CHECK( value );
320 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
322 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
323 DALI_TEST_CHECK( value );
324 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
329 int UtcDaliAnimatedVectorImageVisualPlayback(void)
331 ToolkitTestApplication application;
333 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
336 // request AnimatedVectorImageVisual with a property map
337 VisualFactory factory = VisualFactory::Get();
338 Visual::Base visual = factory.CreateVisual(
340 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
341 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
343 DummyControl dummyControl = DummyControl::New( true );
344 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
345 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
346 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
348 Property::Map attributes;
349 tet_infoline( "Test Play action" );
350 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
352 application.GetScene().Add( dummyControl );
353 application.SendNotification();
354 application.Render( 16 );
356 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
357 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
358 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
360 tet_infoline( "Test Pause action" );
361 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
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 >() == DevelImageVisual::PlayState::PAUSED );
370 tet_infoline( "Test Play action" );
371 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
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 >() == DevelImageVisual::PlayState::PLAYING );
380 tet_infoline( "Test Stop action" );
381 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, 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 >() == DevelImageVisual::PlayState::STOPPED );
390 tet_infoline( "Test Stop action again" );
391 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
393 application.SendNotification();
394 application.Render(16);
396 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
397 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
398 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
400 tet_infoline( "Test Play action" );
401 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
403 application.SendNotification();
404 application.Render(16);
406 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
407 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
408 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
410 tet_infoline( "Off stage" );
411 dummyControl.Unparent();
413 application.SendNotification();
414 application.Render(16);
416 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
417 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
418 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
420 tet_infoline( "On stage again" );
421 application.GetScene().Add( dummyControl );
423 application.SendNotification();
424 application.Render(16);
426 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
427 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
428 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
430 tet_infoline( "Test Play action" );
431 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
433 application.SendNotification();
434 application.Render(16);
436 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
437 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
438 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
441 Vector3 newSize( 100.0f, 100.0f, 0.0f );
442 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
444 application.SendNotification();
445 application.Render(16);
447 // Size should be changed
448 Vector3 naturalSize = dummyControl.GetNaturalSize();
449 DALI_TEST_CHECK( naturalSize == newSize );
451 dummyControl.Unparent();
457 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
459 ToolkitTestApplication application;
460 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
462 VisualFactory factory = VisualFactory::Get();
463 Property::Map properties;
464 Property::Map shader;
465 const std::string vertexShader = "Foobar";
466 const std::string fragmentShader = "Foobar sampler2D Foobar";
467 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
468 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
470 properties[Visual::Property::TYPE] = Visual::IMAGE;
471 properties[Visual::Property::SHADER] = shader;
472 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
474 Visual::Base visual = factory.CreateVisual( properties );
476 // trigger creation through setting on stage
477 DummyControl dummy = DummyControl::New( true );
478 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
479 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
481 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
482 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
483 application.GetScene().Add( dummy );
485 application.SendNotification();
486 application.Render();
488 Renderer renderer = dummy.GetRendererAt( 0 );
489 Shader shader2 = renderer.GetShader();
490 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
491 Property::Map* map = value.GetMap();
492 DALI_TEST_CHECK( map );
494 std::string resultFragmentShader, resultVertexShader;
495 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
496 fragment->Get( resultFragmentShader );
497 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
499 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
500 vertex->Get( resultVertexShader );
501 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
506 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
508 ToolkitTestApplication application;
509 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
511 VisualFactory factory = VisualFactory::Get();
512 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
513 DALI_TEST_CHECK( visual );
515 DummyControl actor = DummyControl::New( true );
516 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
517 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
519 Vector2 controlSize( 20.f, 30.f );
522 application.GetScene().Add( actor );
524 application.SendNotification();
525 application.Render();
527 visual.GetNaturalSize( naturalSize );
529 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
531 actor.SetProperty( Actor::Property::SIZE, controlSize );
533 application.SendNotification();
534 application.Render();
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.SetProperty( Actor::Property::SIZE, controlSize );
563 application.GetScene().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 1 - render a frame
572 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), 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 = 1, endFrame = 3;
588 Property::Array array;
589 array.PushBack( endFrame );
590 array.PushBack( startFrame );
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.SetProperty( Actor::Property::SIZE, controlSize );
607 application.GetScene().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 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
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
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 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
647 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
648 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
650 result = value->GetArray();
651 result->GetElementAt( 0 ).Get( resultStartFrame );
652 result->GetElementAt( 1 ).Get( resultEndFrame );
654 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
655 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
657 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
659 application.SendNotification();
660 application.Render();
662 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
664 application.SendNotification();
665 application.Render();
667 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
669 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
670 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
671 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
678 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
679 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
681 application.SendNotification();
682 application.Render();
684 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
686 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
687 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
689 result = value->GetArray();
690 result->GetElementAt( 0 ).Get( resultStartFrame );
691 result->GetElementAt( 1 ).Get( resultEndFrame );
693 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
694 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
696 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
697 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
702 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
704 ToolkitTestApplication application;
705 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
707 Property::Array array;
708 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
710 Property::Map propertyMap;
711 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
712 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
713 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
715 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
716 DALI_TEST_CHECK( visual );
718 DummyControl actor = DummyControl::New( true );
719 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
720 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
722 Vector2 controlSize( 20.f, 30.f );
723 actor.SetProperty( Actor::Property::SIZE, controlSize );
725 application.GetScene().Add( actor );
727 Property::Map attributes;
728 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
730 application.SendNotification();
731 application.Render();
733 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
735 // renderer is added to actor
736 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
737 Renderer renderer = actor.GetRendererAt( 0u );
738 DALI_TEST_CHECK( renderer );
740 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
741 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
743 int resultStartFrame, resultEndFrame;
744 Property::Array* result = value->GetArray();
745 result->GetElementAt( 0 ).Get( resultStartFrame );
746 result->GetElementAt( 1 ).Get( resultEndFrame );
748 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
749 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
753 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
754 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
757 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
758 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
760 application.SendNotification();
761 application.Render();
763 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
765 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
766 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
768 result = value->GetArray();
769 result->GetElementAt( 0 ).Get( resultStartFrame );
770 result->GetElementAt( 1 ).Get( resultEndFrame );
772 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
773 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
775 // Set invalid play range
778 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
781 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
782 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
784 application.SendNotification();
785 application.Render();
787 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
789 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
790 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
792 result = value->GetArray();
793 result->GetElementAt( 0 ).Get( resultStartFrame );
794 result->GetElementAt( 1 ).Get( resultEndFrame );
796 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
797 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
802 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
804 ToolkitTestApplication application;
805 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
807 Property::Map propertyMap;
808 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
809 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
810 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
812 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
813 DALI_TEST_CHECK( visual );
815 DummyControl actor = DummyControl::New( true );
816 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
817 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
819 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
821 Vector2 controlSize( 20.f, 30.f );
822 actor.SetProperty( Actor::Property::SIZE, controlSize );
824 application.GetScene().Add( actor );
826 Property::Map attributes;
827 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
829 application.SendNotification();
830 application.Render();
832 // Wait for animation finish
833 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
835 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
836 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
837 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
839 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
844 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
846 ToolkitTestApplication application;
847 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
849 Property::Map propertyMap;
850 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
851 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
853 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
854 DALI_TEST_CHECK( visual );
856 tet_printf( "1. Visual is created.\n" );
858 DummyControl actor = DummyControl::New( true );
859 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
860 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
862 Vector2 controlSize( 20.f, 30.f );
863 actor.SetProperty( Actor::Property::SIZE, controlSize );
865 application.GetScene().Add( actor );
867 application.SendNotification();
868 application.Render();
870 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
872 application.SendNotification();
873 application.Render();
875 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
877 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
878 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
879 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
881 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
883 Property::Array array;
887 Property::Map attributes;
888 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
889 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
891 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
893 application.SendNotification();
894 application.Render();
896 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
898 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
899 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
900 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
902 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
911 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
912 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
915 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
917 application.SendNotification();
918 application.Render();
920 // Stop and jump to 3
921 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
923 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
925 application.SendNotification();
926 application.Render();
928 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
930 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
931 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
932 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
934 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
936 // Jump to the same position
937 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
939 application.SendNotification();
940 application.Render();
942 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
944 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
945 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
946 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
948 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
953 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
955 ToolkitTestApplication application;
956 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
958 int startFrame = 1, endFrame = 3;
959 Property::Array playRange;
960 playRange.PushBack( startFrame );
961 playRange.PushBack( endFrame );
963 Property::Map propertyMap;
964 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
965 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
966 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
967 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
969 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
970 DALI_TEST_CHECK( visual );
972 DummyControl actor = DummyControl::New( true );
973 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
974 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
976 Vector2 controlSize( 20.f, 30.f );
977 actor.SetProperty( Actor::Property::SIZE, controlSize );
979 application.GetScene().Add( actor );
981 application.SendNotification();
982 application.Render();
984 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
986 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
987 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
988 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
990 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
991 DALI_TEST_CHECK( value );
993 Property::Array* result = value->GetArray();
994 DALI_TEST_CHECK( result );
996 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
997 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1000 playRange.PushBack( 0 );
1001 playRange.PushBack( 2 );
1003 Property::Map attributes;
1004 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1005 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1007 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1009 application.SendNotification();
1010 application.Render();
1012 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1014 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1015 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1016 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1018 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1019 result = value->GetArray();
1020 DALI_TEST_CHECK( result );
1022 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1023 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1028 playRange.PushBack( startFrame );
1029 playRange.PushBack( endFrame );
1031 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1033 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1035 application.SendNotification();
1036 application.Render();
1038 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1040 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1041 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1043 result = value->GetArray();
1044 DALI_TEST_CHECK( result );
1046 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1047 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1049 // Play and update property
1051 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1053 application.SendNotification();
1054 application.Render();
1056 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1058 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1060 application.SendNotification();
1061 application.Render();
1063 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1064 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1065 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1070 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1072 ToolkitTestApplication application;
1073 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1075 Property::Map propertyMap;
1076 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1077 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1078 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1079 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1081 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1082 DALI_TEST_CHECK( visual );
1084 DummyControl actor = DummyControl::New( true );
1085 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1086 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1088 Vector2 controlSize( 20.f, 30.f );
1089 actor.SetProperty( Actor::Property::SIZE, controlSize );
1091 application.GetScene().Add( actor );
1093 Property::Map attributes;
1094 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1096 application.SendNotification();
1097 application.Render();
1099 // Trigger count is 1 - animation finished
1100 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1102 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1103 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1104 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1106 // Change stop behavior
1107 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1109 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1114 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1116 application.SendNotification();
1117 application.Render();
1119 // Trigger count is 1 - animation finished
1120 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1122 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1124 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1125 int totalFrameNumber = value1->Get< int >();
1127 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1128 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1130 // Change stop behavior
1131 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1132 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1134 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1139 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1141 application.SendNotification();
1142 application.Render();
1145 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1147 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1148 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1149 int currentFrameNumber = value->Get< int >();
1152 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1154 application.SendNotification();
1155 application.Render( 16 );
1157 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1158 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1159 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1164 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1166 ToolkitTestApplication application;
1167 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1169 Property::Map propertyMap;
1170 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1171 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1172 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1173 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1174 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1176 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1177 DALI_TEST_CHECK( visual );
1179 DummyControl actor = DummyControl::New( true );
1180 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1181 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1183 Vector2 controlSize( 20.f, 30.f );
1184 actor.SetProperty( Actor::Property::SIZE, controlSize );
1186 application.GetScene().Add( actor );
1188 Property::Map attributes;
1189 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1191 application.SendNotification();
1192 application.Render();
1194 // Trigger count is 1 - animation finished
1195 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1197 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1198 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1199 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1201 // Change stop behavior
1202 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1204 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1207 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1209 application.SendNotification();
1210 application.Render();
1212 // Trigger count is 1 - animation finished
1213 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1215 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1216 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1217 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1219 // Change looping mode
1220 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1222 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1225 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1227 application.SendNotification();
1228 application.Render();
1230 // Trigger count is 1 - animation finished
1231 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1233 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1234 int totalFrameNumber = value1->Get< int >();
1236 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1237 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1238 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1243 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1245 ToolkitTestApplication application;
1246 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1248 Property::Map propertyMap;
1249 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1250 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1252 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1253 DALI_TEST_CHECK( visual );
1255 DummyControl actor = DummyControl::New( true );
1256 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1257 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1259 Vector2 controlSize( 20.f, 30.f );
1260 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1261 actor.SetProperty( Actor::Property::SIZE, controlSize );
1262 actor.SetProperty( Actor::Property::SCALE, controlScale );
1264 application.GetScene().Add( actor );
1266 application.SendNotification();
1267 application.Render();
1269 application.SendNotification();
1270 application.Render();
1272 Renderer renderer = actor.GetRendererAt( 0u );
1273 DALI_TEST_CHECK( renderer );
1275 auto textureSet = renderer.GetTextures();
1276 auto texture = textureSet.GetTexture(0);
1278 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1279 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1281 // Change scale and size
1282 controlSize = Vector2( 50.f, 40.f );
1283 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1284 actor.SetProperty( Actor::Property::SIZE, controlSize );
1285 actor.SetProperty( Actor::Property::SCALE, controlScale );
1287 application.SendNotification();
1288 application.Render();
1290 application.SendNotification();
1291 application.Render();
1293 renderer = actor.GetRendererAt( 0u );
1294 DALI_TEST_CHECK( renderer );
1296 textureSet = renderer.GetTextures();
1297 texture = textureSet.GetTexture(0);
1299 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1300 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1305 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1307 ToolkitTestApplication application;
1308 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1310 Property::Map propertyMap;
1311 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1312 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1314 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1315 DALI_TEST_CHECK( visual1 );
1317 DummyControl actor1 = DummyControl::New( true );
1318 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1319 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1321 Vector2 controlSize( 20.f, 30.f );
1322 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1324 application.GetScene().Add( actor1 );
1326 propertyMap.Clear();
1327 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1328 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1330 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1331 DALI_TEST_CHECK( visual2 );
1333 DummyControl actor2 = DummyControl::New( true );
1334 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1335 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1337 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1339 application.GetScene().Add( actor2 );
1341 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1343 application.SendNotification();
1344 application.Render();
1346 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1348 Property::Map attributes;
1349 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1351 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1352 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1354 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1356 // renderer is added to actor
1357 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1358 Renderer renderer1 = actor1.GetRendererAt( 0u );
1359 DALI_TEST_CHECK( renderer1 );
1361 // renderer is added to actor
1362 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1363 Renderer renderer2 = actor2.GetRendererAt( 0u );
1364 DALI_TEST_CHECK( renderer2 );
1369 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1371 ToolkitTestApplication application;
1372 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1374 Property::Map propertyMap;
1375 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1376 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1378 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1379 DALI_TEST_CHECK( visual );
1381 DummyControl actor = DummyControl::New( true );
1382 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1383 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1385 Vector2 controlSize( 20.f, 30.f );
1386 actor.SetProperty( Actor::Property::SIZE, controlSize );
1388 application.GetScene().Add( actor );
1390 application.SendNotification();
1391 application.Render();
1393 Property::Map attributes;
1394 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1396 application.SendNotification();
1397 application.Render();
1399 // Check rendering behavior
1400 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1401 Renderer renderer = actor.GetRendererAt( 0u );
1402 DALI_TEST_CHECK( renderer );
1403 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1405 actor.SetProperty( Actor::Property::VISIBLE, false );
1407 application.SendNotification();
1408 application.Render();
1410 // Check rendering behavior again
1411 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1416 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1418 ToolkitTestApplication application;
1419 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1421 Property::Map propertyMap;
1422 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1423 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1425 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1426 DALI_TEST_CHECK( visual );
1428 DummyControl actor = DummyControl::New( true );
1429 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1430 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1432 Vector2 controlSize( 20.f, 30.f );
1433 actor.SetProperty( Actor::Property::SIZE, controlSize );
1435 application.GetScene().Add( actor );
1437 application.SendNotification();
1438 application.Render();
1440 Property::Map attributes;
1441 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1443 application.SendNotification();
1444 application.Render();
1446 // Check rendering behavior
1447 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1448 Renderer renderer = actor.GetRendererAt( 0u );
1449 DALI_TEST_CHECK( renderer );
1450 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1452 Window window = DevelWindow::Get( actor );
1455 application.SendNotification();
1456 application.Render();
1458 // Check rendering behavior again
1459 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );