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 bool gAnimationFinishedSignalFired = false;
58 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
60 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
62 gAnimationFinishedSignalFired = true;
68 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
70 ToolkitTestApplication application;
71 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
73 VisualFactory factory = VisualFactory::Get();
74 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
75 DALI_TEST_CHECK( visual );
77 DummyControl actor = DummyControl::New( true );
78 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
79 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
80 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
81 application.GetScene().Add( actor );
83 application.SendNotification();
86 // renderer is added to actor
87 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
88 Renderer renderer = actor.GetRendererAt( 0u );
89 DALI_TEST_CHECK( renderer );
91 // Test SetOffScene().
93 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
98 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
100 ToolkitTestApplication application;
101 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
103 Property::Map propertyMap;
104 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
105 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
107 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
108 DALI_TEST_CHECK( visual );
110 DummyControl actor = DummyControl::New( true );
111 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
112 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
113 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
114 application.GetScene().Add( actor );
116 application.SendNotification();
117 application.Render();
119 // renderer is added to actor
120 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
121 Renderer renderer = actor.GetRendererAt( 0u );
122 DALI_TEST_CHECK( renderer );
125 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
130 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
132 ToolkitTestApplication application;
133 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
135 int startFrame = 1, endFrame = 3;
136 Property::Array playRange;
137 playRange.PushBack( startFrame );
138 playRange.PushBack( endFrame );
140 Property::Map propertyMap;
141 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
142 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
143 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
144 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
145 .Add( DevelVisual::Property::CORNER_RADIUS, 50.0f )
146 .Add( DevelVisual::Property::BORDERLINE_WIDTH, 20.0f );
148 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
149 DALI_TEST_CHECK( visual );
151 DummyControl actor = DummyControl::New( true );
152 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
153 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
154 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
155 application.GetScene().Add( actor );
157 application.SendNotification();
158 application.Render();
160 // renderer is added to actor
161 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
162 Renderer renderer = actor.GetRendererAt( 0u );
163 DALI_TEST_CHECK( renderer );
166 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
171 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
173 ToolkitTestApplication application;
174 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
176 int startFrame = 1, endFrame = 3;
177 float cornerRadius = 22.0f;
178 float borderlineWidth = 2.0f;
179 Vector4 borderlineColor = Vector4(1.0f, 1.0f, 1.0f, 1.0f);
180 float borderlineOffset = 0.1f;
181 Property::Array playRange;
182 playRange.PushBack( startFrame );
183 playRange.PushBack( endFrame );
185 Property::Map propertyMap;
186 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
187 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
188 .Add( "loopCount", 3 )
189 .Add( "playRange", playRange )
190 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
191 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE )
192 .Add( "redrawInScalingDown", false )
193 .Add( "cornerRadius", cornerRadius )
194 .Add( "borderlineWidth", borderlineWidth )
195 .Add( "borderlineColor", borderlineColor )
196 .Add( "borderlineOffset", borderlineOffset );
198 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
199 DALI_TEST_CHECK( visual );
201 DummyControl actor = DummyControl::New( true );
202 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
203 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
204 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
205 application.GetScene().Add( actor );
207 application.SendNotification();
208 application.Render();
210 // Trigger count is 1 - render a frame
211 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
213 // renderer is added to actor
214 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
216 Renderer renderer = actor.GetRendererAt( 0u );
217 DALI_TEST_CHECK( renderer );
219 Property::Map resultMap;
220 visual.CreatePropertyMap( resultMap );
222 // check the property values from the returned map from a visual
223 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
224 DALI_TEST_CHECK( value );
225 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
227 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
228 DALI_TEST_CHECK( value );
229 DALI_TEST_CHECK( value->Get< int >() == 3 );
231 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
232 DALI_TEST_CHECK( value );
234 Property::Array* result = value->GetArray();
235 DALI_TEST_CHECK( result );
237 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
238 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
240 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
241 DALI_TEST_CHECK( value );
242 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
244 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
245 DALI_TEST_CHECK( value );
246 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
248 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
249 DALI_TEST_CHECK( value );
250 DALI_TEST_CHECK( value->Get< bool >() == false );
252 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
253 DALI_TEST_CHECK( value );
254 DALI_TEST_EQUALS( value->Get< Vector4 >(), Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius), TEST_LOCATION );
256 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
257 DALI_TEST_CHECK( value );
258 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::ABSOLUTE );
260 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
261 DALI_TEST_CHECK( value );
262 DALI_TEST_EQUALS( value->Get< float >(), borderlineWidth, TEST_LOCATION );
264 value = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
265 DALI_TEST_CHECK( value );
266 DALI_TEST_EQUALS( value->Get< Vector4 >(), borderlineColor, TEST_LOCATION );
268 value = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
269 DALI_TEST_CHECK( value );
270 DALI_TEST_EQUALS( value->Get< float >(), borderlineOffset, TEST_LOCATION );
273 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
278 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
280 ToolkitTestApplication application;
281 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
283 int startFrame = 1, endFrame = 3;
284 Vector4 cornerRadius(50.0f, 22.0f, 0.0f, 3.0f);
285 float borderlineWidth = 2.3f;
286 Vector4 borderlineColor = Vector4(0.3f, 0.3f, 1.0f, 1.0f);
287 float borderlineOffset = 0.3f;
288 Property::Array playRange;
289 playRange.PushBack( startFrame );
290 playRange.PushBack( endFrame );
292 Property::Map propertyMap;
293 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
294 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
295 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
296 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
297 .Add( DevelVisual::Property::CORNER_RADIUS, cornerRadius )
298 .Add( DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE)
299 .Add( DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth )
300 .Add( DevelVisual::Property::BORDERLINE_COLOR, borderlineColor )
301 .Add( DevelVisual::Property::BORDERLINE_OFFSET, borderlineOffset );
303 // request AnimatedVectorImageVisual with a property map
304 VisualFactory factory = VisualFactory::Get();
305 Visual::Base visual = factory.CreateVisual( propertyMap );
307 DummyControl actor = DummyControl::New( true );
308 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
309 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
311 Vector2 controlSize( 20.f, 30.f );
312 actor.SetProperty( Actor::Property::SIZE, controlSize );
314 application.GetScene().Add( actor );
316 application.SendNotification();
317 application.Render();
319 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
321 Property::Map resultMap;
322 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
324 // check the property values from the returned map from a visual
325 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
326 DALI_TEST_CHECK( value );
327 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
329 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
330 DALI_TEST_CHECK( value );
331 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
333 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
334 DALI_TEST_CHECK( value );
335 DALI_TEST_CHECK( value->Get< int >() == 3 );
337 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
338 DALI_TEST_CHECK( value );
340 Property::Array* result = value->GetArray();
341 DALI_TEST_CHECK( result );
343 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
344 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
346 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
347 DALI_TEST_CHECK( value );
348 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
350 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
351 DALI_TEST_CHECK( value );
352 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
354 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
355 DALI_TEST_CHECK( value );
357 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
358 DALI_TEST_CHECK( value );
359 DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value
361 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
362 DALI_TEST_CHECK( value );
363 DALI_TEST_EQUALS( value->Get< Vector4 >(), cornerRadius, TEST_LOCATION );
365 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
366 DALI_TEST_CHECK( value );
367 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::RELATIVE );
369 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, "borderlineWidth" );
370 DALI_TEST_CHECK( value );
371 DALI_TEST_EQUALS( value->Get< float >(), borderlineWidth, TEST_LOCATION );
373 value = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
374 DALI_TEST_CHECK( value );
375 DALI_TEST_EQUALS( value->Get< Vector4 >(), borderlineColor, TEST_LOCATION );
377 value = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
378 DALI_TEST_CHECK( value );
379 DALI_TEST_EQUALS( value->Get< float >(), borderlineOffset, TEST_LOCATION );
381 // request AnimatedVectorImageVisual with an URL
382 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
385 visual2.CreatePropertyMap( resultMap );
387 // check the property values from the returned map from a visual
388 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
389 DALI_TEST_CHECK( value );
390 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
392 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
393 DALI_TEST_CHECK( value );
394 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
399 int UtcDaliAnimatedVectorImageVisualPlayback(void)
401 ToolkitTestApplication application;
403 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
406 // request AnimatedVectorImageVisual with a property map
407 VisualFactory factory = VisualFactory::Get();
408 Visual::Base visual = factory.CreateVisual(
410 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
411 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
413 DummyControl dummyControl = DummyControl::New( true );
414 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
415 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
416 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
418 Property::Map attributes;
419 tet_infoline( "Test Play action" );
420 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
422 application.GetScene().Add( dummyControl );
423 application.SendNotification();
424 application.Render( 16 );
426 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
427 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
428 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
430 tet_infoline( "Test Pause action" );
431 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
433 application.SendNotification();
434 application.Render(16);
436 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
437 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
438 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
440 tet_infoline( "Test Play action" );
441 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
443 application.SendNotification();
444 application.Render(16);
446 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
447 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
448 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
450 tet_infoline( "Test Stop action" );
451 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
453 application.SendNotification();
454 application.Render(16);
456 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
457 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
458 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
460 tet_infoline( "Test Stop action again" );
461 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
463 application.SendNotification();
464 application.Render(16);
466 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
467 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
468 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
470 tet_infoline( "Test Play action" );
471 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
473 application.SendNotification();
474 application.Render(16);
476 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
477 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
478 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
480 tet_infoline( "Off stage" );
481 dummyControl.Unparent();
483 application.SendNotification();
484 application.Render(16);
486 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
487 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
488 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
490 tet_infoline( "On stage again" );
491 application.GetScene().Add( dummyControl );
493 application.SendNotification();
494 application.Render(16);
496 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
497 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
498 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
500 tet_infoline( "Test Play action" );
501 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
503 application.SendNotification();
504 application.Render(16);
506 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
507 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
508 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
511 Vector3 newSize( 100.0f, 100.0f, 0.0f );
512 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
514 application.SendNotification();
515 application.Render(16);
517 // Size should be changed
518 Vector3 naturalSize = dummyControl.GetNaturalSize();
519 DALI_TEST_CHECK( naturalSize == newSize );
521 dummyControl.Unparent();
527 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
529 ToolkitTestApplication application;
530 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
532 VisualFactory factory = VisualFactory::Get();
533 Property::Map properties;
534 Property::Map shader;
535 const std::string vertexShader = "Foobar";
536 const std::string fragmentShader = "Foobar sampler2D Foobar";
537 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
538 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
540 properties[Visual::Property::TYPE] = Visual::IMAGE;
541 properties[Visual::Property::SHADER] = shader;
542 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
544 Visual::Base visual = factory.CreateVisual( properties );
546 // trigger creation through setting on stage
547 DummyControl dummy = DummyControl::New( true );
548 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
549 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
551 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
552 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
553 application.GetScene().Add( dummy );
555 application.SendNotification();
556 application.Render();
558 Renderer renderer = dummy.GetRendererAt( 0 );
559 Shader shader2 = renderer.GetShader();
560 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
561 Property::Map* map = value.GetMap();
562 DALI_TEST_CHECK( map );
564 std::string resultFragmentShader, resultVertexShader;
565 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
566 fragment->Get( resultFragmentShader );
567 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
569 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
570 vertex->Get( resultVertexShader );
571 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
576 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
578 ToolkitTestApplication application;
579 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
581 VisualFactory factory = VisualFactory::Get();
582 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
583 DALI_TEST_CHECK( visual );
585 DummyControl actor = DummyControl::New( true );
586 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
587 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
589 Vector2 controlSize( 20.f, 30.f );
592 application.GetScene().Add( actor );
594 application.SendNotification();
595 application.Render();
597 visual.GetNaturalSize( naturalSize );
599 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
601 actor.SetProperty( Actor::Property::SIZE, controlSize );
603 application.SendNotification();
604 application.Render();
606 visual.GetNaturalSize( naturalSize );
608 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
613 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
615 ToolkitTestApplication application;
616 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
618 Property::Map propertyMap;
619 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
620 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
621 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
623 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
624 DALI_TEST_CHECK( visual );
626 DummyControl actor = DummyControl::New( true );
627 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
628 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
630 Vector2 controlSize( 20.f, 30.f );
631 actor.SetProperty( Actor::Property::SIZE, controlSize );
633 application.GetScene().Add( actor );
635 Property::Map attributes;
636 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
638 application.SendNotification();
639 application.Render();
641 // Trigger count is 1 - render a frame
642 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
644 // renderer is added to actor
645 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
646 Renderer renderer = actor.GetRendererAt( 0u );
647 DALI_TEST_CHECK( renderer );
652 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
654 ToolkitTestApplication application;
655 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
657 int startFrame = 1, endFrame = 3;
658 Property::Array array;
659 array.PushBack( endFrame );
660 array.PushBack( startFrame );
662 Property::Map propertyMap;
663 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
664 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
665 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
667 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
668 DALI_TEST_CHECK( visual );
670 DummyControl actor = DummyControl::New( true );
671 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
672 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
674 Vector2 controlSize( 20.f, 30.f );
675 actor.SetProperty( Actor::Property::SIZE, controlSize );
677 application.GetScene().Add( actor );
679 Property::Map attributes;
680 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
682 application.SendNotification();
683 application.Render();
685 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
687 // renderer is added to actor
688 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
689 Renderer renderer = actor.GetRendererAt( 0u );
690 DALI_TEST_CHECK( renderer );
692 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
693 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
695 int resultStartFrame, resultEndFrame;
696 Property::Array* result = value->GetArray();
697 result->GetElementAt( 0 ).Get( resultStartFrame );
698 result->GetElementAt( 1 ).Get( resultEndFrame );
700 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
701 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
703 // Set invalid play range
706 array.PushBack( 100 );
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( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
725 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
727 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
729 application.SendNotification();
730 application.Render();
732 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
734 application.SendNotification();
735 application.Render();
737 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
739 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
740 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
741 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
748 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
749 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
751 application.SendNotification();
752 application.Render();
754 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
756 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
757 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
759 result = value->GetArray();
760 result->GetElementAt( 0 ).Get( resultStartFrame );
761 result->GetElementAt( 1 ).Get( resultEndFrame );
763 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
764 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
766 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
767 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
772 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
774 ToolkitTestApplication application;
775 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
777 Property::Array array;
778 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
780 Property::Map propertyMap;
781 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
782 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
783 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
785 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
786 DALI_TEST_CHECK( visual );
788 DummyControl actor = DummyControl::New( true );
789 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
790 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
792 Vector2 controlSize( 20.f, 30.f );
793 actor.SetProperty( Actor::Property::SIZE, controlSize );
795 application.GetScene().Add( actor );
797 Property::Map attributes;
798 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
800 application.SendNotification();
801 application.Render();
803 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
805 // renderer is added to actor
806 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
807 Renderer renderer = actor.GetRendererAt( 0u );
808 DALI_TEST_CHECK( renderer );
810 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
811 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
813 int resultStartFrame, resultEndFrame;
814 Property::Array* result = value->GetArray();
815 result->GetElementAt( 0 ).Get( resultStartFrame );
816 result->GetElementAt( 1 ).Get( resultEndFrame );
818 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
819 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
823 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
824 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
827 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
828 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
830 application.SendNotification();
831 application.Render();
833 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
835 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
836 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
838 result = value->GetArray();
839 result->GetElementAt( 0 ).Get( resultStartFrame );
840 result->GetElementAt( 1 ).Get( resultEndFrame );
842 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
843 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
845 // Set invalid play range
848 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
851 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
852 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
854 application.SendNotification();
855 application.Render();
857 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
859 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
860 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
862 result = value->GetArray();
863 result->GetElementAt( 0 ).Get( resultStartFrame );
864 result->GetElementAt( 1 ).Get( resultEndFrame );
866 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
867 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
872 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
874 ToolkitTestApplication application;
875 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
877 Property::Map propertyMap;
878 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
879 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
880 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
882 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
883 DALI_TEST_CHECK( visual );
885 DummyControl actor = DummyControl::New( true );
886 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
887 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
889 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
891 Vector2 controlSize( 20.f, 30.f );
892 actor.SetProperty( Actor::Property::SIZE, controlSize );
894 application.GetScene().Add( actor );
896 Property::Map attributes;
897 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
899 application.SendNotification();
900 application.Render();
902 // Wait for animation finish
903 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
905 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
906 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
907 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
909 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
914 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
916 ToolkitTestApplication application;
917 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
919 Property::Map propertyMap;
920 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
921 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
923 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
924 DALI_TEST_CHECK( visual );
926 tet_printf( "1. Visual is created.\n" );
928 DummyControl actor = DummyControl::New( true );
929 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
930 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
932 Vector2 controlSize( 20.f, 30.f );
933 actor.SetProperty( Actor::Property::SIZE, controlSize );
935 application.GetScene().Add( actor );
937 application.SendNotification();
938 application.Render();
940 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
942 application.SendNotification();
943 application.Render();
945 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
947 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
948 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
949 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
951 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
953 Property::Array array;
957 Property::Map attributes;
958 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
959 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
961 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
963 application.SendNotification();
964 application.Render();
966 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
968 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
969 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
970 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
972 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
981 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
982 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
985 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
987 application.SendNotification();
988 application.Render();
990 // Stop and jump to 3
991 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
993 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
995 application.SendNotification();
996 application.Render();
998 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1000 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1001 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1002 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1004 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
1006 // Jump to the same position
1007 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
1009 application.SendNotification();
1010 application.Render();
1012 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1014 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1015 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1016 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1018 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
1023 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
1025 ToolkitTestApplication application;
1026 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
1028 int startFrame = 1, endFrame = 3;
1029 Property::Array playRange;
1030 playRange.PushBack( startFrame );
1031 playRange.PushBack( endFrame );
1033 Property::Map propertyMap;
1034 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1035 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1036 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1037 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1039 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1040 DALI_TEST_CHECK( visual );
1042 DummyControl actor = DummyControl::New( true );
1043 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1044 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1046 Vector2 controlSize( 20.f, 30.f );
1047 actor.SetProperty( Actor::Property::SIZE, controlSize );
1049 application.GetScene().Add( actor );
1051 application.SendNotification();
1052 application.Render();
1054 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1056 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1057 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1058 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1060 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
1061 DALI_TEST_CHECK( value );
1063 Property::Array* result = value->GetArray();
1064 DALI_TEST_CHECK( result );
1066 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1067 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1070 playRange.PushBack( 0 );
1071 playRange.PushBack( 2 );
1073 Property::Map attributes;
1074 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1075 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1077 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1079 application.SendNotification();
1080 application.Render();
1082 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1084 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1085 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1086 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1088 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1089 result = value->GetArray();
1090 DALI_TEST_CHECK( result );
1092 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1093 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1098 playRange.PushBack( startFrame );
1099 playRange.PushBack( endFrame );
1101 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1103 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1105 application.SendNotification();
1106 application.Render();
1108 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1110 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1111 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1113 result = value->GetArray();
1114 DALI_TEST_CHECK( result );
1116 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1117 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1119 // Play and update property
1121 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1123 application.SendNotification();
1124 application.Render();
1126 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1128 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1130 application.SendNotification();
1131 application.Render();
1133 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1134 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1135 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1140 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1142 ToolkitTestApplication application;
1143 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1145 Property::Map propertyMap;
1146 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1147 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1148 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1149 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1151 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1152 DALI_TEST_CHECK( visual );
1154 DummyControl actor = DummyControl::New( true );
1155 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1156 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1158 Vector2 controlSize( 20.f, 30.f );
1159 actor.SetProperty( Actor::Property::SIZE, controlSize );
1161 application.GetScene().Add( actor );
1163 Property::Map attributes;
1164 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1166 application.SendNotification();
1167 application.Render();
1169 // Trigger count is 1 - animation finished
1170 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1172 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1173 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1174 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1176 // Change stop behavior
1177 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1179 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1184 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1186 application.SendNotification();
1187 application.Render();
1189 // Trigger count is 1 - animation finished
1190 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1192 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1194 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1195 int totalFrameNumber = value1->Get< int >();
1197 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1198 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1200 // Change stop behavior
1201 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1202 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1204 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1209 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1211 application.SendNotification();
1212 application.Render();
1215 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1217 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1218 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1219 int currentFrameNumber = value->Get< int >();
1222 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1224 application.SendNotification();
1225 application.Render( 16 );
1227 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1228 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1229 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1234 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1236 ToolkitTestApplication application;
1237 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1239 Property::Map propertyMap;
1240 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1241 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1242 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1243 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1244 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1246 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1247 DALI_TEST_CHECK( visual );
1249 DummyControl actor = DummyControl::New( true );
1250 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1251 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1253 Vector2 controlSize( 20.f, 30.f );
1254 actor.SetProperty( Actor::Property::SIZE, controlSize );
1256 application.GetScene().Add( actor );
1258 Property::Map attributes;
1259 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1261 application.SendNotification();
1262 application.Render();
1264 // Trigger count is 1 - animation finished
1265 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1267 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1268 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1269 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1271 // Change stop behavior
1272 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1274 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1277 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1279 application.SendNotification();
1280 application.Render();
1282 // Trigger count is 1 - animation finished
1283 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1285 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1286 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1287 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1289 // Change looping mode
1290 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1292 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1295 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1297 application.SendNotification();
1298 application.Render();
1300 // Trigger count is 1 - animation finished
1301 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1303 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1304 int totalFrameNumber = value1->Get< int >();
1306 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1307 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1308 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1313 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1315 ToolkitTestApplication application;
1316 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1318 Property::Map propertyMap;
1319 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1320 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1322 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1323 DALI_TEST_CHECK( visual );
1325 DummyControl actor = DummyControl::New( true );
1326 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1327 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1329 Vector2 controlSize( 20.f, 30.f );
1330 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1331 actor.SetProperty( Actor::Property::SIZE, controlSize );
1332 actor.SetProperty( Actor::Property::SCALE, controlScale );
1334 application.GetScene().Add( actor );
1336 application.SendNotification();
1337 application.Render();
1339 application.SendNotification();
1340 application.Render();
1342 Renderer renderer = actor.GetRendererAt( 0u );
1343 DALI_TEST_CHECK( renderer );
1345 auto textureSet = renderer.GetTextures();
1346 auto texture = textureSet.GetTexture(0);
1348 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1349 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1351 // Change scale and size
1352 controlSize = Vector2( 50.f, 40.f );
1353 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1354 actor.SetProperty( Actor::Property::SIZE, controlSize );
1355 actor.SetProperty( Actor::Property::SCALE, controlScale );
1357 application.SendNotification();
1358 application.Render();
1360 application.SendNotification();
1361 application.Render();
1363 renderer = actor.GetRendererAt( 0u );
1364 DALI_TEST_CHECK( renderer );
1366 textureSet = renderer.GetTextures();
1367 texture = textureSet.GetTexture(0);
1369 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1370 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1375 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1377 ToolkitTestApplication application;
1378 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1380 Property::Map propertyMap;
1381 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1382 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1384 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1385 DALI_TEST_CHECK( visual1 );
1387 DummyControl actor1 = DummyControl::New( true );
1388 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1389 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1391 Vector2 controlSize( 20.f, 30.f );
1392 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1394 application.GetScene().Add( actor1 );
1396 propertyMap.Clear();
1397 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1398 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1400 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1401 DALI_TEST_CHECK( visual2 );
1403 DummyControl actor2 = DummyControl::New( true );
1404 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1405 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1407 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1409 application.GetScene().Add( actor2 );
1411 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1413 application.SendNotification();
1414 application.Render();
1416 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1418 Property::Map attributes;
1419 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1421 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1422 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1424 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1426 // renderer is added to actor
1427 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1428 Renderer renderer1 = actor1.GetRendererAt( 0u );
1429 DALI_TEST_CHECK( renderer1 );
1431 // renderer is added to actor
1432 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1433 Renderer renderer2 = actor2.GetRendererAt( 0u );
1434 DALI_TEST_CHECK( renderer2 );
1439 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1441 ToolkitTestApplication application;
1442 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1444 Property::Map propertyMap;
1445 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1446 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1448 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1449 DALI_TEST_CHECK( visual );
1451 DummyControl actor = DummyControl::New( true );
1452 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1453 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1455 Vector2 controlSize( 20.f, 30.f );
1456 actor.SetProperty( Actor::Property::SIZE, controlSize );
1458 application.GetScene().Add( actor );
1460 application.SendNotification();
1461 application.Render();
1463 Property::Map attributes;
1464 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1466 application.SendNotification();
1467 application.Render();
1469 // Check rendering behavior
1470 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1471 Renderer renderer = actor.GetRendererAt( 0u );
1472 DALI_TEST_CHECK( renderer );
1473 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1475 actor.SetProperty( Actor::Property::VISIBLE, false );
1477 application.SendNotification();
1478 application.Render();
1480 // Check rendering behavior again
1481 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1486 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1488 ToolkitTestApplication application;
1489 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1491 Property::Map propertyMap;
1492 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1493 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1495 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1496 DALI_TEST_CHECK( visual );
1498 DummyControl actor = DummyControl::New( true );
1499 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1500 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1502 Vector2 controlSize( 20.f, 30.f );
1503 actor.SetProperty( Actor::Property::SIZE, controlSize );
1505 application.GetScene().Add( actor );
1507 application.SendNotification();
1508 application.Render();
1510 Property::Map attributes;
1511 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1513 application.SendNotification();
1514 application.Render();
1516 // Check rendering behavior
1517 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1518 Renderer renderer = actor.GetRendererAt( 0u );
1519 DALI_TEST_CHECK( renderer );
1520 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1522 Window window = DevelWindow::Get( actor );
1525 application.SendNotification();
1526 application.Render();
1528 // Check rendering behavior again
1529 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1534 int UtcDaliAnimatedVectorImageVisualInvalidFile(void)
1536 ToolkitTestApplication application;
1537 tet_infoline("Request loading with invalid file - should draw broken image");
1539 TestGlAbstraction& gl = application.GetGlAbstraction();
1540 TraceCallStack& textureTrace = gl.GetTextureTrace();
1541 textureTrace.Enable(true);
1543 Property::Map propertyMap;
1544 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1545 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
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 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1556 application.GetScene().Add(actor);
1558 application.SendNotification();
1559 application.Render();
1561 // Check resource status
1562 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1563 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1565 // The broken image should be shown.
1566 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1567 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1572 int UtcDaliAnimatedVectorImageVisualFrameDrops(void)
1574 ToolkitTestApplication application;
1575 tet_infoline("UtcDaliAnimatedVectorImageVisualFrameDrops");
1577 Property::Map propertyMap;
1578 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1579 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP);
1581 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1582 DALI_TEST_CHECK(visual);
1584 DummyControl actor = DummyControl::New(true);
1585 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1586 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1588 Vector2 controlSize(20.f, 30.f);
1589 actor.SetProperty(Actor::Property::SIZE, controlSize);
1591 application.GetScene().Add(actor);
1593 application.SendNotification();
1594 application.Render();
1596 // Trigger count is 1 - render the first frame
1597 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1599 Property::Map attributes;
1600 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1602 // Make delay to drop frames
1603 Test::VectorAnimationRenderer::DelayRendering(170); // longer than 16.6 * 10frames
1605 application.SendNotification();
1606 application.Render();
1608 // Wait for calculating frame drops
1609 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1611 // Check dropped frame
1612 uint32_t frames = Test::VectorAnimationRenderer::GetDroppedFrames();
1613 DALI_TEST_CHECK(frames > 0);