Merge "Enum properties added for the text effects style." into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-AnimatedVectorImageVisual.cpp
1 /*
2  * Copyright (c) 2018 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 <dali-toolkit-test-suite-utils.h>
20 #include <toolkit-timer.h>
21 #include <toolkit-event-thread-callback.h>
22 #include <dali-toolkit/dali-toolkit.h>
23 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
24 #include <dali-toolkit/devel-api/controls/control-devel.h>
25 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
26 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
27 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
28 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
29 #include "dummy-control.h"
30
31 using namespace Dali;
32 using namespace Dali::Toolkit;
33
34 void dali_animated_vector_image_visual_startup(void)
35 {
36   test_return_value = TET_UNDEF;
37 }
38
39 void dali_animated_vector_image_visual_cleanup(void)
40 {
41   test_return_value = TET_PASS;
42 }
43
44 namespace
45 {
46
47 const char* TEST_VECTOR_IMAGE_FILE_NAME =  TEST_RESOURCE_DIR  "/insta_camera.json";
48
49 bool gAnimationFinishedSignalFired = false;
50
51 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
52 {
53   if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
54   {
55     gAnimationFinishedSignalFired = true;
56   }
57 }
58
59 }
60
61 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
62 {
63   ToolkitTestApplication application;
64   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
65
66   VisualFactory factory = VisualFactory::Get();
67   Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
68   DALI_TEST_CHECK( visual );
69
70   DummyControl actor = DummyControl::New( true );
71   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
72   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
73   actor.SetSize( 200.0f, 200.0f );
74   Stage::GetCurrent().Add( actor );
75
76   application.SendNotification();
77   application.Render();
78
79   // Wait for resource ready event callback
80   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
81
82   // renderer is added to actor
83   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
84   Renderer renderer = actor.GetRendererAt( 0u );
85   DALI_TEST_CHECK( renderer );
86
87   // Test SetOffStage().
88   actor.Unparent();
89   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
90
91   END_TEST;
92 }
93
94 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
95 {
96   ToolkitTestApplication application;
97   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
98
99   Property::Map propertyMap;
100   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
101              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
102
103   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
104   DALI_TEST_CHECK( visual );
105
106   DummyControl actor = DummyControl::New( true );
107   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
108   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
109   actor.SetSize( 200.0f, 200.0f );
110   Stage::GetCurrent().Add( actor );
111
112   application.SendNotification();
113   application.Render();
114
115   // Wait for resource ready event callback
116   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
117
118   // renderer is added to actor
119   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
120   Renderer renderer = actor.GetRendererAt( 0u );
121   DALI_TEST_CHECK( renderer );
122
123   actor.Unparent( );
124   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
125
126   END_TEST;
127 }
128
129 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
130 {
131   ToolkitTestApplication application;
132   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
133
134   Property::Map propertyMap;
135   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
136              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
137              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
138              .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.2f, 0.8f )  );
139
140   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
141   DALI_TEST_CHECK( visual );
142
143   DummyControl actor = DummyControl::New( true );
144   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
145   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
146   actor.SetSize( 200.0f, 200.0f );
147   Stage::GetCurrent().Add( actor );
148
149   application.SendNotification();
150   application.Render();
151
152   // Wait for resource ready event callback
153   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
154
155   // renderer is added to actor
156   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
157   Renderer renderer = actor.GetRendererAt( 0u );
158   DALI_TEST_CHECK( renderer );
159
160   actor.Unparent( );
161   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
162
163   END_TEST;
164 }
165
166 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
167 {
168   ToolkitTestApplication application;
169   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
170
171   Property::Map propertyMap;
172   propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
173              .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME  )
174              .Add( "loopCount", 3  )
175              .Add( "playRange", Vector2( 0.2f, 0.8f )  );
176
177   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
178   DALI_TEST_CHECK( visual );
179
180   DummyControl actor = DummyControl::New( true );
181   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
182   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
183   actor.SetSize( 200.0f, 200.0f );
184   Stage::GetCurrent().Add( actor );
185
186   application.SendNotification();
187   application.Render();
188
189   // Wait for resource ready event callback
190   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
191
192   // renderer is added to actor
193   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
194   Renderer renderer = actor.GetRendererAt( 0u );
195   DALI_TEST_CHECK( renderer );
196
197   actor.Unparent( );
198   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
199
200   END_TEST;
201 }
202
203 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
204 {
205   ToolkitTestApplication application;
206   tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
207
208   Vector2 playRange( 0.2f, 0.8f );
209
210   Property::Map propertyMap;
211   propertyMap.Add( Toolkit::Visual::Property::TYPE,  DevelVisual::ANIMATED_VECTOR_IMAGE )
212              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
213              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
214              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
215
216   // request AnimatedVectorImageVisual with a property map
217   VisualFactory factory = VisualFactory::Get();
218   Visual::Base visual = factory.CreateVisual( propertyMap );
219
220   Property::Map resultMap;
221   visual.CreatePropertyMap( resultMap );
222
223   // check the property values from the returned map from a visual
224   Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
225   DALI_TEST_CHECK( value );
226   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
227
228   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
229   DALI_TEST_CHECK( value );
230   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
231
232   value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
233   DALI_TEST_CHECK( value );
234   DALI_TEST_CHECK( value->Get< int >() == 3 );
235
236   value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::VECTOR2 );
237   DALI_TEST_CHECK( value );
238   DALI_TEST_CHECK( value->Get< Vector2 >() == playRange );
239
240   // request AnimatedVectorImageVisual with an URL
241   Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
242
243   resultMap.Clear();
244   visual2.CreatePropertyMap( resultMap );
245
246   // check the property values from the returned map from a visual
247   value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
248   DALI_TEST_CHECK( value );
249   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
250
251   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
252   DALI_TEST_CHECK( value );
253   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
254
255   END_TEST;
256 }
257
258 int UtcDaliAnimatedVectorImageVisualPlayback(void)
259 {
260   ToolkitTestApplication application;
261
262   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
263
264   {
265     // request AnimatedVectorImageVisual with a property map
266     VisualFactory factory = VisualFactory::Get();
267     Visual::Base visual = factory.CreateVisual(
268       Property::Map()
269       .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
270       .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
271
272     DummyControl dummyControl = DummyControl::New( true );
273     Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
274     dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
275     dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
276
277     Property::Map attributes;
278     tet_infoline( "Test Play action" );
279     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
280
281     Stage::GetCurrent().Add( dummyControl );
282     application.SendNotification();
283     application.Render( 16 );
284
285     DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
286
287     Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
288     Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
289     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
290
291     tet_infoline( "Test Pause action" );
292     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
293
294     application.SendNotification();
295     application.Render(16);
296
297     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
298     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
299     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PAUSED ) );
300
301     tet_infoline( "Test Play action" );
302     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
303
304     application.SendNotification();
305     application.Render(16);
306
307     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
308     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
309     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
310
311     tet_infoline( "Test Stop action" );
312     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
313
314     application.SendNotification();
315     application.Render(16);
316
317     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
318     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
319     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
320
321     tet_infoline( "Test Stop action again" );
322     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
323
324     application.SendNotification();
325     application.Render(16);
326
327     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
328     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
329     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
330
331     tet_infoline( "Test Play action" );
332     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
333
334     application.SendNotification();
335     application.Render(16);
336
337     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
338     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
339     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
340
341     // Change Size
342     Vector3 newSize( 100.0f, 100.0f, 0.0f );
343     dummyControl.SetSize( newSize );
344
345     application.SendNotification();
346     application.Render(16);
347
348     // Size should be changed
349     Vector3 naturalSize = dummyControl.GetNaturalSize();
350     DALI_TEST_CHECK( naturalSize == newSize );
351
352     dummyControl.Unparent();
353   }
354
355   END_TEST;
356 }
357
358 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
359 {
360   ToolkitTestApplication application;
361   tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
362
363   VisualFactory factory = VisualFactory::Get();
364   Property::Map properties;
365   Property::Map shader;
366   const std::string vertexShader = "Foobar";
367   const std::string fragmentShader = "Foobar sampler2D Foobar";
368   shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
369   shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
370
371   properties[Visual::Property::TYPE] = Visual::IMAGE;
372   properties[Visual::Property::SHADER] = shader;
373   properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
374
375   Visual::Base visual = factory.CreateVisual( properties );
376
377   // trigger creation through setting on stage
378   DummyControl dummy = DummyControl::New( true );
379   Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
380   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
381
382   dummy.SetSize( 200.f, 200.f );
383   dummy.SetParentOrigin( ParentOrigin::CENTER );
384   Stage::GetCurrent().Add( dummy );
385
386   application.SendNotification();
387   application.Render();
388
389   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
390
391   Renderer renderer = dummy.GetRendererAt( 0 );
392   Shader shader2 = renderer.GetShader();
393   Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
394   Property::Map* map = value.GetMap();
395   DALI_TEST_CHECK( map );
396
397   std::string resultFragmentShader, resultVertexShader;
398   Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
399   fragment->Get( resultFragmentShader );
400   DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
401
402   Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
403   vertex->Get( resultVertexShader );
404   DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
405
406   END_TEST;
407 }
408
409 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
410 {
411   ToolkitTestApplication application;
412   tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
413
414   VisualFactory factory = VisualFactory::Get();
415   Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
416   DALI_TEST_CHECK( visual );
417
418   DummyControl actor = DummyControl::New( true );
419   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
420   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
421
422   Vector2 controlSize( 20.f, 30.f );
423   Vector2 naturalSize;
424
425   actor.SetSize( controlSize );
426   Stage::GetCurrent().Add( actor );
427
428   application.SendNotification();
429   application.Render();
430
431   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
432
433   visual.GetNaturalSize( naturalSize );
434
435   DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
436
437   END_TEST;
438 }
439
440 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
441 {
442   ToolkitTestApplication application;
443   tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
444
445   Property::Map propertyMap;
446   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
447              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
448              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
449
450   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
451   DALI_TEST_CHECK( visual );
452
453   DummyControl actor = DummyControl::New( true );
454   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
455   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
456
457   Vector2 controlSize( 20.f, 30.f );
458   actor.SetSize( controlSize );
459
460   Stage::GetCurrent().Add( actor );
461
462   Property::Map attributes;
463   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
464
465   application.SendNotification();
466   application.Render();
467
468   // Trigger count is 2 - resource ready and animation finished
469   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
470
471   // renderer is added to actor
472   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
473   Renderer renderer = actor.GetRendererAt( 0u );
474   DALI_TEST_CHECK( renderer );
475
476   END_TEST;
477 }
478
479 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
480 {
481   ToolkitTestApplication application;
482   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
483
484   Vector2 playRange( 0.8f, 0.2f );
485
486   Property::Map propertyMap;
487   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
488              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
489              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
490
491   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
492   DALI_TEST_CHECK( visual );
493
494   DummyControl actor = DummyControl::New( true );
495   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
496   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
497
498   Vector2 controlSize( 20.f, 30.f );
499   actor.SetSize( controlSize );
500
501   Stage::GetCurrent().Add( actor );
502
503   Property::Map attributes;
504   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
505
506   application.SendNotification();
507   application.Render();
508
509   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
510
511   // renderer is added to actor
512   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
513   Renderer renderer = actor.GetRendererAt( 0u );
514   DALI_TEST_CHECK( renderer );
515
516   END_TEST;
517 }
518
519 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
520 {
521   ToolkitTestApplication application;
522   tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
523
524   Property::Map propertyMap;
525   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
526              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
527              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
528
529   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
530   DALI_TEST_CHECK( visual );
531
532   DummyControl actor = DummyControl::New( true );
533   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
534   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
535
536   DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
537
538   Vector2 controlSize( 20.f, 30.f );
539   actor.SetSize( controlSize );
540
541   Stage::GetCurrent().Add( actor );
542
543   Property::Map attributes;
544   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
545
546   application.SendNotification();
547   application.Render();
548
549   // Wait for animation finish
550   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
551
552   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
553   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
554   DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
555
556   DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
557
558   END_TEST;
559 }