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/visual-actions-devel.h>
31 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
32 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
33 #include <dali/devel-api/rendering/renderer-devel.h>
34 #include <dali/devel-api/adaptor-framework/window-devel.h>
35 #include "dummy-control.h"
38 using namespace Dali::Toolkit;
40 void dali_animated_vector_image_visual_startup(void)
42 test_return_value = TET_UNDEF;
45 void dali_animated_vector_image_visual_cleanup(void)
47 test_return_value = TET_PASS;
53 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
54 const char* TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP = "framedrop.json";
55 const char* TEST_VECTOR_IMAGE_INVALID_FILE_NAME = "invalid.json";
57 bool gAnimationFinishedSignalFired = false;
59 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
61 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
63 gAnimationFinishedSignalFired = true;
69 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
71 ToolkitTestApplication application;
72 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
74 VisualFactory factory = VisualFactory::Get();
75 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
76 DALI_TEST_CHECK( visual );
78 DummyControl actor = DummyControl::New( true );
79 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
80 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
81 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
82 application.GetScene().Add( actor );
84 application.SendNotification();
87 // renderer is added to actor
88 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
89 Renderer renderer = actor.GetRendererAt( 0u );
90 DALI_TEST_CHECK( renderer );
92 // Test SetOffScene().
94 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
99 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
101 ToolkitTestApplication application;
102 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
104 Property::Map propertyMap;
105 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
106 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
108 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
109 DALI_TEST_CHECK( visual );
111 DummyControl actor = DummyControl::New( true );
112 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
113 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
114 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
115 application.GetScene().Add( actor );
117 application.SendNotification();
118 application.Render();
120 // renderer is added to actor
121 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
122 Renderer renderer = actor.GetRendererAt( 0u );
123 DALI_TEST_CHECK( renderer );
126 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
131 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
133 ToolkitTestApplication application;
134 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
136 int startFrame = 1, endFrame = 3;
137 Property::Array playRange;
138 playRange.PushBack( startFrame );
139 playRange.PushBack( endFrame );
141 Property::Map propertyMap;
142 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
143 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
144 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
145 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
146 .Add( DevelVisual::Property::CORNER_RADIUS, 50.0f )
147 .Add( DevelVisual::Property::BORDERLINE_WIDTH, 20.0f );
149 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
150 DALI_TEST_CHECK( visual );
152 DummyControl actor = DummyControl::New( true );
153 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
154 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
155 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
156 application.GetScene().Add( actor );
158 application.SendNotification();
159 application.Render();
161 // renderer is added to actor
162 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
163 Renderer renderer = actor.GetRendererAt( 0u );
164 DALI_TEST_CHECK( renderer );
167 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
172 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
174 ToolkitTestApplication application;
175 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
177 int startFrame = 1, endFrame = 3;
178 float cornerRadius = 22.0f;
179 float borderlineWidth = 2.0f;
180 Vector4 borderlineColor = Vector4(1.0f, 1.0f, 1.0f, 1.0f);
181 float borderlineOffset = 0.1f;
182 Property::Array playRange;
183 playRange.PushBack( startFrame );
184 playRange.PushBack( endFrame );
186 Property::Map propertyMap;
187 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
188 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
189 .Add( "loopCount", 3 )
190 .Add( "playRange", playRange )
191 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
192 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE )
193 .Add( "redrawInScalingDown", false )
194 .Add( "cornerRadius", cornerRadius )
195 .Add( "borderlineWidth", borderlineWidth )
196 .Add( "borderlineColor", borderlineColor )
197 .Add( "borderlineOffset", borderlineOffset );
199 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
200 DALI_TEST_CHECK( visual );
202 DummyControl actor = DummyControl::New( true );
203 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
204 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
205 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
206 application.GetScene().Add( actor );
208 application.SendNotification();
209 application.Render();
211 // Trigger count is 1 - render a frame
212 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
214 // renderer is added to actor
215 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
217 Renderer renderer = actor.GetRendererAt( 0u );
218 DALI_TEST_CHECK( renderer );
220 Property::Map resultMap;
221 visual.CreatePropertyMap( resultMap );
223 // check the property values from the returned map from a visual
224 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
225 DALI_TEST_CHECK( value );
226 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
228 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
229 DALI_TEST_CHECK( value );
230 DALI_TEST_CHECK( value->Get< int >() == 3 );
232 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
233 DALI_TEST_CHECK( value );
235 Property::Array* result = value->GetArray();
236 DALI_TEST_CHECK( result );
238 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
239 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
241 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
242 DALI_TEST_CHECK( value );
243 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
245 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
246 DALI_TEST_CHECK( value );
247 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
249 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
250 DALI_TEST_CHECK( value );
251 DALI_TEST_CHECK( value->Get< bool >() == false );
253 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
254 DALI_TEST_CHECK( value );
255 DALI_TEST_EQUALS( value->Get< Vector4 >(), Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius), TEST_LOCATION );
257 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
258 DALI_TEST_CHECK( value );
259 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::ABSOLUTE );
261 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
262 DALI_TEST_CHECK( value );
263 DALI_TEST_EQUALS( value->Get< float >(), borderlineWidth, TEST_LOCATION );
265 value = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
266 DALI_TEST_CHECK( value );
267 DALI_TEST_EQUALS( value->Get< Vector4 >(), borderlineColor, TEST_LOCATION );
269 value = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
270 DALI_TEST_CHECK( value );
271 DALI_TEST_EQUALS( value->Get< float >(), borderlineOffset, TEST_LOCATION );
274 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
279 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
281 ToolkitTestApplication application;
282 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
284 int startFrame = 1, endFrame = 3;
285 Vector4 cornerRadius(50.0f, 22.0f, 0.0f, 3.0f);
286 float borderlineWidth = 2.3f;
287 Vector4 borderlineColor = Vector4(0.3f, 0.3f, 1.0f, 1.0f);
288 float borderlineOffset = 0.3f;
289 Property::Array playRange;
290 playRange.PushBack( startFrame );
291 playRange.PushBack( endFrame );
293 Property::Map propertyMap;
294 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
295 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
296 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
297 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
298 .Add( DevelVisual::Property::CORNER_RADIUS, cornerRadius )
299 .Add( DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE)
300 .Add( DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth )
301 .Add( DevelVisual::Property::BORDERLINE_COLOR, borderlineColor )
302 .Add( DevelVisual::Property::BORDERLINE_OFFSET, borderlineOffset );
304 // request AnimatedVectorImageVisual with a property map
305 VisualFactory factory = VisualFactory::Get();
306 Visual::Base visual = factory.CreateVisual( propertyMap );
308 DummyControl actor = DummyControl::New( true );
309 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
310 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
312 Vector2 controlSize( 20.f, 30.f );
313 actor.SetProperty( Actor::Property::SIZE, controlSize );
315 application.GetScene().Add( actor );
317 application.SendNotification();
318 application.Render();
320 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
322 Property::Map resultMap;
323 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
325 // check the property values from the returned map from a visual
326 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
327 DALI_TEST_CHECK( value );
328 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
330 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
331 DALI_TEST_CHECK( value );
332 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
334 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
335 DALI_TEST_CHECK( value );
336 DALI_TEST_CHECK( value->Get< int >() == 3 );
338 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
339 DALI_TEST_CHECK( value );
341 Property::Array* result = value->GetArray();
342 DALI_TEST_CHECK( result );
344 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
345 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
347 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
348 DALI_TEST_CHECK( value );
349 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
351 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
352 DALI_TEST_CHECK( value );
353 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
355 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
356 DALI_TEST_CHECK( value );
358 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
359 DALI_TEST_CHECK( value );
360 DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value
362 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
363 DALI_TEST_CHECK( value );
364 DALI_TEST_EQUALS( value->Get< Vector4 >(), cornerRadius, TEST_LOCATION );
366 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
367 DALI_TEST_CHECK( value );
368 DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::RELATIVE );
370 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, "borderlineWidth" );
371 DALI_TEST_CHECK( value );
372 DALI_TEST_EQUALS( value->Get< float >(), borderlineWidth, TEST_LOCATION );
374 value = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
375 DALI_TEST_CHECK( value );
376 DALI_TEST_EQUALS( value->Get< Vector4 >(), borderlineColor, TEST_LOCATION );
378 value = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
379 DALI_TEST_CHECK( value );
380 DALI_TEST_EQUALS( value->Get< float >(), borderlineOffset, TEST_LOCATION );
382 // request AnimatedVectorImageVisual with an URL
383 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
386 visual2.CreatePropertyMap( resultMap );
388 // check the property values from the returned map from a visual
389 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
390 DALI_TEST_CHECK( value );
391 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
393 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
394 DALI_TEST_CHECK( value );
395 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
400 int UtcDaliAnimatedVectorImageVisualPlayback(void)
402 ToolkitTestApplication application;
404 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
407 // request AnimatedVectorImageVisual with a property map
408 VisualFactory factory = VisualFactory::Get();
409 Visual::Base visual = factory.CreateVisual(
411 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
412 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
414 DummyControl dummyControl = DummyControl::New( true );
415 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
416 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
417 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
419 Property::Map attributes;
420 tet_infoline( "Test Play action" );
421 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
423 application.GetScene().Add( dummyControl );
424 application.SendNotification();
425 application.Render( 16 );
427 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
428 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
429 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
431 tet_infoline( "Test Pause action" );
432 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
434 application.SendNotification();
435 application.Render(16);
437 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
438 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
439 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
441 tet_infoline( "Test Play action" );
442 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
444 application.SendNotification();
445 application.Render(16);
447 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
448 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
449 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
451 tet_infoline( "Test Stop action" );
452 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
454 application.SendNotification();
455 application.Render(16);
457 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
458 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
459 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
461 tet_infoline( "Test Stop action again" );
462 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
464 application.SendNotification();
465 application.Render(16);
467 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
468 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
469 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
471 tet_infoline( "Test Play action" );
472 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
474 application.SendNotification();
475 application.Render(16);
477 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
478 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
479 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
481 tet_infoline( "Off stage" );
482 dummyControl.Unparent();
484 application.SendNotification();
485 application.Render(16);
487 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
488 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
489 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
491 tet_infoline( "On stage again" );
492 application.GetScene().Add( dummyControl );
494 application.SendNotification();
495 application.Render(16);
497 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
498 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
499 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
501 tet_infoline( "Test Play action" );
502 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
504 application.SendNotification();
505 application.Render(16);
507 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
508 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
509 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
512 Vector3 newSize( 100.0f, 100.0f, 0.0f );
513 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
515 application.SendNotification();
516 application.Render(16);
518 // Size should be changed
519 Vector3 naturalSize = dummyControl.GetNaturalSize();
520 DALI_TEST_CHECK( naturalSize == newSize );
522 dummyControl.Unparent();
528 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
530 ToolkitTestApplication application;
531 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
533 VisualFactory factory = VisualFactory::Get();
534 Property::Map properties;
535 Property::Map shader;
536 const std::string vertexShader = "Foobar";
537 const std::string fragmentShader = "Foobar sampler2D Foobar";
538 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
539 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
541 properties[Visual::Property::TYPE] = Visual::IMAGE;
542 properties[Visual::Property::SHADER] = shader;
543 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
545 Visual::Base visual = factory.CreateVisual( properties );
547 // trigger creation through setting on stage
548 DummyControl dummy = DummyControl::New( true );
549 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
550 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
552 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
553 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
554 application.GetScene().Add( dummy );
556 application.SendNotification();
557 application.Render();
559 Renderer renderer = dummy.GetRendererAt( 0 );
560 Shader shader2 = renderer.GetShader();
561 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
562 Property::Map* map = value.GetMap();
563 DALI_TEST_CHECK( map );
565 std::string resultFragmentShader, resultVertexShader;
566 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
567 fragment->Get( resultFragmentShader );
568 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
570 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
571 vertex->Get( resultVertexShader );
572 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
577 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
579 ToolkitTestApplication application;
580 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
582 VisualFactory factory = VisualFactory::Get();
583 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
584 DALI_TEST_CHECK( visual );
586 DummyControl actor = DummyControl::New( true );
587 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
588 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
590 Vector2 controlSize( 20.f, 30.f );
593 application.GetScene().Add( actor );
595 application.SendNotification();
596 application.Render();
598 visual.GetNaturalSize( naturalSize );
600 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
602 actor.SetProperty( Actor::Property::SIZE, controlSize );
604 application.SendNotification();
605 application.Render();
607 visual.GetNaturalSize( naturalSize );
609 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
614 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
616 ToolkitTestApplication application;
617 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
619 Property::Map propertyMap;
620 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
621 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
622 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
624 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
625 DALI_TEST_CHECK( visual );
627 DummyControl actor = DummyControl::New( true );
628 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
629 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
631 Vector2 controlSize( 20.f, 30.f );
632 actor.SetProperty( Actor::Property::SIZE, controlSize );
634 application.GetScene().Add( actor );
636 Property::Map attributes;
637 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
639 application.SendNotification();
640 application.Render();
642 // Trigger count is 1 - render a frame
643 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
645 // renderer is added to actor
646 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
647 Renderer renderer = actor.GetRendererAt( 0u );
648 DALI_TEST_CHECK( renderer );
653 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
655 ToolkitTestApplication application;
656 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
658 int startFrame = 1, endFrame = 3;
659 Property::Array array;
660 array.PushBack( endFrame );
661 array.PushBack( startFrame );
663 Property::Map propertyMap;
664 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
665 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
666 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
668 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
669 DALI_TEST_CHECK( visual );
671 DummyControl actor = DummyControl::New( true );
672 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
673 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
675 Vector2 controlSize( 20.f, 30.f );
676 actor.SetProperty( Actor::Property::SIZE, controlSize );
678 application.GetScene().Add( actor );
680 Property::Map attributes;
681 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
683 application.SendNotification();
684 application.Render();
686 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
688 // renderer is added to actor
689 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
690 Renderer renderer = actor.GetRendererAt( 0u );
691 DALI_TEST_CHECK( renderer );
693 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
694 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
696 int resultStartFrame, resultEndFrame;
697 Property::Array* result = value->GetArray();
698 result->GetElementAt( 0 ).Get( resultStartFrame );
699 result->GetElementAt( 1 ).Get( resultEndFrame );
701 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
702 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
704 // Set invalid play range
707 array.PushBack( 100 );
710 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
711 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
713 application.SendNotification();
714 application.Render();
716 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
718 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
719 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
721 result = value->GetArray();
722 result->GetElementAt( 0 ).Get( resultStartFrame );
723 result->GetElementAt( 1 ).Get( resultEndFrame );
725 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
726 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
728 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
730 application.SendNotification();
731 application.Render();
733 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
735 application.SendNotification();
736 application.Render();
738 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
740 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
741 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
742 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
749 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
750 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
752 application.SendNotification();
753 application.Render();
755 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
757 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
758 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
760 result = value->GetArray();
761 result->GetElementAt( 0 ).Get( resultStartFrame );
762 result->GetElementAt( 1 ).Get( resultEndFrame );
764 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
765 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
767 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
768 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
773 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
775 ToolkitTestApplication application;
776 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
778 Property::Array array;
779 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
781 Property::Map propertyMap;
782 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
783 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
784 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
786 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
787 DALI_TEST_CHECK( visual );
789 DummyControl actor = DummyControl::New( true );
790 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
791 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
793 Vector2 controlSize( 20.f, 30.f );
794 actor.SetProperty( Actor::Property::SIZE, controlSize );
796 application.GetScene().Add( actor );
798 Property::Map attributes;
799 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
801 application.SendNotification();
802 application.Render();
804 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
806 // renderer is added to actor
807 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
808 Renderer renderer = actor.GetRendererAt( 0u );
809 DALI_TEST_CHECK( renderer );
811 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
812 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
814 int resultStartFrame, resultEndFrame;
815 Property::Array* result = value->GetArray();
816 result->GetElementAt( 0 ).Get( resultStartFrame );
817 result->GetElementAt( 1 ).Get( resultEndFrame );
819 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
820 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
824 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
825 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
828 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
829 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
831 application.SendNotification();
832 application.Render();
834 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
836 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
837 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
839 result = value->GetArray();
840 result->GetElementAt( 0 ).Get( resultStartFrame );
841 result->GetElementAt( 1 ).Get( resultEndFrame );
843 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
844 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
846 // Set invalid play range
849 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
852 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
853 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
855 application.SendNotification();
856 application.Render();
858 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
860 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
861 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
863 result = value->GetArray();
864 result->GetElementAt( 0 ).Get( resultStartFrame );
865 result->GetElementAt( 1 ).Get( resultEndFrame );
867 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
868 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
873 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
875 ToolkitTestApplication application;
876 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
878 Property::Map propertyMap;
879 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
880 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
881 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
883 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
884 DALI_TEST_CHECK( visual );
886 DummyControl actor = DummyControl::New( true );
887 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
888 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
890 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
892 Vector2 controlSize( 20.f, 30.f );
893 actor.SetProperty( Actor::Property::SIZE, controlSize );
895 application.GetScene().Add( actor );
897 Property::Map attributes;
898 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
900 application.SendNotification();
901 application.Render();
903 // Wait for animation finish
904 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
906 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
907 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
908 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
910 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
915 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
917 ToolkitTestApplication application;
918 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
920 Property::Map propertyMap;
921 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
922 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
924 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
925 DALI_TEST_CHECK( visual );
927 tet_printf( "1. Visual is created.\n" );
929 DummyControl actor = DummyControl::New( true );
930 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
931 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
933 Vector2 controlSize( 20.f, 30.f );
934 actor.SetProperty( Actor::Property::SIZE, controlSize );
936 application.GetScene().Add( actor );
938 application.SendNotification();
939 application.Render();
941 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
943 application.SendNotification();
944 application.Render();
946 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
948 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
949 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
950 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
952 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
954 Property::Array array;
958 Property::Map attributes;
959 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
960 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
962 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
964 application.SendNotification();
965 application.Render();
967 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
969 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
970 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
971 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
973 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
982 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
983 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
986 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
988 application.SendNotification();
989 application.Render();
991 // Stop and jump to 3
992 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
994 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
996 application.SendNotification();
997 application.Render();
999 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1001 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1002 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1003 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1005 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
1007 // Jump to the same position
1008 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
1010 application.SendNotification();
1011 application.Render();
1013 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1015 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1016 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1017 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1019 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
1024 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
1026 ToolkitTestApplication application;
1027 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
1029 int startFrame = 1, endFrame = 3;
1030 Property::Array playRange;
1031 playRange.PushBack( startFrame );
1032 playRange.PushBack( endFrame );
1034 Property::Map propertyMap;
1035 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1036 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1037 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1038 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1040 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1041 DALI_TEST_CHECK( visual );
1043 DummyControl actor = DummyControl::New( true );
1044 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1045 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1047 Vector2 controlSize( 20.f, 30.f );
1048 actor.SetProperty( Actor::Property::SIZE, controlSize );
1050 application.GetScene().Add( actor );
1052 application.SendNotification();
1053 application.Render();
1055 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1057 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1058 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1059 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1061 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
1062 DALI_TEST_CHECK( value );
1064 Property::Array* result = value->GetArray();
1065 DALI_TEST_CHECK( result );
1067 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1068 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1071 playRange.PushBack( 0 );
1072 playRange.PushBack( 2 );
1074 Property::Map attributes;
1075 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1076 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1078 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1080 application.SendNotification();
1081 application.Render();
1083 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1085 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1086 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1087 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1089 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1090 result = value->GetArray();
1091 DALI_TEST_CHECK( result );
1093 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1094 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1099 playRange.PushBack( startFrame );
1100 playRange.PushBack( endFrame );
1102 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1104 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1106 application.SendNotification();
1107 application.Render();
1109 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1111 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1112 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1114 result = value->GetArray();
1115 DALI_TEST_CHECK( result );
1117 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1118 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1120 // Play and update property
1122 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1124 application.SendNotification();
1125 application.Render();
1127 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1129 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1131 application.SendNotification();
1132 application.Render();
1134 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1135 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1136 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1141 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1143 ToolkitTestApplication application;
1144 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1146 Property::Map propertyMap;
1147 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1148 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1149 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1150 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1152 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1153 DALI_TEST_CHECK( visual );
1155 DummyControl actor = DummyControl::New( true );
1156 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1157 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1159 Vector2 controlSize( 20.f, 30.f );
1160 actor.SetProperty( Actor::Property::SIZE, controlSize );
1162 application.GetScene().Add( actor );
1164 Property::Map attributes;
1165 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1167 application.SendNotification();
1168 application.Render();
1170 // Trigger count is 1 - animation finished
1171 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1173 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1174 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1175 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1177 // Change stop behavior
1178 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1180 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1185 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1187 application.SendNotification();
1188 application.Render();
1190 // Trigger count is 1 - animation finished
1191 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1193 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1195 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1196 int totalFrameNumber = value1->Get< int >();
1198 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1199 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1201 // Change stop behavior
1202 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1203 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1205 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1210 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1212 application.SendNotification();
1213 application.Render();
1216 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1218 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1219 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1220 int currentFrameNumber = value->Get< int >();
1223 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1225 application.SendNotification();
1226 application.Render( 16 );
1228 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1229 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1230 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1235 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1237 ToolkitTestApplication application;
1238 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1240 Property::Map propertyMap;
1241 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1242 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1243 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1244 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1245 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1247 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1248 DALI_TEST_CHECK( visual );
1250 DummyControl actor = DummyControl::New( true );
1251 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1252 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1254 Vector2 controlSize( 20.f, 30.f );
1255 actor.SetProperty( Actor::Property::SIZE, controlSize );
1257 application.GetScene().Add( actor );
1259 Property::Map attributes;
1260 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1262 application.SendNotification();
1263 application.Render();
1265 // Trigger count is 1 - animation finished
1266 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1268 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1269 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1270 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1272 // Change stop behavior
1273 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1275 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1278 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1280 application.SendNotification();
1281 application.Render();
1283 // Trigger count is 1 - animation finished
1284 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1286 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1287 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1288 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1290 // Change looping mode
1291 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1293 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1296 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1298 application.SendNotification();
1299 application.Render();
1301 // Trigger count is 1 - animation finished
1302 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1304 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1305 int totalFrameNumber = value1->Get< int >();
1307 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1308 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1309 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1314 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1316 ToolkitTestApplication application;
1317 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1319 Property::Map propertyMap;
1320 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1321 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1323 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1324 DALI_TEST_CHECK( visual );
1326 DummyControl actor = DummyControl::New( true );
1327 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1328 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1330 Vector2 controlSize( 20.f, 30.f );
1331 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1332 actor.SetProperty( Actor::Property::SIZE, controlSize );
1333 actor.SetProperty( Actor::Property::SCALE, controlScale );
1335 application.GetScene().Add( actor );
1337 application.SendNotification();
1338 application.Render();
1340 application.SendNotification();
1341 application.Render();
1343 Renderer renderer = actor.GetRendererAt( 0u );
1344 DALI_TEST_CHECK( renderer );
1346 auto textureSet = renderer.GetTextures();
1347 auto texture = textureSet.GetTexture(0);
1349 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1350 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1352 // Change scale and size
1353 controlSize = Vector2( 50.f, 40.f );
1354 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1355 actor.SetProperty( Actor::Property::SIZE, controlSize );
1356 actor.SetProperty( Actor::Property::SCALE, controlScale );
1358 application.SendNotification();
1359 application.Render();
1361 application.SendNotification();
1362 application.Render();
1364 renderer = actor.GetRendererAt( 0u );
1365 DALI_TEST_CHECK( renderer );
1367 textureSet = renderer.GetTextures();
1368 texture = textureSet.GetTexture(0);
1370 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1371 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1376 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1378 ToolkitTestApplication application;
1379 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1381 Property::Map propertyMap;
1382 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1383 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1385 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1386 DALI_TEST_CHECK( visual1 );
1388 DummyControl actor1 = DummyControl::New( true );
1389 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1390 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1392 Vector2 controlSize( 20.f, 30.f );
1393 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1395 application.GetScene().Add( actor1 );
1397 propertyMap.Clear();
1398 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1399 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1401 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1402 DALI_TEST_CHECK( visual2 );
1404 DummyControl actor2 = DummyControl::New( true );
1405 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1406 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1408 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1410 application.GetScene().Add( actor2 );
1412 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1414 application.SendNotification();
1415 application.Render();
1417 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1419 Property::Map attributes;
1420 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1422 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1423 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes );
1425 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1427 // renderer is added to actor
1428 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1429 Renderer renderer1 = actor1.GetRendererAt( 0u );
1430 DALI_TEST_CHECK( renderer1 );
1432 // renderer is added to actor
1433 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1434 Renderer renderer2 = actor2.GetRendererAt( 0u );
1435 DALI_TEST_CHECK( renderer2 );
1440 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1442 ToolkitTestApplication application;
1443 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1445 Property::Map propertyMap;
1446 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1447 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1449 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1450 DALI_TEST_CHECK( visual );
1452 DummyControl actor = DummyControl::New( true );
1453 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1454 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1456 Vector2 controlSize( 20.f, 30.f );
1457 actor.SetProperty( Actor::Property::SIZE, controlSize );
1459 application.GetScene().Add( actor );
1461 application.SendNotification();
1462 application.Render();
1464 Property::Map attributes;
1465 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1467 application.SendNotification();
1468 application.Render();
1470 // Check rendering behavior
1471 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1472 Renderer renderer = actor.GetRendererAt( 0u );
1473 DALI_TEST_CHECK( renderer );
1474 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1476 actor.SetProperty( Actor::Property::VISIBLE, false );
1478 application.SendNotification();
1479 application.Render();
1481 // Check rendering behavior again
1482 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1487 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1489 ToolkitTestApplication application;
1490 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1492 Property::Map propertyMap;
1493 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1494 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1496 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1497 DALI_TEST_CHECK( visual );
1499 DummyControl actor = DummyControl::New( true );
1500 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1501 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1503 Vector2 controlSize( 20.f, 30.f );
1504 actor.SetProperty( Actor::Property::SIZE, controlSize );
1506 application.GetScene().Add( actor );
1508 application.SendNotification();
1509 application.Render();
1511 Property::Map attributes;
1512 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1514 application.SendNotification();
1515 application.Render();
1517 // Check rendering behavior
1518 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1519 Renderer renderer = actor.GetRendererAt( 0u );
1520 DALI_TEST_CHECK( renderer );
1521 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1523 Window window = DevelWindow::Get( actor );
1526 application.SendNotification();
1527 application.Render();
1529 // Check rendering behavior again
1530 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1535 int UtcDaliAnimatedVectorImageVisualInvalidFile(void)
1537 ToolkitTestApplication application;
1538 tet_infoline("Request loading with invalid file - should draw broken image");
1540 TestGlAbstraction& gl = application.GetGlAbstraction();
1541 TraceCallStack& textureTrace = gl.GetTextureTrace();
1542 textureTrace.Enable(true);
1544 Property::Map propertyMap;
1545 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1546 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
1548 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1549 DALI_TEST_CHECK(visual);
1551 DummyControl actor = DummyControl::New(true);
1552 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >(actor.GetImplementation());
1553 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1555 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1557 application.GetScene().Add(actor);
1559 application.SendNotification();
1560 application.Render();
1562 // Check resource status
1563 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1564 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1566 // The broken image should be shown.
1567 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1568 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1573 int UtcDaliAnimatedVectorImageVisualFrameDrops(void)
1575 ToolkitTestApplication application;
1576 tet_infoline("UtcDaliAnimatedVectorImageVisualFrameDrops");
1578 Property::Map propertyMap;
1579 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1580 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP);
1582 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1583 DALI_TEST_CHECK(visual);
1585 DummyControl actor = DummyControl::New(true);
1586 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1587 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1589 Vector2 controlSize(20.f, 30.f);
1590 actor.SetProperty(Actor::Property::SIZE, controlSize);
1592 application.GetScene().Add(actor);
1594 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1595 Property::Value* value = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1596 int totalFrameNumber = value->Get< int >();
1598 Property::Map attributes;
1599 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1601 // Make delay to drop frames
1602 Test::VectorAnimationRenderer::DelayRendering(170); // longer than 16.6 * 10frames
1604 application.SendNotification();
1605 application.Render();
1607 // Trigger count is 2 - render the first frame & calculating frame drops
1608 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1610 // Check dropped frame
1611 uint32_t frames = Test::VectorAnimationRenderer::GetDroppedFrames();
1612 DALI_TEST_CHECK(frames > 0);
1613 DALI_TEST_CHECK(frames <= static_cast<uint32_t>(totalFrameNumber));