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 )
143 .Add( DevelVisual::Property::CORNER_RADIUS, 50.0f );
145 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
146 DALI_TEST_CHECK( visual );
148 DummyControl actor = DummyControl::New( true );
149 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
150 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
151 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
152 application.GetScene().Add( actor );
154 application.SendNotification();
155 application.Render();
157 // renderer is added to actor
158 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
159 Renderer renderer = actor.GetRendererAt( 0u );
160 DALI_TEST_CHECK( renderer );
163 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
168 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
170 ToolkitTestApplication application;
171 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
173 int startFrame = 1, endFrame = 3;
174 float cornerRadius = 50.0f;
175 Property::Array playRange;
176 playRange.PushBack( startFrame );
177 playRange.PushBack( endFrame );
179 Property::Map propertyMap;
180 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
181 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
182 .Add( "loopCount", 3 )
183 .Add( "playRange", playRange )
184 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
185 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE )
186 .Add( "redrawInScalingDown", false )
187 .Add( "cornerRadius", cornerRadius );
189 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
190 DALI_TEST_CHECK( visual );
192 DummyControl actor = DummyControl::New( true );
193 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
194 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
195 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
196 application.GetScene().Add( actor );
198 application.SendNotification();
199 application.Render();
201 // Trigger count is 1 - render a frame
202 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
204 // renderer is added to actor
205 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
207 Renderer renderer = actor.GetRendererAt( 0u );
208 DALI_TEST_CHECK( renderer );
210 Property::Map resultMap;
211 visual.CreatePropertyMap( resultMap );
213 // check the property values from the returned map from a visual
214 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
215 DALI_TEST_CHECK( value );
216 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
218 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
219 DALI_TEST_CHECK( value );
220 DALI_TEST_CHECK( value->Get< int >() == 3 );
222 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
223 DALI_TEST_CHECK( value );
225 Property::Array* result = value->GetArray();
226 DALI_TEST_CHECK( result );
228 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
229 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
231 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
232 DALI_TEST_CHECK( value );
233 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
235 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
236 DALI_TEST_CHECK( value );
237 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
239 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
240 DALI_TEST_CHECK( value );
241 DALI_TEST_CHECK( value->Get< bool >() == false );
243 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT );
244 DALI_TEST_CHECK( value );
245 DALI_TEST_EQUALS( value->Get< float >(), cornerRadius, TEST_LOCATION );
247 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
248 DALI_TEST_CHECK( value );
249 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::ABSOLUTE );
252 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
257 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
259 ToolkitTestApplication application;
260 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
262 int startFrame = 1, endFrame = 3;
263 float cornerRadius = 50.0f;
264 Property::Array playRange;
265 playRange.PushBack( startFrame );
266 playRange.PushBack( endFrame );
268 Property::Map propertyMap;
269 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
270 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
271 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
272 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
273 .Add( DevelVisual::Property::CORNER_RADIUS, cornerRadius )
274 .Add( DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE);
276 // request AnimatedVectorImageVisual with a property map
277 VisualFactory factory = VisualFactory::Get();
278 Visual::Base visual = factory.CreateVisual( propertyMap );
280 DummyControl actor = DummyControl::New( true );
281 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
282 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
284 Vector2 controlSize( 20.f, 30.f );
285 actor.SetProperty( Actor::Property::SIZE, controlSize );
287 application.GetScene().Add( actor );
289 application.SendNotification();
290 application.Render();
292 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
294 Property::Map resultMap;
295 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
297 // check the property values from the returned map from a visual
298 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
299 DALI_TEST_CHECK( value );
300 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
302 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
303 DALI_TEST_CHECK( value );
304 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
306 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
307 DALI_TEST_CHECK( value );
308 DALI_TEST_CHECK( value->Get< int >() == 3 );
310 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
311 DALI_TEST_CHECK( value );
313 Property::Array* result = value->GetArray();
314 DALI_TEST_CHECK( result );
316 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
317 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
319 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
320 DALI_TEST_CHECK( value );
321 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
323 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
324 DALI_TEST_CHECK( value );
325 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
327 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
328 DALI_TEST_CHECK( value );
330 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
331 DALI_TEST_CHECK( value );
332 DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value
334 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT );
335 DALI_TEST_CHECK( value );
336 DALI_TEST_EQUALS( value->Get< float >(), cornerRadius, TEST_LOCATION );
338 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
339 DALI_TEST_CHECK( value );
340 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::RELATIVE );
342 // request AnimatedVectorImageVisual with an URL
343 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
346 visual2.CreatePropertyMap( resultMap );
348 // check the property values from the returned map from a visual
349 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
350 DALI_TEST_CHECK( value );
351 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
353 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
354 DALI_TEST_CHECK( value );
355 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
360 int UtcDaliAnimatedVectorImageVisualPlayback(void)
362 ToolkitTestApplication application;
364 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
367 // request AnimatedVectorImageVisual with a property map
368 VisualFactory factory = VisualFactory::Get();
369 Visual::Base visual = factory.CreateVisual(
371 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
372 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
374 DummyControl dummyControl = DummyControl::New( true );
375 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
376 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
377 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
379 Property::Map attributes;
380 tet_infoline( "Test Play action" );
381 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
383 application.GetScene().Add( dummyControl );
384 application.SendNotification();
385 application.Render( 16 );
387 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
388 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
389 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
391 tet_infoline( "Test Pause action" );
392 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
394 application.SendNotification();
395 application.Render(16);
397 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
398 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
399 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
401 tet_infoline( "Test Play action" );
402 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
404 application.SendNotification();
405 application.Render(16);
407 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
408 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
409 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
411 tet_infoline( "Test Stop action" );
412 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
414 application.SendNotification();
415 application.Render(16);
417 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
418 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
419 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
421 tet_infoline( "Test Stop action again" );
422 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
424 application.SendNotification();
425 application.Render(16);
427 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
428 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
429 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
431 tet_infoline( "Test Play action" );
432 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
434 application.SendNotification();
435 application.Render(16);
437 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
438 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
439 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
441 tet_infoline( "Off stage" );
442 dummyControl.Unparent();
444 application.SendNotification();
445 application.Render(16);
447 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
448 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
449 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
451 tet_infoline( "On stage again" );
452 application.GetScene().Add( dummyControl );
454 application.SendNotification();
455 application.Render(16);
457 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
458 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
459 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
461 tet_infoline( "Test Play action" );
462 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
464 application.SendNotification();
465 application.Render(16);
467 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
468 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
469 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
472 Vector3 newSize( 100.0f, 100.0f, 0.0f );
473 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
475 application.SendNotification();
476 application.Render(16);
478 // Size should be changed
479 Vector3 naturalSize = dummyControl.GetNaturalSize();
480 DALI_TEST_CHECK( naturalSize == newSize );
482 dummyControl.Unparent();
488 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
490 ToolkitTestApplication application;
491 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
493 VisualFactory factory = VisualFactory::Get();
494 Property::Map properties;
495 Property::Map shader;
496 const std::string vertexShader = "Foobar";
497 const std::string fragmentShader = "Foobar sampler2D Foobar";
498 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
499 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
501 properties[Visual::Property::TYPE] = Visual::IMAGE;
502 properties[Visual::Property::SHADER] = shader;
503 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
505 Visual::Base visual = factory.CreateVisual( properties );
507 // trigger creation through setting on stage
508 DummyControl dummy = DummyControl::New( true );
509 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
510 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
512 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
513 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
514 application.GetScene().Add( dummy );
516 application.SendNotification();
517 application.Render();
519 Renderer renderer = dummy.GetRendererAt( 0 );
520 Shader shader2 = renderer.GetShader();
521 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
522 Property::Map* map = value.GetMap();
523 DALI_TEST_CHECK( map );
525 std::string resultFragmentShader, resultVertexShader;
526 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
527 fragment->Get( resultFragmentShader );
528 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
530 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
531 vertex->Get( resultVertexShader );
532 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
537 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
539 ToolkitTestApplication application;
540 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
542 VisualFactory factory = VisualFactory::Get();
543 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
544 DALI_TEST_CHECK( visual );
546 DummyControl actor = DummyControl::New( true );
547 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
548 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
550 Vector2 controlSize( 20.f, 30.f );
553 application.GetScene().Add( actor );
555 application.SendNotification();
556 application.Render();
558 visual.GetNaturalSize( naturalSize );
560 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
562 actor.SetProperty( Actor::Property::SIZE, controlSize );
564 application.SendNotification();
565 application.Render();
567 visual.GetNaturalSize( naturalSize );
569 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
574 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
576 ToolkitTestApplication application;
577 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
579 Property::Map propertyMap;
580 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
581 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
582 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
584 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
585 DALI_TEST_CHECK( visual );
587 DummyControl actor = DummyControl::New( true );
588 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
589 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
591 Vector2 controlSize( 20.f, 30.f );
592 actor.SetProperty( Actor::Property::SIZE, controlSize );
594 application.GetScene().Add( actor );
596 Property::Map attributes;
597 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
599 application.SendNotification();
600 application.Render();
602 // Trigger count is 1 - render a frame
603 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
605 // renderer is added to actor
606 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
607 Renderer renderer = actor.GetRendererAt( 0u );
608 DALI_TEST_CHECK( renderer );
613 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
615 ToolkitTestApplication application;
616 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
618 int startFrame = 1, endFrame = 3;
619 Property::Array array;
620 array.PushBack( endFrame );
621 array.PushBack( startFrame );
623 Property::Map propertyMap;
624 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
625 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
626 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
628 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
629 DALI_TEST_CHECK( visual );
631 DummyControl actor = DummyControl::New( true );
632 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
633 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
635 Vector2 controlSize( 20.f, 30.f );
636 actor.SetProperty( Actor::Property::SIZE, controlSize );
638 application.GetScene().Add( actor );
640 Property::Map attributes;
641 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
643 application.SendNotification();
644 application.Render();
646 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
648 // renderer is added to actor
649 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
650 Renderer renderer = actor.GetRendererAt( 0u );
651 DALI_TEST_CHECK( renderer );
653 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
654 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
656 int resultStartFrame, resultEndFrame;
657 Property::Array* result = value->GetArray();
658 result->GetElementAt( 0 ).Get( resultStartFrame );
659 result->GetElementAt( 1 ).Get( resultEndFrame );
661 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
662 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
664 // Set invalid play range
667 array.PushBack( 100 );
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 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
678 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
679 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
681 result = value->GetArray();
682 result->GetElementAt( 0 ).Get( resultStartFrame );
683 result->GetElementAt( 1 ).Get( resultEndFrame );
685 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
686 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
688 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
690 application.SendNotification();
691 application.Render();
693 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
695 application.SendNotification();
696 application.Render();
698 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
700 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
701 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
702 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
709 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
710 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
712 application.SendNotification();
713 application.Render();
715 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
717 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
718 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
720 result = value->GetArray();
721 result->GetElementAt( 0 ).Get( resultStartFrame );
722 result->GetElementAt( 1 ).Get( resultEndFrame );
724 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
725 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
727 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
728 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
733 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
735 ToolkitTestApplication application;
736 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
738 Property::Array array;
739 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
741 Property::Map propertyMap;
742 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
743 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
744 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
746 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
747 DALI_TEST_CHECK( visual );
749 DummyControl actor = DummyControl::New( true );
750 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
751 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
753 Vector2 controlSize( 20.f, 30.f );
754 actor.SetProperty( Actor::Property::SIZE, controlSize );
756 application.GetScene().Add( actor );
758 Property::Map attributes;
759 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
761 application.SendNotification();
762 application.Render();
764 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
766 // renderer is added to actor
767 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
768 Renderer renderer = actor.GetRendererAt( 0u );
769 DALI_TEST_CHECK( renderer );
771 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
772 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
774 int resultStartFrame, resultEndFrame;
775 Property::Array* result = value->GetArray();
776 result->GetElementAt( 0 ).Get( resultStartFrame );
777 result->GetElementAt( 1 ).Get( resultEndFrame );
779 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
780 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
784 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
785 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
788 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
789 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
791 application.SendNotification();
792 application.Render();
794 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
796 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
797 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
799 result = value->GetArray();
800 result->GetElementAt( 0 ).Get( resultStartFrame );
801 result->GetElementAt( 1 ).Get( resultEndFrame );
803 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
804 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
806 // Set invalid play range
809 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
812 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
813 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
815 application.SendNotification();
816 application.Render();
818 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
820 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
821 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
823 result = value->GetArray();
824 result->GetElementAt( 0 ).Get( resultStartFrame );
825 result->GetElementAt( 1 ).Get( resultEndFrame );
827 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
828 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
833 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
835 ToolkitTestApplication application;
836 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
838 Property::Map propertyMap;
839 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
840 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
841 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
843 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
844 DALI_TEST_CHECK( visual );
846 DummyControl actor = DummyControl::New( true );
847 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
848 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
850 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
852 Vector2 controlSize( 20.f, 30.f );
853 actor.SetProperty( Actor::Property::SIZE, controlSize );
855 application.GetScene().Add( actor );
857 Property::Map attributes;
858 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
860 application.SendNotification();
861 application.Render();
863 // Wait for animation finish
864 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
866 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
867 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
868 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
870 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
875 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
877 ToolkitTestApplication application;
878 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
880 Property::Map propertyMap;
881 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
882 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
884 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
885 DALI_TEST_CHECK( visual );
887 tet_printf( "1. Visual is created.\n" );
889 DummyControl actor = DummyControl::New( true );
890 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
891 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
893 Vector2 controlSize( 20.f, 30.f );
894 actor.SetProperty( Actor::Property::SIZE, controlSize );
896 application.GetScene().Add( actor );
898 application.SendNotification();
899 application.Render();
901 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
903 application.SendNotification();
904 application.Render();
906 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
908 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
909 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
910 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
912 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
914 Property::Array array;
918 Property::Map attributes;
919 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
920 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
922 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
924 application.SendNotification();
925 application.Render();
927 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
929 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
930 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
931 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
933 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
942 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
943 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
946 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
948 application.SendNotification();
949 application.Render();
951 // Stop and jump to 3
952 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
954 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
956 application.SendNotification();
957 application.Render();
959 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
961 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
962 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
963 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
965 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
967 // Jump to the same position
968 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
970 application.SendNotification();
971 application.Render();
973 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
975 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
976 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
977 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
979 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
984 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
986 ToolkitTestApplication application;
987 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
989 int startFrame = 1, endFrame = 3;
990 Property::Array playRange;
991 playRange.PushBack( startFrame );
992 playRange.PushBack( endFrame );
994 Property::Map propertyMap;
995 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
996 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
997 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
998 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1000 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1001 DALI_TEST_CHECK( visual );
1003 DummyControl actor = DummyControl::New( true );
1004 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1005 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1007 Vector2 controlSize( 20.f, 30.f );
1008 actor.SetProperty( Actor::Property::SIZE, controlSize );
1010 application.GetScene().Add( actor );
1012 application.SendNotification();
1013 application.Render();
1015 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1017 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1018 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1019 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1021 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
1022 DALI_TEST_CHECK( value );
1024 Property::Array* result = value->GetArray();
1025 DALI_TEST_CHECK( result );
1027 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1028 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1031 playRange.PushBack( 0 );
1032 playRange.PushBack( 2 );
1034 Property::Map attributes;
1035 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1036 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1038 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1040 application.SendNotification();
1041 application.Render();
1043 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1045 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1046 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1047 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1049 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1050 result = value->GetArray();
1051 DALI_TEST_CHECK( result );
1053 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1054 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1059 playRange.PushBack( startFrame );
1060 playRange.PushBack( endFrame );
1062 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1064 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1066 application.SendNotification();
1067 application.Render();
1069 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1071 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1072 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1074 result = value->GetArray();
1075 DALI_TEST_CHECK( result );
1077 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1078 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1080 // Play and update property
1082 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1084 application.SendNotification();
1085 application.Render();
1087 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1089 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1091 application.SendNotification();
1092 application.Render();
1094 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1095 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1096 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1101 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1103 ToolkitTestApplication application;
1104 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1106 Property::Map propertyMap;
1107 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1108 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1109 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1110 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1112 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1113 DALI_TEST_CHECK( visual );
1115 DummyControl actor = DummyControl::New( true );
1116 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1117 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1119 Vector2 controlSize( 20.f, 30.f );
1120 actor.SetProperty( Actor::Property::SIZE, controlSize );
1122 application.GetScene().Add( actor );
1124 Property::Map attributes;
1125 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1127 application.SendNotification();
1128 application.Render();
1130 // Trigger count is 1 - animation finished
1131 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1133 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1134 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1135 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1137 // Change stop behavior
1138 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1140 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1145 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1147 application.SendNotification();
1148 application.Render();
1150 // Trigger count is 1 - animation finished
1151 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1153 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1155 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1156 int totalFrameNumber = value1->Get< int >();
1158 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1159 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1161 // Change stop behavior
1162 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1163 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1165 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1170 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1172 application.SendNotification();
1173 application.Render();
1176 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1178 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1179 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1180 int currentFrameNumber = value->Get< int >();
1183 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1185 application.SendNotification();
1186 application.Render( 16 );
1188 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1189 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1190 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1195 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1197 ToolkitTestApplication application;
1198 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1200 Property::Map propertyMap;
1201 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1202 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1203 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1204 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1205 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1207 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1208 DALI_TEST_CHECK( visual );
1210 DummyControl actor = DummyControl::New( true );
1211 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1212 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1214 Vector2 controlSize( 20.f, 30.f );
1215 actor.SetProperty( Actor::Property::SIZE, controlSize );
1217 application.GetScene().Add( actor );
1219 Property::Map attributes;
1220 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1222 application.SendNotification();
1223 application.Render();
1225 // Trigger count is 1 - animation finished
1226 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1228 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1229 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1230 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1232 // Change stop behavior
1233 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1235 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1238 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1240 application.SendNotification();
1241 application.Render();
1243 // Trigger count is 1 - animation finished
1244 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1246 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1247 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1248 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1250 // Change looping mode
1251 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1253 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1256 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1258 application.SendNotification();
1259 application.Render();
1261 // Trigger count is 1 - animation finished
1262 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1264 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1265 int totalFrameNumber = value1->Get< int >();
1267 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1268 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1269 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1274 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1276 ToolkitTestApplication application;
1277 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1279 Property::Map propertyMap;
1280 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1281 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1283 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1284 DALI_TEST_CHECK( visual );
1286 DummyControl actor = DummyControl::New( true );
1287 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1288 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1290 Vector2 controlSize( 20.f, 30.f );
1291 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1292 actor.SetProperty( Actor::Property::SIZE, controlSize );
1293 actor.SetProperty( Actor::Property::SCALE, controlScale );
1295 application.GetScene().Add( actor );
1297 application.SendNotification();
1298 application.Render();
1300 application.SendNotification();
1301 application.Render();
1303 Renderer renderer = actor.GetRendererAt( 0u );
1304 DALI_TEST_CHECK( renderer );
1306 auto textureSet = renderer.GetTextures();
1307 auto texture = textureSet.GetTexture(0);
1309 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1310 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1312 // Change scale and size
1313 controlSize = Vector2( 50.f, 40.f );
1314 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1315 actor.SetProperty( Actor::Property::SIZE, controlSize );
1316 actor.SetProperty( Actor::Property::SCALE, controlScale );
1318 application.SendNotification();
1319 application.Render();
1321 application.SendNotification();
1322 application.Render();
1324 renderer = actor.GetRendererAt( 0u );
1325 DALI_TEST_CHECK( renderer );
1327 textureSet = renderer.GetTextures();
1328 texture = textureSet.GetTexture(0);
1330 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1331 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1336 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1338 ToolkitTestApplication application;
1339 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1341 Property::Map propertyMap;
1342 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1343 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1345 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1346 DALI_TEST_CHECK( visual1 );
1348 DummyControl actor1 = DummyControl::New( true );
1349 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1350 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1352 Vector2 controlSize( 20.f, 30.f );
1353 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1355 application.GetScene().Add( actor1 );
1357 propertyMap.Clear();
1358 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1359 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1361 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1362 DALI_TEST_CHECK( visual2 );
1364 DummyControl actor2 = DummyControl::New( true );
1365 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1366 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1368 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1370 application.GetScene().Add( actor2 );
1372 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1374 application.SendNotification();
1375 application.Render();
1377 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1379 Property::Map attributes;
1380 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1382 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1383 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1385 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1387 // renderer is added to actor
1388 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1389 Renderer renderer1 = actor1.GetRendererAt( 0u );
1390 DALI_TEST_CHECK( renderer1 );
1392 // renderer is added to actor
1393 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1394 Renderer renderer2 = actor2.GetRendererAt( 0u );
1395 DALI_TEST_CHECK( renderer2 );
1400 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1402 ToolkitTestApplication application;
1403 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1405 Property::Map propertyMap;
1406 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1407 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1409 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1410 DALI_TEST_CHECK( visual );
1412 DummyControl actor = DummyControl::New( true );
1413 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1414 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1416 Vector2 controlSize( 20.f, 30.f );
1417 actor.SetProperty( Actor::Property::SIZE, controlSize );
1419 application.GetScene().Add( actor );
1421 application.SendNotification();
1422 application.Render();
1424 Property::Map attributes;
1425 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1427 application.SendNotification();
1428 application.Render();
1430 // Check rendering behavior
1431 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1432 Renderer renderer = actor.GetRendererAt( 0u );
1433 DALI_TEST_CHECK( renderer );
1434 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1436 actor.SetProperty( Actor::Property::VISIBLE, false );
1438 application.SendNotification();
1439 application.Render();
1441 // Check rendering behavior again
1442 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1447 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1449 ToolkitTestApplication application;
1450 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1452 Property::Map propertyMap;
1453 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1454 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1456 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1457 DALI_TEST_CHECK( visual );
1459 DummyControl actor = DummyControl::New( true );
1460 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1461 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1463 Vector2 controlSize( 20.f, 30.f );
1464 actor.SetProperty( Actor::Property::SIZE, controlSize );
1466 application.GetScene().Add( actor );
1468 application.SendNotification();
1469 application.Render();
1471 Property::Map attributes;
1472 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1474 application.SendNotification();
1475 application.Render();
1477 // Check rendering behavior
1478 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1479 Renderer renderer = actor.GetRendererAt( 0u );
1480 DALI_TEST_CHECK( renderer );
1481 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1483 Window window = DevelWindow::Get( actor );
1486 application.SendNotification();
1487 application.Render();
1489 // Check rendering behavior again
1490 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );