Merge "Support Underline to Markup using underlined-character-run" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-AnimatedVectorImageVisual.cpp
1 /*
2  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include <iostream>
18 #include <stdlib.h>
19 #include <chrono>
20 #include <thread>
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"
35
36 using namespace Dali;
37 using namespace Dali::Toolkit;
38
39 void dali_animated_vector_image_visual_startup(void)
40 {
41   test_return_value = TET_UNDEF;
42 }
43
44 void dali_animated_vector_image_visual_cleanup(void)
45 {
46   test_return_value = TET_PASS;
47 }
48
49 namespace
50 {
51
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";
55
56 bool gAnimationFinishedSignalFired = false;
57
58 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
59 {
60   if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
61   {
62     gAnimationFinishedSignalFired = true;
63   }
64 }
65
66 }
67
68 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
69 {
70   ToolkitTestApplication application;
71   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
72
73   VisualFactory factory = VisualFactory::Get();
74   Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
75   DALI_TEST_CHECK( visual );
76
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 );
82
83   application.SendNotification();
84   application.Render();
85
86   // renderer is added to actor
87   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
88   Renderer renderer = actor.GetRendererAt( 0u );
89   DALI_TEST_CHECK( renderer );
90
91   // Test SetOffScene().
92   actor.Unparent();
93   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
94
95   END_TEST;
96 }
97
98 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
99 {
100   ToolkitTestApplication application;
101   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
102
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  );
106
107   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
108   DALI_TEST_CHECK( visual );
109
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 );
115
116   application.SendNotification();
117   application.Render();
118
119   // renderer is added to actor
120   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
121   Renderer renderer = actor.GetRendererAt( 0u );
122   DALI_TEST_CHECK( renderer );
123
124   actor.Unparent( );
125   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
126
127   END_TEST;
128 }
129
130 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
131 {
132   ToolkitTestApplication application;
133   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
134
135   int startFrame = 1, endFrame = 3;
136   Property::Array playRange;
137   playRange.PushBack( startFrame );
138   playRange.PushBack( endFrame );
139
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
147   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
148   DALI_TEST_CHECK( visual );
149
150   DummyControl actor = DummyControl::New( true );
151   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
152   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
153   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
154   application.GetScene().Add( actor );
155
156   application.SendNotification();
157   application.Render();
158
159   // renderer is added to actor
160   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
161   Renderer renderer = actor.GetRendererAt( 0u );
162   DALI_TEST_CHECK( renderer );
163
164   actor.Unparent( );
165   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
166
167   END_TEST;
168 }
169
170 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
171 {
172   ToolkitTestApplication application;
173   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
174
175   int startFrame = 1, endFrame = 3;
176   float cornerRadius = 22.0f;
177   Property::Array playRange;
178   playRange.PushBack( startFrame );
179   playRange.PushBack( endFrame );
180
181   Property::Map propertyMap;
182   propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
183              .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
184              .Add( "loopCount", 3 )
185              .Add( "playRange", playRange )
186              .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
187              .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE )
188              .Add( "redrawInScalingDown", false )
189              .Add( "cornerRadius", cornerRadius );
190
191   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
192   DALI_TEST_CHECK( visual );
193
194   DummyControl actor = DummyControl::New( true );
195   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
196   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
197   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
198   application.GetScene().Add( actor );
199
200   application.SendNotification();
201   application.Render();
202
203   // Trigger count is 1 - render a frame
204   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
205
206   // renderer is added to actor
207   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
208
209   Renderer renderer = actor.GetRendererAt( 0u );
210   DALI_TEST_CHECK( renderer );
211
212   Property::Map resultMap;
213   visual.CreatePropertyMap( resultMap );
214
215   // check the property values from the returned map from a visual
216   Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
217   DALI_TEST_CHECK( value );
218   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
219
220   value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
221   DALI_TEST_CHECK( value );
222   DALI_TEST_CHECK( value->Get< int >() == 3 );
223
224   value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
225   DALI_TEST_CHECK( value );
226
227   Property::Array* result = value->GetArray();
228   DALI_TEST_CHECK( result );
229
230   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
231   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
232
233   value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
234   DALI_TEST_CHECK( value );
235   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
236
237   value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
238   DALI_TEST_CHECK( value );
239   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
240
241   value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
242   DALI_TEST_CHECK( value );
243   DALI_TEST_CHECK( value->Get< bool >() == false );
244
245   value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
246   DALI_TEST_CHECK( value );
247   DALI_TEST_EQUALS( value->Get< Vector4 >(), Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius), TEST_LOCATION );
248
249   value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
250   DALI_TEST_CHECK( value );
251   DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::ABSOLUTE );
252
253   actor.Unparent( );
254   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
255
256   END_TEST;
257 }
258
259 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
260 {
261   ToolkitTestApplication application;
262   tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
263
264   int startFrame = 1, endFrame = 3;
265   Vector4 cornerRadius(50.0f, 22.0f, 0.0f, 3.0f);
266   Property::Array playRange;
267   playRange.PushBack( startFrame );
268   playRange.PushBack( endFrame );
269
270   Property::Map propertyMap;
271   propertyMap.Add( Toolkit::Visual::Property::TYPE,  DevelVisual::ANIMATED_VECTOR_IMAGE )
272              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
273              .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
274              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange )
275              .Add( DevelVisual::Property::CORNER_RADIUS, cornerRadius )
276              .Add( DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE);
277
278   // request AnimatedVectorImageVisual with a property map
279   VisualFactory factory = VisualFactory::Get();
280   Visual::Base visual = factory.CreateVisual( propertyMap );
281
282   DummyControl actor = DummyControl::New( true );
283   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
284   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
285
286   Vector2 controlSize( 20.f, 30.f );
287   actor.SetProperty( Actor::Property::SIZE, controlSize );
288
289   application.GetScene().Add( actor );
290
291   application.SendNotification();
292   application.Render();
293
294   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
295
296   Property::Map resultMap;
297   resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
298
299   // check the property values from the returned map from a visual
300   Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
301   DALI_TEST_CHECK( value );
302   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
303
304   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
305   DALI_TEST_CHECK( value );
306   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
307
308   value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
309   DALI_TEST_CHECK( value );
310   DALI_TEST_CHECK( value->Get< int >() == 3 );
311
312   value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
313   DALI_TEST_CHECK( value );
314
315   Property::Array* result = value->GetArray();
316   DALI_TEST_CHECK( result );
317
318   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
319   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
320
321   value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
322   DALI_TEST_CHECK( value );
323   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
324
325   value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
326   DALI_TEST_CHECK( value );
327   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
328
329   value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
330   DALI_TEST_CHECK( value );
331
332   value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
333   DALI_TEST_CHECK( value );
334   DALI_TEST_CHECK( value->Get< bool >() == true );    // Check default value
335
336   value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
337   DALI_TEST_CHECK( value );
338   DALI_TEST_EQUALS( value->Get< Vector4 >(), cornerRadius, TEST_LOCATION );
339
340   value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" );
341   DALI_TEST_CHECK( value );
342   DALI_TEST_CHECK( value->Get< int >() == Visual::Transform::Policy::RELATIVE );
343
344   // request AnimatedVectorImageVisual with an URL
345   Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
346
347   resultMap.Clear();
348   visual2.CreatePropertyMap( resultMap );
349
350   // check the property values from the returned map from a visual
351   value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
352   DALI_TEST_CHECK( value );
353   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
354
355   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
356   DALI_TEST_CHECK( value );
357   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
358
359   END_TEST;
360 }
361
362 int UtcDaliAnimatedVectorImageVisualPlayback(void)
363 {
364   ToolkitTestApplication application;
365
366   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
367
368   {
369     // request AnimatedVectorImageVisual with a property map
370     VisualFactory factory = VisualFactory::Get();
371     Visual::Base visual = factory.CreateVisual(
372       Property::Map()
373       .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
374       .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
375
376     DummyControl dummyControl = DummyControl::New( true );
377     Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
378     dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
379     dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
380
381     Property::Map attributes;
382     tet_infoline( "Test Play action" );
383     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
384
385     application.GetScene().Add( dummyControl );
386     application.SendNotification();
387     application.Render( 16 );
388
389     Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
390     Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
391     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
392
393     tet_infoline( "Test Pause action" );
394     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
395
396     application.SendNotification();
397     application.Render(16);
398
399     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
400     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
401     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
402
403     tet_infoline( "Test Play action" );
404     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
405
406     application.SendNotification();
407     application.Render(16);
408
409     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
410     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
411     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
412
413     tet_infoline( "Test Stop action" );
414     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
415
416     application.SendNotification();
417     application.Render(16);
418
419     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
420     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
421     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
422
423     tet_infoline( "Test Stop action again" );
424     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
425
426     application.SendNotification();
427     application.Render(16);
428
429     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
430     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
431     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
432
433     tet_infoline( "Test Play action" );
434     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
435
436     application.SendNotification();
437     application.Render(16);
438
439     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
440     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
441     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
442
443     tet_infoline( "Off stage" );
444     dummyControl.Unparent();
445
446     application.SendNotification();
447     application.Render(16);
448
449     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
450     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
451     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
452
453     tet_infoline( "On stage again" );
454     application.GetScene().Add( dummyControl );
455
456     application.SendNotification();
457     application.Render(16);
458
459     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
460     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
461     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
462
463     tet_infoline( "Test Play action" );
464     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
465
466     application.SendNotification();
467     application.Render(16);
468
469     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
470     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
471     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
472
473     // Change Size
474     Vector3 newSize( 100.0f, 100.0f, 0.0f );
475     dummyControl.SetProperty( Actor::Property::SIZE, newSize );
476
477     application.SendNotification();
478     application.Render(16);
479
480     // Size should be changed
481     Vector3 naturalSize = dummyControl.GetNaturalSize();
482     DALI_TEST_CHECK( naturalSize == newSize );
483
484     dummyControl.Unparent();
485   }
486
487   END_TEST;
488 }
489
490 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
491 {
492   ToolkitTestApplication application;
493   tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
494
495   VisualFactory factory = VisualFactory::Get();
496   Property::Map properties;
497   Property::Map shader;
498   const std::string vertexShader = "Foobar";
499   const std::string fragmentShader = "Foobar sampler2D Foobar";
500   shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
501   shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
502
503   properties[Visual::Property::TYPE] = Visual::IMAGE;
504   properties[Visual::Property::SHADER] = shader;
505   properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
506
507   Visual::Base visual = factory.CreateVisual( properties );
508
509   // trigger creation through setting on stage
510   DummyControl dummy = DummyControl::New( true );
511   Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
512   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
513
514   dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
515   dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
516   application.GetScene().Add( dummy );
517
518   application.SendNotification();
519   application.Render();
520
521   Renderer renderer = dummy.GetRendererAt( 0 );
522   Shader shader2 = renderer.GetShader();
523   Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
524   Property::Map* map = value.GetMap();
525   DALI_TEST_CHECK( map );
526
527   std::string resultFragmentShader, resultVertexShader;
528   Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
529   fragment->Get( resultFragmentShader );
530   DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
531
532   Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
533   vertex->Get( resultVertexShader );
534   DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
535
536   END_TEST;
537 }
538
539 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
540 {
541   ToolkitTestApplication application;
542   tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
543
544   VisualFactory factory = VisualFactory::Get();
545   Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
546   DALI_TEST_CHECK( visual );
547
548   DummyControl actor = DummyControl::New( true );
549   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
550   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
551
552   Vector2 controlSize( 20.f, 30.f );
553   Vector2 naturalSize;
554
555   application.GetScene().Add( actor );
556
557   application.SendNotification();
558   application.Render();
559
560   visual.GetNaturalSize( naturalSize );
561
562   DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION );    // 100x100 is the content default size.
563
564   actor.SetProperty( Actor::Property::SIZE, controlSize );
565
566   application.SendNotification();
567   application.Render();
568
569   visual.GetNaturalSize( naturalSize );
570
571   DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
572
573   END_TEST;
574 }
575
576 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
577 {
578   ToolkitTestApplication application;
579   tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
580
581   Property::Map propertyMap;
582   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
583              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
584              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
585
586   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
587   DALI_TEST_CHECK( visual );
588
589   DummyControl actor = DummyControl::New( true );
590   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
591   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
592
593   Vector2 controlSize( 20.f, 30.f );
594   actor.SetProperty( Actor::Property::SIZE, controlSize );
595
596   application.GetScene().Add( actor );
597
598   Property::Map attributes;
599   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
600
601   application.SendNotification();
602   application.Render();
603
604   // Trigger count is 1 - render a frame
605   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
606
607   // renderer is added to actor
608   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
609   Renderer renderer = actor.GetRendererAt( 0u );
610   DALI_TEST_CHECK( renderer );
611
612   END_TEST;
613 }
614
615 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
616 {
617   ToolkitTestApplication application;
618   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
619
620   int startFrame = 1, endFrame = 3;
621   Property::Array array;
622   array.PushBack( endFrame );
623   array.PushBack( startFrame );
624
625   Property::Map propertyMap;
626   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
627              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
628              .Add( DevelImageVisual::Property::PLAY_RANGE, array  );
629
630   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
631   DALI_TEST_CHECK( visual );
632
633   DummyControl actor = DummyControl::New( true );
634   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
635   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
636
637   Vector2 controlSize( 20.f, 30.f );
638   actor.SetProperty( Actor::Property::SIZE, controlSize );
639
640   application.GetScene().Add( actor );
641
642   Property::Map attributes;
643   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
644
645   application.SendNotification();
646   application.Render();
647
648   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
649
650   // renderer is added to actor
651   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
652   Renderer renderer = actor.GetRendererAt( 0u );
653   DALI_TEST_CHECK( renderer );
654
655   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
656   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
657
658   int resultStartFrame, resultEndFrame;
659   Property::Array* result = value->GetArray();
660   result->GetElementAt( 0 ).Get( resultStartFrame );
661   result->GetElementAt( 1 ).Get( resultEndFrame );
662
663   DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
664   DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
665
666   // Set invalid play range
667   array.Clear();
668   array.PushBack( 1 );
669   array.PushBack( 100 );
670
671   attributes.Clear();
672   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
673   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
674
675   application.SendNotification();
676   application.Render();
677
678   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
679
680   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
681   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
682
683   result = value->GetArray();
684   result->GetElementAt( 0 ).Get( resultStartFrame );
685   result->GetElementAt( 1 ).Get( resultEndFrame );
686
687   DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );  // Should not be changed
688   DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
689
690   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
691
692   application.SendNotification();
693   application.Render();
694
695   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
696
697   application.SendNotification();
698   application.Render();
699
700   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
701
702   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
703   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
704   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
705
706   array.Clear();
707   array.PushBack( 0 );
708   array.PushBack( 2 );
709
710   attributes.Clear();
711   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
712   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
713
714   application.SendNotification();
715   application.Render();
716
717   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
718
719   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
720   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
721
722   result = value->GetArray();
723   result->GetElementAt( 0 ).Get( resultStartFrame );
724   result->GetElementAt( 1 ).Get( resultEndFrame );
725
726   DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
727   DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
728
729   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
730   DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );    // CURRENT_FRAME_NUMBER should be changed also.
731
732   END_TEST;
733 }
734
735 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
736 {
737   ToolkitTestApplication application;
738   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
739
740   Property::Array array;
741   array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
742
743   Property::Map propertyMap;
744   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
745              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
746              .Add( DevelImageVisual::Property::PLAY_RANGE, array  );
747
748   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
749   DALI_TEST_CHECK( visual );
750
751   DummyControl actor = DummyControl::New( true );
752   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
753   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
754
755   Vector2 controlSize( 20.f, 30.f );
756   actor.SetProperty( Actor::Property::SIZE, controlSize );
757
758   application.GetScene().Add( actor );
759
760   Property::Map attributes;
761   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
762
763   application.SendNotification();
764   application.Render();
765
766   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
767
768   // renderer is added to actor
769   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
770   Renderer renderer = actor.GetRendererAt( 0u );
771   DALI_TEST_CHECK( renderer );
772
773   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
774   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
775
776   int resultStartFrame, resultEndFrame;
777   Property::Array* result = value->GetArray();
778   result->GetElementAt( 0 ).Get( resultStartFrame );
779   result->GetElementAt( 1 ).Get( resultEndFrame );
780
781   DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
782   DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
783
784   // Set 2 markers
785   array.Clear();
786   array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
787   array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
788
789   attributes.Clear();
790   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
791   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
792
793   application.SendNotification();
794   application.Render();
795
796   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
797
798   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
799   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
800
801   result = value->GetArray();
802   result->GetElementAt( 0 ).Get( resultStartFrame );
803   result->GetElementAt( 1 ).Get( resultEndFrame );
804
805   DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
806   DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
807
808   // Set invalid play range
809   array.Clear();
810   array.PushBack( 1 );
811   array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
812
813   attributes.Clear();
814   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
815   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
816
817   application.SendNotification();
818   application.Render();
819
820   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
821
822   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
823   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
824
825   result = value->GetArray();
826   result->GetElementAt( 0 ).Get( resultStartFrame );
827   result->GetElementAt( 1 ).Get( resultEndFrame );
828
829   DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );  // Should not be changed
830   DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
831
832   END_TEST;
833 }
834
835 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
836 {
837   ToolkitTestApplication application;
838   tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
839
840   Property::Map propertyMap;
841   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
842              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
843              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
844
845   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
846   DALI_TEST_CHECK( visual );
847
848   DummyControl actor = DummyControl::New( true );
849   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
850   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
851
852   DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
853
854   Vector2 controlSize( 20.f, 30.f );
855   actor.SetProperty( Actor::Property::SIZE, controlSize );
856
857   application.GetScene().Add( actor );
858
859   Property::Map attributes;
860   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
861
862   application.SendNotification();
863   application.Render();
864
865   // Wait for animation finish
866   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
867
868   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
869   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
870   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
871
872   DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
873
874   END_TEST;
875 }
876
877 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
878 {
879   ToolkitTestApplication application;
880   tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
881
882   Property::Map propertyMap;
883   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
884              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
885
886   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
887   DALI_TEST_CHECK( visual );
888
889   tet_printf( "1. Visual is created.\n" );
890
891   DummyControl actor = DummyControl::New( true );
892   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
893   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
894
895   Vector2 controlSize( 20.f, 30.f );
896   actor.SetProperty( Actor::Property::SIZE, controlSize );
897
898   application.GetScene().Add( actor );
899
900   application.SendNotification();
901   application.Render();
902
903   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
904
905   application.SendNotification();
906   application.Render();
907
908   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
909
910   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
911   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
912   DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
913
914   tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
915
916   Property::Array array;
917   array.PushBack( 0 );
918   array.PushBack( 2 );
919
920   Property::Map attributes;
921   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
922   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
923
924   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
925
926   application.SendNotification();
927   application.Render();
928
929   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
930
931   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
932   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
933   DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
934
935   tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
936
937   // Change play range
938   attributes.Clear();
939   array.Clear();
940
941   array.PushBack( 0 );
942   array.PushBack( 4 );
943
944   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
945   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
946
947   attributes.Clear();
948   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
949
950   application.SendNotification();
951   application.Render();
952
953   // Stop and jump to 3
954   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
955
956   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
957
958   application.SendNotification();
959   application.Render();
960
961   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
962
963   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
964   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
965   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
966
967   tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
968
969   // Jump to the same position
970   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
971
972   application.SendNotification();
973   application.Render();
974
975   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
976
977   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
978   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
979   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
980
981   tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
982
983   END_TEST;
984 }
985
986 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
987 {
988   ToolkitTestApplication application;
989   tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
990
991   int startFrame = 1, endFrame = 3;
992   Property::Array playRange;
993   playRange.PushBack( startFrame );
994   playRange.PushBack( endFrame );
995
996   Property::Map propertyMap;
997   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
998              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
999              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
1000              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
1001
1002   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1003   DALI_TEST_CHECK( visual );
1004
1005   DummyControl actor = DummyControl::New( true );
1006   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1007   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1008
1009   Vector2 controlSize( 20.f, 30.f );
1010   actor.SetProperty( Actor::Property::SIZE, controlSize );
1011
1012   application.GetScene().Add( actor );
1013
1014   application.SendNotification();
1015   application.Render();
1016
1017   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
1018
1019   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1020   Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1021   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
1022
1023   value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
1024   DALI_TEST_CHECK( value );
1025
1026   Property::Array* result = value->GetArray();
1027   DALI_TEST_CHECK( result );
1028
1029   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1030   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1031
1032   playRange.Clear();
1033   playRange.PushBack( 0 );
1034   playRange.PushBack( 2 );
1035
1036   Property::Map attributes;
1037   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1038   attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1039
1040   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1041
1042   application.SendNotification();
1043   application.Render();
1044
1045   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
1046
1047   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1048   value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1049   DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1050
1051   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1052   result = value->GetArray();
1053   DALI_TEST_CHECK( result );
1054
1055   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1056   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1057
1058   attributes.Clear();
1059
1060   playRange.Clear();
1061   playRange.PushBack( startFrame );
1062   playRange.PushBack( endFrame );
1063
1064   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1065
1066   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1067
1068   application.SendNotification();
1069   application.Render();
1070
1071   std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
1072
1073   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1074   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1075
1076   result = value->GetArray();
1077   DALI_TEST_CHECK( result );
1078
1079   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1080   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1081
1082   // Play and update property
1083   attributes.Clear();
1084   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1085
1086   application.SendNotification();
1087   application.Render();
1088
1089   attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1090
1091   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1092
1093   application.SendNotification();
1094   application.Render();
1095
1096   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1097   value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1098   DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1099
1100   END_TEST;
1101 }
1102
1103 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1104 {
1105   ToolkitTestApplication application;
1106   tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1107
1108   Property::Map propertyMap;
1109   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1110              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1111              .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1112              .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1113
1114   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1115   DALI_TEST_CHECK( visual );
1116
1117   DummyControl actor = DummyControl::New( true );
1118   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1119   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1120
1121   Vector2 controlSize( 20.f, 30.f );
1122   actor.SetProperty( Actor::Property::SIZE, controlSize );
1123
1124   application.GetScene().Add( actor );
1125
1126   Property::Map attributes;
1127   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1128
1129   application.SendNotification();
1130   application.Render();
1131
1132   // Trigger count is 1 - animation finished
1133   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1134
1135   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1136   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1137   DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION );  // Should be the first frame
1138
1139   // Change stop behavior
1140   attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1141
1142   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1143
1144   attributes.Clear();
1145
1146   // Play again
1147   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1148
1149   application.SendNotification();
1150   application.Render();
1151
1152   // Trigger count is 1 - animation finished
1153   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1154
1155   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1156
1157   Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1158   int totalFrameNumber = value1->Get< int >();
1159
1160   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1161   DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION );  // Should be the last frame
1162
1163   // Change stop behavior
1164   attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1165   attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1166
1167   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1168
1169   attributes.Clear();
1170
1171   // Play again
1172   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1173
1174   application.SendNotification();
1175   application.Render();
1176
1177   // Pause
1178   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1179
1180   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1181   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1182   int currentFrameNumber = value->Get< int >();
1183
1184   // Stop
1185   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1186
1187   application.SendNotification();
1188   application.Render( 16 );
1189
1190   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1191   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1192   DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION );  // Should be same with currentFrameNumber
1193
1194   END_TEST;
1195 }
1196
1197 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1198 {
1199   ToolkitTestApplication application;
1200   tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1201
1202   Property::Map propertyMap;
1203   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1204              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1205              .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1206              .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1207              .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1208
1209   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1210   DALI_TEST_CHECK( visual );
1211
1212   DummyControl actor = DummyControl::New( true );
1213   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1214   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1215
1216   Vector2 controlSize( 20.f, 30.f );
1217   actor.SetProperty( Actor::Property::SIZE, controlSize );
1218
1219   application.GetScene().Add( actor );
1220
1221   Property::Map attributes;
1222   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1223
1224   application.SendNotification();
1225   application.Render();
1226
1227   // Trigger count is 1 - animation finished
1228   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1229
1230   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1231   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1232   DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION );  // Should be the first frame because of auto reverse
1233
1234   // Change stop behavior
1235   attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1236
1237   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1238
1239   // Play again
1240   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1241
1242   application.SendNotification();
1243   application.Render();
1244
1245   // Trigger count is 1 - animation finished
1246   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1247
1248   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1249   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1250   DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION );  // Should be the first frame
1251
1252   // Change looping mode
1253   attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1254
1255   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1256
1257   // Play again
1258   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1259
1260   application.SendNotification();
1261   application.Render();
1262
1263   // Trigger count is 1 - animation finished
1264   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1265
1266   Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1267   int totalFrameNumber = value1->Get< int >();
1268
1269   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1270   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1271   DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION );  // Should be the last frame
1272
1273   END_TEST;
1274 }
1275
1276 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1277 {
1278   ToolkitTestApplication application;
1279   tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1280
1281   Property::Map propertyMap;
1282   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1283              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
1284
1285   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1286   DALI_TEST_CHECK( visual );
1287
1288   DummyControl actor = DummyControl::New( true );
1289   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1290   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1291
1292   Vector2 controlSize( 20.f, 30.f );
1293   Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1294   actor.SetProperty( Actor::Property::SIZE, controlSize );
1295   actor.SetProperty( Actor::Property::SCALE, controlScale );
1296
1297   application.GetScene().Add( actor );
1298
1299   application.SendNotification();
1300   application.Render();
1301
1302   application.SendNotification();
1303   application.Render();
1304
1305   Renderer renderer = actor.GetRendererAt( 0u );
1306   DALI_TEST_CHECK( renderer );
1307
1308   auto textureSet = renderer.GetTextures();
1309   auto texture = textureSet.GetTexture(0);
1310
1311   DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1312   DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1313
1314   // Change scale and size
1315   controlSize = Vector2( 50.f, 40.f );
1316   controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1317   actor.SetProperty( Actor::Property::SIZE, controlSize );
1318   actor.SetProperty( Actor::Property::SCALE, controlScale );
1319
1320   application.SendNotification();
1321   application.Render();
1322
1323   application.SendNotification();
1324   application.Render();
1325
1326   renderer = actor.GetRendererAt( 0u );
1327   DALI_TEST_CHECK( renderer );
1328
1329   textureSet = renderer.GetTextures();
1330   texture = textureSet.GetTexture(0);
1331
1332   DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1333   DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1334
1335   END_TEST;
1336 }
1337
1338 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1339 {
1340   ToolkitTestApplication application;
1341   tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1342
1343   Property::Map propertyMap;
1344   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1345              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1346
1347   Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1348   DALI_TEST_CHECK( visual1 );
1349
1350   DummyControl actor1 = DummyControl::New( true );
1351   DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1352   dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1353
1354   Vector2 controlSize( 20.f, 30.f );
1355   actor1.SetProperty( Actor::Property::SIZE, controlSize );
1356
1357   application.GetScene().Add( actor1 );
1358
1359   propertyMap.Clear();
1360   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1361              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1362
1363   Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1364   DALI_TEST_CHECK( visual2 );
1365
1366   DummyControl actor2 = DummyControl::New( true );
1367   DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1368   dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1369
1370   actor2.SetProperty( Actor::Property::SIZE, controlSize );
1371
1372   application.GetScene().Add( actor2 );
1373
1374   DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1375
1376   application.SendNotification();
1377   application.Render();
1378
1379   std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1380
1381   Property::Map attributes;
1382   attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1383
1384   DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1385   DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1386
1387   DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1388
1389   // renderer is added to actor
1390   DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1391   Renderer renderer1 = actor1.GetRendererAt( 0u );
1392   DALI_TEST_CHECK( renderer1 );
1393
1394   // renderer is added to actor
1395   DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1396   Renderer renderer2 = actor2.GetRendererAt( 0u );
1397   DALI_TEST_CHECK( renderer2 );
1398
1399   END_TEST;
1400 }
1401
1402 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1403 {
1404   ToolkitTestApplication application;
1405   tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1406
1407   Property::Map propertyMap;
1408   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1409              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1410
1411   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1412   DALI_TEST_CHECK( visual );
1413
1414   DummyControl actor = DummyControl::New( true );
1415   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1416   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1417
1418   Vector2 controlSize( 20.f, 30.f );
1419   actor.SetProperty( Actor::Property::SIZE, controlSize );
1420
1421   application.GetScene().Add( actor );
1422
1423   application.SendNotification();
1424   application.Render();
1425
1426   Property::Map attributes;
1427   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1428
1429   application.SendNotification();
1430   application.Render();
1431
1432   // Check rendering behavior
1433   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1434   Renderer renderer = actor.GetRendererAt( 0u );
1435   DALI_TEST_CHECK( renderer );
1436   DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1437
1438   actor.SetProperty( Actor::Property::VISIBLE, false );
1439
1440   application.SendNotification();
1441   application.Render();
1442
1443   // Check rendering behavior again
1444   DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1445
1446   END_TEST;
1447 }
1448
1449 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1450 {
1451   ToolkitTestApplication application;
1452   tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1453
1454   Property::Map propertyMap;
1455   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1456              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1457
1458   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1459   DALI_TEST_CHECK( visual );
1460
1461   DummyControl actor = DummyControl::New( true );
1462   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1463   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1464
1465   Vector2 controlSize( 20.f, 30.f );
1466   actor.SetProperty( Actor::Property::SIZE, controlSize );
1467
1468   application.GetScene().Add( actor );
1469
1470   application.SendNotification();
1471   application.Render();
1472
1473   Property::Map attributes;
1474   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1475
1476   application.SendNotification();
1477   application.Render();
1478
1479   // Check rendering behavior
1480   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1481   Renderer renderer = actor.GetRendererAt( 0u );
1482   DALI_TEST_CHECK( renderer );
1483   DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1484
1485   Window window = DevelWindow::Get( actor );
1486   window.Hide();
1487
1488   application.SendNotification();
1489   application.Render();
1490
1491   // Check rendering behavior again
1492   DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1493
1494   END_TEST;
1495 }
1496
1497 int UtcDaliAnimatedVectorImageVisualInvalidFile(void)
1498 {
1499   ToolkitTestApplication application;
1500   tet_infoline("Request loading with invalid file - should draw broken image");
1501
1502   TestGlAbstraction& gl = application.GetGlAbstraction();
1503   TraceCallStack& textureTrace = gl.GetTextureTrace();
1504   textureTrace.Enable(true);
1505
1506   Property::Map propertyMap;
1507   propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1508              .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
1509
1510   Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1511   DALI_TEST_CHECK(visual);
1512
1513   DummyControl actor = DummyControl::New(true);
1514   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >(actor.GetImplementation());
1515   dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1516
1517   actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1518
1519   application.GetScene().Add(actor);
1520
1521   application.SendNotification();
1522   application.Render();
1523
1524   // Check resource status
1525   Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1526   DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1527
1528   // The broken image should be shown.
1529   DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1530   DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1531
1532   END_TEST;
1533 }
1534
1535 int UtcDaliAnimatedVectorImageVisualFrameDrops(void)
1536 {
1537   ToolkitTestApplication application;
1538   tet_infoline("UtcDaliAnimatedVectorImageVisualFrameDrops");
1539
1540   Property::Map propertyMap;
1541   propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1542              .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP);
1543
1544   Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1545   DALI_TEST_CHECK(visual);
1546
1547   DummyControl actor = DummyControl::New(true);
1548   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1549   dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1550
1551   Vector2 controlSize(20.f, 30.f);
1552   actor.SetProperty(Actor::Property::SIZE, controlSize);
1553
1554   application.GetScene().Add(actor);
1555
1556   application.SendNotification();
1557   application.Render();
1558
1559   Property::Map attributes;
1560   DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1561
1562   application.SendNotification();
1563   application.Render();
1564
1565   // Trigger count is 1 - render the first frame
1566   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1567
1568   // Make delay to drop frames
1569   Test::VectorAnimationRenderer::DelayRendering(170); // longer than 16.6 * 10frames
1570
1571   // Check dropped frame
1572   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1573
1574   uint32_t frames = Test::VectorAnimationRenderer::GetDroppedFrames();
1575   DALI_TEST_CHECK(frames >= 9);
1576
1577   END_TEST;
1578 }