2 * Copyright (c) 2021 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";
53 const char* TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP = "framedrop.json";
54 const char* TEST_VECTOR_IMAGE_INVALID_FILE_NAME = "invalid.json";
56 const char* TEST_VECTOR_IMAGE_RIVE_FILE_NAME = TEST_RESOURCE_DIR "/juice.riv";
57 const char* TEST_VECTOR_IMAGE_INVALID_RIVE_FILE_NAME = "invalid.riv";
59 bool gAnimationFinishedSignalFired = false;
61 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
63 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
65 gAnimationFinishedSignalFired = true;
71 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
73 ToolkitTestApplication application;
74 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
76 VisualFactory factory = VisualFactory::Get();
77 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
78 DALI_TEST_CHECK( visual );
80 DummyControl actor = DummyControl::New( true );
81 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
82 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
83 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
84 application.GetScene().Add( actor );
86 application.SendNotification();
89 // renderer is added to actor
90 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
91 Renderer renderer = actor.GetRendererAt( 0u );
92 DALI_TEST_CHECK( renderer );
94 // Test SetOffScene().
96 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
101 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
103 ToolkitTestApplication application;
104 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
106 Property::Map propertyMap;
107 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
108 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
110 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
111 DALI_TEST_CHECK( visual );
113 DummyControl actor = DummyControl::New( true );
114 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
115 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
116 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
117 application.GetScene().Add( actor );
119 application.SendNotification();
120 application.Render();
122 // renderer is added to actor
123 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
124 Renderer renderer = actor.GetRendererAt( 0u );
125 DALI_TEST_CHECK( renderer );
128 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
133 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
135 ToolkitTestApplication application;
136 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
138 int startFrame = 1, endFrame = 3;
139 Property::Array playRange;
140 playRange.PushBack( startFrame );
141 playRange.PushBack( endFrame );
143 Property::Map propertyMap;
144 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
145 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
146 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
147 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
148 .Add( DevelVisual::Property::CORNER_RADIUS, 50.0f );
150 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
151 DALI_TEST_CHECK( visual );
153 DummyControl actor = DummyControl::New( true );
154 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
155 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
156 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
157 application.GetScene().Add( actor );
159 application.SendNotification();
160 application.Render();
162 // renderer is added to actor
163 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
164 Renderer renderer = actor.GetRendererAt( 0u );
165 DALI_TEST_CHECK( renderer );
168 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
173 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
175 ToolkitTestApplication application;
176 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
178 int startFrame = 1, endFrame = 3;
179 float cornerRadius = 22.0f;
180 Property::Array playRange;
181 playRange.PushBack( startFrame );
182 playRange.PushBack( endFrame );
184 Property::Map propertyMap;
185 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
186 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
187 .Add( "loopCount", 3 )
188 .Add( "playRange", playRange )
189 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
190 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE )
191 .Add( "redrawInScalingDown", false )
192 .Add( "cornerRadius", cornerRadius );
194 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
195 DALI_TEST_CHECK( visual );
197 DummyControl actor = DummyControl::New( true );
198 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
199 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
200 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
201 application.GetScene().Add( actor );
203 application.SendNotification();
204 application.Render();
206 // Trigger count is 1 - render a frame
207 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
209 // renderer is added to actor
210 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
212 Renderer renderer = actor.GetRendererAt( 0u );
213 DALI_TEST_CHECK( renderer );
215 Property::Map resultMap;
216 visual.CreatePropertyMap( resultMap );
218 // check the property values from the returned map from a visual
219 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
220 DALI_TEST_CHECK( value );
221 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
223 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
224 DALI_TEST_CHECK( value );
225 DALI_TEST_CHECK( value->Get< int >() == 3 );
227 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
228 DALI_TEST_CHECK( value );
230 Property::Array* result = value->GetArray();
231 DALI_TEST_CHECK( result );
233 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
234 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
236 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
237 DALI_TEST_CHECK( value );
238 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
240 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
241 DALI_TEST_CHECK( value );
242 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
244 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
245 DALI_TEST_CHECK( value );
246 DALI_TEST_CHECK( value->Get< bool >() == false );
248 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
249 DALI_TEST_CHECK( value );
250 DALI_TEST_EQUALS( value->Get< Vector4 >(), Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius), TEST_LOCATION );
252 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
253 DALI_TEST_CHECK( value );
254 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::ABSOLUTE );
257 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
262 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
264 ToolkitTestApplication application;
265 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
267 int startFrame = 1, endFrame = 3;
268 Vector4 cornerRadius(50.0f, 22.0f, 0.0f, 3.0f);
269 Property::Array playRange;
270 playRange.PushBack( startFrame );
271 playRange.PushBack( endFrame );
273 Property::Map propertyMap;
274 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
275 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
276 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
277 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
278 .Add( DevelVisual::Property::CORNER_RADIUS, cornerRadius )
279 .Add( DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE);
281 // request AnimatedVectorImageVisual with a property map
282 VisualFactory factory = VisualFactory::Get();
283 Visual::Base visual = factory.CreateVisual( propertyMap );
285 DummyControl actor = DummyControl::New( true );
286 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
287 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
289 Vector2 controlSize( 20.f, 30.f );
290 actor.SetProperty( Actor::Property::SIZE, controlSize );
292 application.GetScene().Add( actor );
294 application.SendNotification();
295 application.Render();
297 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
299 Property::Map resultMap;
300 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
302 // check the property values from the returned map from a visual
303 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
304 DALI_TEST_CHECK( value );
305 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
307 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
308 DALI_TEST_CHECK( value );
309 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
311 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
312 DALI_TEST_CHECK( value );
313 DALI_TEST_CHECK( value->Get< int >() == 3 );
315 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
316 DALI_TEST_CHECK( value );
318 Property::Array* result = value->GetArray();
319 DALI_TEST_CHECK( result );
321 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
322 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
324 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
325 DALI_TEST_CHECK( value );
326 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
328 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
329 DALI_TEST_CHECK( value );
330 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
332 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
333 DALI_TEST_CHECK( value );
335 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
336 DALI_TEST_CHECK( value );
337 DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value
339 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
340 DALI_TEST_CHECK( value );
341 DALI_TEST_EQUALS( value->Get< Vector4 >(), cornerRadius, TEST_LOCATION );
343 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
344 DALI_TEST_CHECK( value );
345 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::RELATIVE );
347 // request AnimatedVectorImageVisual with an URL
348 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
351 visual2.CreatePropertyMap( resultMap );
353 // check the property values from the returned map from a visual
354 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
355 DALI_TEST_CHECK( value );
356 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
358 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
359 DALI_TEST_CHECK( value );
360 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
365 int UtcDaliAnimatedVectorImageVisualPlayback(void)
367 ToolkitTestApplication application;
369 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
372 // request AnimatedVectorImageVisual with a property map
373 VisualFactory factory = VisualFactory::Get();
374 Visual::Base visual = factory.CreateVisual(
376 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
377 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
379 DummyControl dummyControl = DummyControl::New( true );
380 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
381 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
382 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
384 Property::Map attributes;
385 tet_infoline( "Test Play action" );
386 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
388 application.GetScene().Add( dummyControl );
389 application.SendNotification();
390 application.Render( 16 );
392 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
393 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
394 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
396 tet_infoline( "Test Pause action" );
397 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
399 application.SendNotification();
400 application.Render(16);
402 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
403 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
404 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
406 tet_infoline( "Test Play action" );
407 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
409 application.SendNotification();
410 application.Render(16);
412 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
413 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
414 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
416 tet_infoline( "Test Stop action" );
417 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
419 application.SendNotification();
420 application.Render(16);
422 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
423 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
424 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
426 tet_infoline( "Test Stop action again" );
427 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
429 application.SendNotification();
430 application.Render(16);
432 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
433 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
434 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
436 tet_infoline( "Test Play action" );
437 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
439 application.SendNotification();
440 application.Render(16);
442 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
443 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
444 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
446 tet_infoline( "Off stage" );
447 dummyControl.Unparent();
449 application.SendNotification();
450 application.Render(16);
452 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
453 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
454 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
456 tet_infoline( "On stage again" );
457 application.GetScene().Add( dummyControl );
459 application.SendNotification();
460 application.Render(16);
462 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
463 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
464 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
466 tet_infoline( "Test Play action" );
467 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
469 application.SendNotification();
470 application.Render(16);
472 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
473 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
474 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
477 Vector3 newSize( 100.0f, 100.0f, 0.0f );
478 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
480 application.SendNotification();
481 application.Render(16);
483 // Size should be changed
484 Vector3 naturalSize = dummyControl.GetNaturalSize();
485 DALI_TEST_CHECK( naturalSize == newSize );
487 dummyControl.Unparent();
493 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
495 ToolkitTestApplication application;
496 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
498 VisualFactory factory = VisualFactory::Get();
499 Property::Map properties;
500 Property::Map shader;
501 const std::string vertexShader = "Foobar";
502 const std::string fragmentShader = "Foobar sampler2D Foobar";
503 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
504 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
506 properties[Visual::Property::TYPE] = Visual::IMAGE;
507 properties[Visual::Property::SHADER] = shader;
508 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
510 Visual::Base visual = factory.CreateVisual( properties );
512 // trigger creation through setting on stage
513 DummyControl dummy = DummyControl::New( true );
514 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
515 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
517 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
518 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
519 application.GetScene().Add( dummy );
521 application.SendNotification();
522 application.Render();
524 Renderer renderer = dummy.GetRendererAt( 0 );
525 Shader shader2 = renderer.GetShader();
526 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
527 Property::Map* map = value.GetMap();
528 DALI_TEST_CHECK( map );
530 std::string resultFragmentShader, resultVertexShader;
531 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
532 fragment->Get( resultFragmentShader );
533 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
535 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
536 vertex->Get( resultVertexShader );
537 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
542 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
544 ToolkitTestApplication application;
545 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
547 VisualFactory factory = VisualFactory::Get();
548 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
549 DALI_TEST_CHECK( visual );
551 DummyControl actor = DummyControl::New( true );
552 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
553 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
555 Vector2 controlSize( 20.f, 30.f );
558 application.GetScene().Add( actor );
560 application.SendNotification();
561 application.Render();
563 visual.GetNaturalSize( naturalSize );
565 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
567 actor.SetProperty( Actor::Property::SIZE, controlSize );
569 application.SendNotification();
570 application.Render();
572 visual.GetNaturalSize( naturalSize );
574 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
579 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
581 ToolkitTestApplication application;
582 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
584 Property::Map propertyMap;
585 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
586 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
587 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
589 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
590 DALI_TEST_CHECK( visual );
592 DummyControl actor = DummyControl::New( true );
593 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
594 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
596 Vector2 controlSize( 20.f, 30.f );
597 actor.SetProperty( Actor::Property::SIZE, controlSize );
599 application.GetScene().Add( actor );
601 Property::Map attributes;
602 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
604 application.SendNotification();
605 application.Render();
607 // Trigger count is 1 - render a frame
608 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
610 // renderer is added to actor
611 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
612 Renderer renderer = actor.GetRendererAt( 0u );
613 DALI_TEST_CHECK( renderer );
618 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
620 ToolkitTestApplication application;
621 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
623 int startFrame = 1, endFrame = 3;
624 Property::Array array;
625 array.PushBack( endFrame );
626 array.PushBack( startFrame );
628 Property::Map propertyMap;
629 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
630 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
631 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
633 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
634 DALI_TEST_CHECK( visual );
636 DummyControl actor = DummyControl::New( true );
637 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
638 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
640 Vector2 controlSize( 20.f, 30.f );
641 actor.SetProperty( Actor::Property::SIZE, controlSize );
643 application.GetScene().Add( actor );
645 Property::Map attributes;
646 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
648 application.SendNotification();
649 application.Render();
651 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
653 // renderer is added to actor
654 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
655 Renderer renderer = actor.GetRendererAt( 0u );
656 DALI_TEST_CHECK( renderer );
658 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
659 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
661 int resultStartFrame, resultEndFrame;
662 Property::Array* result = value->GetArray();
663 result->GetElementAt( 0 ).Get( resultStartFrame );
664 result->GetElementAt( 1 ).Get( resultEndFrame );
666 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
667 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
669 // Set invalid play range
672 array.PushBack( 100 );
675 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
676 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
678 application.SendNotification();
679 application.Render();
681 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
683 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
684 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
686 result = value->GetArray();
687 result->GetElementAt( 0 ).Get( resultStartFrame );
688 result->GetElementAt( 1 ).Get( resultEndFrame );
690 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
691 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
693 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
695 application.SendNotification();
696 application.Render();
698 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
700 application.SendNotification();
701 application.Render();
703 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
705 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
706 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
707 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
714 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
715 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
717 application.SendNotification();
718 application.Render();
720 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
722 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
723 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
725 result = value->GetArray();
726 result->GetElementAt( 0 ).Get( resultStartFrame );
727 result->GetElementAt( 1 ).Get( resultEndFrame );
729 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
730 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
732 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
733 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
738 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
740 ToolkitTestApplication application;
741 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
743 Property::Array array;
744 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
746 Property::Map propertyMap;
747 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
748 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
749 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
751 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
752 DALI_TEST_CHECK( visual );
754 DummyControl actor = DummyControl::New( true );
755 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
756 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
758 Vector2 controlSize( 20.f, 30.f );
759 actor.SetProperty( Actor::Property::SIZE, controlSize );
761 application.GetScene().Add( actor );
763 Property::Map attributes;
764 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
766 application.SendNotification();
767 application.Render();
769 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
771 // renderer is added to actor
772 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
773 Renderer renderer = actor.GetRendererAt( 0u );
774 DALI_TEST_CHECK( renderer );
776 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
777 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
779 int resultStartFrame, resultEndFrame;
780 Property::Array* result = value->GetArray();
781 result->GetElementAt( 0 ).Get( resultStartFrame );
782 result->GetElementAt( 1 ).Get( resultEndFrame );
784 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
785 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
789 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
790 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
793 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
794 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
796 application.SendNotification();
797 application.Render();
799 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
801 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
802 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
804 result = value->GetArray();
805 result->GetElementAt( 0 ).Get( resultStartFrame );
806 result->GetElementAt( 1 ).Get( resultEndFrame );
808 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
809 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
811 // Set invalid play range
814 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
817 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
818 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
820 application.SendNotification();
821 application.Render();
823 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
825 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
826 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
828 result = value->GetArray();
829 result->GetElementAt( 0 ).Get( resultStartFrame );
830 result->GetElementAt( 1 ).Get( resultEndFrame );
832 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
833 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
838 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
840 ToolkitTestApplication application;
841 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
843 Property::Map propertyMap;
844 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
845 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
846 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
848 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
849 DALI_TEST_CHECK( visual );
851 DummyControl actor = DummyControl::New( true );
852 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
853 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
855 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
857 Vector2 controlSize( 20.f, 30.f );
858 actor.SetProperty( Actor::Property::SIZE, controlSize );
860 application.GetScene().Add( actor );
862 Property::Map attributes;
863 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
865 application.SendNotification();
866 application.Render();
868 // Wait for animation finish
869 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
871 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
872 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
873 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
875 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
880 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
882 ToolkitTestApplication application;
883 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
885 Property::Map propertyMap;
886 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
887 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
889 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
890 DALI_TEST_CHECK( visual );
892 tet_printf( "1. Visual is created.\n" );
894 DummyControl actor = DummyControl::New( true );
895 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
896 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
898 Vector2 controlSize( 20.f, 30.f );
899 actor.SetProperty( Actor::Property::SIZE, controlSize );
901 application.GetScene().Add( actor );
903 application.SendNotification();
904 application.Render();
906 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
908 application.SendNotification();
909 application.Render();
911 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
913 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
914 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
915 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
917 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
919 Property::Array array;
923 Property::Map attributes;
924 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
925 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
927 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
929 application.SendNotification();
930 application.Render();
932 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
934 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
935 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
936 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
938 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
947 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
948 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
951 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
953 application.SendNotification();
954 application.Render();
956 // Stop and jump to 3
957 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
959 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
961 application.SendNotification();
962 application.Render();
964 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
966 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
967 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
968 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
970 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
972 // Jump to the same position
973 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
975 application.SendNotification();
976 application.Render();
978 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
980 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
981 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
982 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
984 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
989 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
991 ToolkitTestApplication application;
992 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
994 int startFrame = 1, endFrame = 3;
995 Property::Array playRange;
996 playRange.PushBack( startFrame );
997 playRange.PushBack( endFrame );
999 Property::Map propertyMap;
1000 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1001 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1002 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1003 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1005 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1006 DALI_TEST_CHECK( visual );
1008 DummyControl actor = DummyControl::New( true );
1009 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1010 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1012 Vector2 controlSize( 20.f, 30.f );
1013 actor.SetProperty( Actor::Property::SIZE, controlSize );
1015 application.GetScene().Add( actor );
1017 application.SendNotification();
1018 application.Render();
1020 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1022 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1023 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1024 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1026 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
1027 DALI_TEST_CHECK( value );
1029 Property::Array* result = value->GetArray();
1030 DALI_TEST_CHECK( result );
1032 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1033 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1036 playRange.PushBack( 0 );
1037 playRange.PushBack( 2 );
1039 Property::Map attributes;
1040 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1041 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1043 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1045 application.SendNotification();
1046 application.Render();
1048 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1050 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1051 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1052 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1054 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1055 result = value->GetArray();
1056 DALI_TEST_CHECK( result );
1058 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1059 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1064 playRange.PushBack( startFrame );
1065 playRange.PushBack( endFrame );
1067 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1069 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1071 application.SendNotification();
1072 application.Render();
1074 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1076 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1077 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1079 result = value->GetArray();
1080 DALI_TEST_CHECK( result );
1082 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1083 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1085 // Play and update property
1087 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1089 application.SendNotification();
1090 application.Render();
1092 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1094 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1096 application.SendNotification();
1097 application.Render();
1099 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1100 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1101 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1106 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1108 ToolkitTestApplication application;
1109 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1111 Property::Map propertyMap;
1112 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1113 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1114 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1115 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1117 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1118 DALI_TEST_CHECK( visual );
1120 DummyControl actor = DummyControl::New( true );
1121 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1122 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1124 Vector2 controlSize( 20.f, 30.f );
1125 actor.SetProperty( Actor::Property::SIZE, controlSize );
1127 application.GetScene().Add( actor );
1129 Property::Map attributes;
1130 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1132 application.SendNotification();
1133 application.Render();
1135 // Trigger count is 1 - animation finished
1136 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1138 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1139 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1140 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1142 // Change stop behavior
1143 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1145 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1150 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1152 application.SendNotification();
1153 application.Render();
1155 // Trigger count is 1 - animation finished
1156 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1158 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1160 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1161 int totalFrameNumber = value1->Get< int >();
1163 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1164 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1166 // Change stop behavior
1167 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1168 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1170 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1175 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1177 application.SendNotification();
1178 application.Render();
1181 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1183 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1184 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1185 int currentFrameNumber = value->Get< int >();
1188 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1190 application.SendNotification();
1191 application.Render( 16 );
1193 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1194 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1195 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1200 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1202 ToolkitTestApplication application;
1203 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1205 Property::Map propertyMap;
1206 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1207 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1208 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1209 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1210 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1212 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1213 DALI_TEST_CHECK( visual );
1215 DummyControl actor = DummyControl::New( true );
1216 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1217 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1219 Vector2 controlSize( 20.f, 30.f );
1220 actor.SetProperty( Actor::Property::SIZE, controlSize );
1222 application.GetScene().Add( actor );
1224 Property::Map 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( 2 ), true, TEST_LOCATION );
1233 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1234 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1235 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1237 // Change stop behavior
1238 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1240 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1243 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1245 application.SendNotification();
1246 application.Render();
1248 // Trigger count is 1 - animation finished
1249 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1251 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1252 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1253 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1255 // Change looping mode
1256 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1258 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1261 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1263 application.SendNotification();
1264 application.Render();
1266 // Trigger count is 1 - animation finished
1267 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1269 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1270 int totalFrameNumber = value1->Get< int >();
1272 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1273 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1274 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1279 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1281 ToolkitTestApplication application;
1282 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1284 Property::Map propertyMap;
1285 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1286 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1288 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1289 DALI_TEST_CHECK( visual );
1291 DummyControl actor = DummyControl::New( true );
1292 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1293 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1295 Vector2 controlSize( 20.f, 30.f );
1296 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1297 actor.SetProperty( Actor::Property::SIZE, controlSize );
1298 actor.SetProperty( Actor::Property::SCALE, controlScale );
1300 application.GetScene().Add( actor );
1302 application.SendNotification();
1303 application.Render();
1305 application.SendNotification();
1306 application.Render();
1308 Renderer renderer = actor.GetRendererAt( 0u );
1309 DALI_TEST_CHECK( renderer );
1311 auto textureSet = renderer.GetTextures();
1312 auto texture = textureSet.GetTexture(0);
1314 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1315 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1317 // Change scale and size
1318 controlSize = Vector2( 50.f, 40.f );
1319 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1320 actor.SetProperty( Actor::Property::SIZE, controlSize );
1321 actor.SetProperty( Actor::Property::SCALE, controlScale );
1323 application.SendNotification();
1324 application.Render();
1326 application.SendNotification();
1327 application.Render();
1329 renderer = actor.GetRendererAt( 0u );
1330 DALI_TEST_CHECK( renderer );
1332 textureSet = renderer.GetTextures();
1333 texture = textureSet.GetTexture(0);
1335 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1336 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1341 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1343 ToolkitTestApplication application;
1344 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1346 Property::Map propertyMap;
1347 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1348 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1350 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1351 DALI_TEST_CHECK( visual1 );
1353 DummyControl actor1 = DummyControl::New( true );
1354 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1355 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1357 Vector2 controlSize( 20.f, 30.f );
1358 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1360 application.GetScene().Add( actor1 );
1362 propertyMap.Clear();
1363 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1364 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1366 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1367 DALI_TEST_CHECK( visual2 );
1369 DummyControl actor2 = DummyControl::New( true );
1370 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1371 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1373 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1375 application.GetScene().Add( actor2 );
1377 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1379 application.SendNotification();
1380 application.Render();
1382 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1384 Property::Map attributes;
1385 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1387 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1388 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1390 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1392 // renderer is added to actor
1393 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1394 Renderer renderer1 = actor1.GetRendererAt( 0u );
1395 DALI_TEST_CHECK( renderer1 );
1397 // renderer is added to actor
1398 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1399 Renderer renderer2 = actor2.GetRendererAt( 0u );
1400 DALI_TEST_CHECK( renderer2 );
1405 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1407 ToolkitTestApplication application;
1408 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1410 Property::Map propertyMap;
1411 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1412 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1414 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1415 DALI_TEST_CHECK( visual );
1417 DummyControl actor = DummyControl::New( true );
1418 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1419 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1421 Vector2 controlSize( 20.f, 30.f );
1422 actor.SetProperty( Actor::Property::SIZE, controlSize );
1424 application.GetScene().Add( actor );
1426 application.SendNotification();
1427 application.Render();
1429 Property::Map attributes;
1430 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1432 application.SendNotification();
1433 application.Render();
1435 // Check rendering behavior
1436 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1437 Renderer renderer = actor.GetRendererAt( 0u );
1438 DALI_TEST_CHECK( renderer );
1439 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1441 actor.SetProperty( Actor::Property::VISIBLE, false );
1443 application.SendNotification();
1444 application.Render();
1446 // Check rendering behavior again
1447 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1452 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1454 ToolkitTestApplication application;
1455 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1457 Property::Map propertyMap;
1458 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1459 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1461 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1462 DALI_TEST_CHECK( visual );
1464 DummyControl actor = DummyControl::New( true );
1465 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1466 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1468 Vector2 controlSize( 20.f, 30.f );
1469 actor.SetProperty( Actor::Property::SIZE, controlSize );
1471 application.GetScene().Add( actor );
1473 application.SendNotification();
1474 application.Render();
1476 Property::Map attributes;
1477 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1479 application.SendNotification();
1480 application.Render();
1482 // Check rendering behavior
1483 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1484 Renderer renderer = actor.GetRendererAt( 0u );
1485 DALI_TEST_CHECK( renderer );
1486 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1488 Window window = DevelWindow::Get( actor );
1491 application.SendNotification();
1492 application.Render();
1494 // Check rendering behavior again
1495 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1500 int UtcDaliAnimatedVectorImageVisualInvalidFile(void)
1502 ToolkitTestApplication application;
1503 tet_infoline("Request loading with invalid file - should draw broken image");
1505 TestGlAbstraction& gl = application.GetGlAbstraction();
1506 TraceCallStack& textureTrace = gl.GetTextureTrace();
1507 textureTrace.Enable(true);
1509 Property::Map propertyMap;
1510 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1511 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
1513 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1514 DALI_TEST_CHECK(visual);
1516 DummyControl actor = DummyControl::New(true);
1517 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >(actor.GetImplementation());
1518 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1520 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1522 application.GetScene().Add(actor);
1524 application.SendNotification();
1525 application.Render();
1527 // Check resource status
1528 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1529 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1531 // The broken image should be shown.
1532 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1533 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1538 int UtcDaliAnimatedVectorImageVisualFrameDrops(void)
1540 ToolkitTestApplication application;
1541 tet_infoline("UtcDaliAnimatedVectorImageVisualFrameDrops");
1543 Property::Map propertyMap;
1544 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1545 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP);
1547 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1548 DALI_TEST_CHECK(visual);
1550 DummyControl actor = DummyControl::New(true);
1551 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1552 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1554 Vector2 controlSize(20.f, 30.f);
1555 actor.SetProperty(Actor::Property::SIZE, controlSize);
1557 application.GetScene().Add(actor);
1559 application.SendNotification();
1560 application.Render();
1562 Property::Map attributes;
1563 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1565 application.SendNotification();
1566 application.Render();
1568 // Trigger count is 1 - render the first frame
1569 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1571 // Make delay to drop frames
1572 Test::VectorAnimationRenderer::DelayRendering(170); // longer than 16.6 * 10frames
1574 // Check dropped frame
1575 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1577 uint32_t frames = Test::VectorAnimationRenderer::GetDroppedFrames();
1578 DALI_TEST_CHECK(frames >= 9);
1583 int UtcDaliAnimatedVectorImageVisualLoadRiveFileP(void)
1585 ToolkitTestApplication application;
1586 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoadRiveFile: Request animated vector image visual with a rive url" );
1588 VisualFactory factory = VisualFactory::Get();
1589 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_RIVE_FILE_NAME, ImageDimensions() );
1590 DALI_TEST_CHECK( visual );
1592 DummyControl actor = DummyControl::New( true );
1593 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1594 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1595 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
1596 application.GetScene().Add( actor );
1598 application.SendNotification();
1599 application.Render();
1601 // renderer is added to actor
1602 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1603 Renderer renderer = actor.GetRendererAt( 0u );
1604 DALI_TEST_CHECK( renderer );
1606 // Test SetOffScene().
1608 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1613 int UtcDaliAnimatedVectorImageVisualLoadRiveFileN(void)
1615 ToolkitTestApplication application;
1616 tet_infoline("Request loading with invalid rive file - should draw broken image");
1618 TestGlAbstraction& gl = application.GetGlAbstraction();
1619 TraceCallStack& textureTrace = gl.GetTextureTrace();
1620 textureTrace.Enable(true);
1622 Property::Map propertyMap;
1623 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1624 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_RIVE_FILE_NAME);
1626 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1627 DALI_TEST_CHECK(visual);
1629 DummyControl actor = DummyControl::New(true);
1630 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >(actor.GetImplementation());
1631 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1633 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1635 application.GetScene().Add(actor);
1637 application.SendNotification();
1638 application.Render();
1640 // Check resource status
1641 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1642 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1644 // The broken image should be shown.
1645 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1646 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1651 int UtcDaliAnimatedVectorImageVisualPlaybackRiveFile(void)
1653 ToolkitTestApplication application;
1655 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlaybackRiveFile" );
1658 // request AnimatedVectorImageVisual for Rive with a property map
1659 VisualFactory factory = VisualFactory::Get();
1660 Visual::Base visual = factory.CreateVisual(
1662 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1663 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_RIVE_FILE_NAME ) );
1665 DummyControl dummyControl = DummyControl::New( true );
1666 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
1667 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1668 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1670 Property::Map attributes;
1671 tet_infoline( "Test Play action" );
1672 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1674 application.GetScene().Add( dummyControl );
1675 application.SendNotification();
1676 application.Render( 16 );
1678 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1679 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1680 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
1682 tet_infoline( "Test Pause action" );
1683 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1685 application.SendNotification();
1686 application.Render(16);
1688 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1689 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1690 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
1692 tet_infoline( "Test Play action" );
1693 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1695 application.SendNotification();
1696 application.Render(16);
1698 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1699 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1700 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
1702 tet_infoline( "Test Stop action" );
1703 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1705 application.SendNotification();
1706 application.Render(16);
1708 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1709 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1710 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
1712 tet_infoline( "Test Stop action again" );
1713 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1715 application.SendNotification();
1716 application.Render(16);
1718 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1719 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1720 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
1722 tet_infoline( "Test Play action" );
1723 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1725 application.SendNotification();
1726 application.Render(16);
1728 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1729 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1730 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
1732 tet_infoline( "Off stage" );
1733 dummyControl.Unparent();
1735 application.SendNotification();
1736 application.Render(16);
1738 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1739 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1740 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
1742 tet_infoline( "On stage again" );
1743 application.GetScene().Add( dummyControl );
1745 application.SendNotification();
1746 application.Render(16);
1748 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1749 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1750 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
1752 tet_infoline( "Test Play action" );
1753 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1755 application.SendNotification();
1756 application.Render(16);
1758 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1759 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
1760 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
1763 Vector3 newSize( 100.0f, 100.0f, 0.0f );
1764 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
1766 application.SendNotification();
1767 application.Render(16);
1769 // Size should be changed
1770 Vector3 naturalSize = dummyControl.GetNaturalSize();
1771 DALI_TEST_CHECK( naturalSize == newSize );
1773 dummyControl.Unparent();