(Vector) Fix some issues
[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 <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 <dali-toolkit/dali-toolkit.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
28 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
31 #include "dummy-control.h"
32
33 using namespace Dali;
34 using namespace Dali::Toolkit;
35
36 void dali_animated_vector_image_visual_startup(void)
37 {
38   test_return_value = TET_UNDEF;
39 }
40
41 void dali_animated_vector_image_visual_cleanup(void)
42 {
43   test_return_value = TET_PASS;
44 }
45
46 namespace
47 {
48
49 const char* TEST_VECTOR_IMAGE_FILE_NAME =  TEST_RESOURCE_DIR  "/insta_camera.json";
50
51 bool gAnimationFinishedSignalFired = false;
52
53 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
54 {
55   if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
56   {
57     gAnimationFinishedSignalFired = true;
58   }
59 }
60
61 }
62
63 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
64 {
65   ToolkitTestApplication application;
66   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
67
68   VisualFactory factory = VisualFactory::Get();
69   Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
70   DALI_TEST_CHECK( visual );
71
72   DummyControl actor = DummyControl::New( true );
73   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
74   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
75   actor.SetSize( 200.0f, 200.0f );
76   Stage::GetCurrent().Add( actor );
77
78   application.SendNotification();
79   application.Render();
80
81   // renderer is added to actor
82   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
83   Renderer renderer = actor.GetRendererAt( 0u );
84   DALI_TEST_CHECK( renderer );
85
86   // Test SetOffStage().
87   actor.Unparent();
88   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
89
90   END_TEST;
91 }
92
93 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
94 {
95   ToolkitTestApplication application;
96   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
97
98   Property::Map propertyMap;
99   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
100              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
101
102   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
103   DALI_TEST_CHECK( visual );
104
105   DummyControl actor = DummyControl::New( true );
106   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
107   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
108   actor.SetSize( 200.0f, 200.0f );
109   Stage::GetCurrent().Add( actor );
110
111   application.SendNotification();
112   application.Render();
113
114   // renderer is added to actor
115   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
116   Renderer renderer = actor.GetRendererAt( 0u );
117   DALI_TEST_CHECK( renderer );
118
119   actor.Unparent( );
120   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
121
122   END_TEST;
123 }
124
125 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
126 {
127   ToolkitTestApplication application;
128   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
129
130   int startFrame = 1, endFrame = 3;
131   Property::Array playRange;
132   playRange.PushBack( startFrame );
133   playRange.PushBack( endFrame );
134
135   Property::Map propertyMap;
136   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
137              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
138              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
139              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
140
141   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
142   DALI_TEST_CHECK( visual );
143
144   DummyControl actor = DummyControl::New( true );
145   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
146   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
147   actor.SetSize( 200.0f, 200.0f );
148   Stage::GetCurrent().Add( actor );
149
150   application.SendNotification();
151   application.Render();
152
153   // renderer is added to actor
154   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
155   Renderer renderer = actor.GetRendererAt( 0u );
156   DALI_TEST_CHECK( renderer );
157
158   actor.Unparent( );
159   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
160
161   END_TEST;
162 }
163
164 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
165 {
166   ToolkitTestApplication application;
167   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
168
169   int startFrame = 1, endFrame = 3;
170   Property::Array playRange;
171   playRange.PushBack( startFrame );
172   playRange.PushBack( endFrame );
173
174   Property::Map propertyMap;
175   propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
176              .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
177              .Add( "loopCount", 3 )
178              .Add( "playRange", playRange )
179              .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
180              .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
181
182   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
183   DALI_TEST_CHECK( visual );
184
185   DummyControl actor = DummyControl::New( true );
186   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
187   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
188   actor.SetSize( 200.0f, 200.0f );
189   Stage::GetCurrent().Add( actor );
190
191   application.SendNotification();
192   application.Render();
193
194   // renderer is added to actor
195   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
196   Renderer renderer = actor.GetRendererAt( 0u );
197   DALI_TEST_CHECK( renderer );
198
199   Property::Map resultMap;
200   visual.CreatePropertyMap( resultMap );
201
202   // check the property values from the returned map from a visual
203   Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
204   DALI_TEST_CHECK( value );
205   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
206
207   value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
208   DALI_TEST_CHECK( value );
209   DALI_TEST_CHECK( value->Get< int >() == 3 );
210
211   value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
212   DALI_TEST_CHECK( value );
213
214   Property::Array* result = value->GetArray();
215   DALI_TEST_CHECK( result );
216
217   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
218   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
219
220   value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
221   DALI_TEST_CHECK( value );
222   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
223
224   value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
225   DALI_TEST_CHECK( value );
226   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
227
228   actor.Unparent( );
229   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
230
231   END_TEST;
232 }
233
234 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
235 {
236   ToolkitTestApplication application;
237   tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
238
239   int startFrame = 1, endFrame = 3;
240   Property::Array playRange;
241   playRange.PushBack( startFrame );
242   playRange.PushBack( endFrame );
243
244   Property::Map propertyMap;
245   propertyMap.Add( Toolkit::Visual::Property::TYPE,  DevelVisual::ANIMATED_VECTOR_IMAGE )
246              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
247              .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
248              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
249
250   // request AnimatedVectorImageVisual with a property map
251   VisualFactory factory = VisualFactory::Get();
252   Visual::Base visual = factory.CreateVisual( propertyMap );
253
254   Property::Map resultMap;
255   visual.CreatePropertyMap( resultMap );
256
257   // check the property values from the returned map from a visual
258   Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
259   DALI_TEST_CHECK( value );
260   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
261
262   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
263   DALI_TEST_CHECK( value );
264   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
265
266   value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
267   DALI_TEST_CHECK( value );
268   DALI_TEST_CHECK( value->Get< int >() == 3 );
269
270   value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
271   DALI_TEST_CHECK( value );
272
273   Property::Array* result = value->GetArray();
274   DALI_TEST_CHECK( result );
275
276   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
277   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
278
279   value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
280   DALI_TEST_CHECK( value );
281   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
282
283   value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
284   DALI_TEST_CHECK( value );
285   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
286
287   // request AnimatedVectorImageVisual with an URL
288   Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
289
290   resultMap.Clear();
291   visual2.CreatePropertyMap( resultMap );
292
293   // check the property values from the returned map from a visual
294   value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
295   DALI_TEST_CHECK( value );
296   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
297
298   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
299   DALI_TEST_CHECK( value );
300   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
301
302   END_TEST;
303 }
304
305 int UtcDaliAnimatedVectorImageVisualPlayback(void)
306 {
307   ToolkitTestApplication application;
308
309   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
310
311   {
312     // request AnimatedVectorImageVisual with a property map
313     VisualFactory factory = VisualFactory::Get();
314     Visual::Base visual = factory.CreateVisual(
315       Property::Map()
316       .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
317       .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
318
319     DummyControl dummyControl = DummyControl::New( true );
320     Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
321     dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
322     dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
323
324     Property::Map attributes;
325     tet_infoline( "Test Play action" );
326     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
327
328     Stage::GetCurrent().Add( dummyControl );
329     application.SendNotification();
330     application.Render( 16 );
331
332     std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );    // wait for one animation loop (16fps, 5frames, need 80ms)
333
334     Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
335     Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
336     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
337
338     tet_infoline( "Test Pause action" );
339     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
340
341     application.SendNotification();
342     application.Render(16);
343
344     std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
345
346     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
347     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
348     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
349
350     tet_infoline( "Test Play action" );
351     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
352
353     application.SendNotification();
354     application.Render(16);
355
356     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
357     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
358     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
359
360     tet_infoline( "Test Stop action" );
361     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
362
363     application.SendNotification();
364     application.Render(16);
365
366     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
367     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
368     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
369
370     tet_infoline( "Test Stop action again" );
371     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
372
373     application.SendNotification();
374     application.Render(16);
375
376     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
377     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
378     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
379
380     tet_infoline( "Test Play action" );
381     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
382
383     application.SendNotification();
384     application.Render(16);
385
386     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
387     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
388     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
389
390     tet_infoline( "Off stage" );
391     dummyControl.Unparent();
392
393     application.SendNotification();
394     application.Render(16);
395
396     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
397     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
398     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
399
400     tet_infoline( "On stage again" );
401     Stage::GetCurrent().Add( dummyControl );
402
403     application.SendNotification();
404     application.Render(16);
405
406     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
407     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
408     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
409
410     tet_infoline( "Test Play action" );
411     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
412
413     application.SendNotification();
414     application.Render(16);
415
416     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
417     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
418     DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
419
420     // Change Size
421     Vector3 newSize( 100.0f, 100.0f, 0.0f );
422     dummyControl.SetSize( newSize );
423
424     application.SendNotification();
425     application.Render(16);
426
427     // Size should be changed
428     Vector3 naturalSize = dummyControl.GetNaturalSize();
429     DALI_TEST_CHECK( naturalSize == newSize );
430
431     dummyControl.Unparent();
432   }
433
434   END_TEST;
435 }
436
437 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
438 {
439   ToolkitTestApplication application;
440   tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
441
442   VisualFactory factory = VisualFactory::Get();
443   Property::Map properties;
444   Property::Map shader;
445   const std::string vertexShader = "Foobar";
446   const std::string fragmentShader = "Foobar sampler2D Foobar";
447   shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
448   shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
449
450   properties[Visual::Property::TYPE] = Visual::IMAGE;
451   properties[Visual::Property::SHADER] = shader;
452   properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
453
454   Visual::Base visual = factory.CreateVisual( properties );
455
456   // trigger creation through setting on stage
457   DummyControl dummy = DummyControl::New( true );
458   Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
459   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
460
461   dummy.SetSize( 200.f, 200.f );
462   dummy.SetParentOrigin( ParentOrigin::CENTER );
463   Stage::GetCurrent().Add( dummy );
464
465   application.SendNotification();
466   application.Render();
467
468   Renderer renderer = dummy.GetRendererAt( 0 );
469   Shader shader2 = renderer.GetShader();
470   Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
471   Property::Map* map = value.GetMap();
472   DALI_TEST_CHECK( map );
473
474   std::string resultFragmentShader, resultVertexShader;
475   Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
476   fragment->Get( resultFragmentShader );
477   DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
478
479   Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
480   vertex->Get( resultVertexShader );
481   DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
482
483   END_TEST;
484 }
485
486 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
487 {
488   ToolkitTestApplication application;
489   tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
490
491   VisualFactory factory = VisualFactory::Get();
492   Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
493   DALI_TEST_CHECK( visual );
494
495   DummyControl actor = DummyControl::New( true );
496   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
497   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
498
499   Vector2 controlSize( 20.f, 30.f );
500   Vector2 naturalSize;
501
502   Stage::GetCurrent().Add( actor );
503
504   application.SendNotification();
505   application.Render();
506
507   visual.GetNaturalSize( naturalSize );
508
509   DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION );    // 100x100 is the content default size.
510
511   actor.SetSize( controlSize );
512
513   application.SendNotification();
514   application.Render();
515
516   visual.GetNaturalSize( naturalSize );
517
518   DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
519
520   END_TEST;
521 }
522
523 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
524 {
525   ToolkitTestApplication application;
526   tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
527
528   Property::Map propertyMap;
529   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
530              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
531              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
532
533   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
534   DALI_TEST_CHECK( visual );
535
536   DummyControl actor = DummyControl::New( true );
537   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
538   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
539
540   Vector2 controlSize( 20.f, 30.f );
541   actor.SetSize( controlSize );
542
543   Stage::GetCurrent().Add( actor );
544
545   Property::Map attributes;
546   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
547
548   application.SendNotification();
549   application.Render();
550
551   // Trigger count is 1 - animation finished
552   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
553
554   // renderer is added to actor
555   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
556   Renderer renderer = actor.GetRendererAt( 0u );
557   DALI_TEST_CHECK( renderer );
558
559   END_TEST;
560 }
561
562 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
563 {
564   ToolkitTestApplication application;
565   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
566
567   int startFrame = 3, endFrame = 1;
568   Property::Array array;
569   array.PushBack( startFrame );
570   array.PushBack( endFrame );
571
572   Property::Map propertyMap;
573   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
574              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
575              .Add( DevelImageVisual::Property::PLAY_RANGE, array  );
576
577   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
578   DALI_TEST_CHECK( visual );
579
580   DummyControl actor = DummyControl::New( true );
581   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
582   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
583
584   Vector2 controlSize( 20.f, 30.f );
585   actor.SetSize( controlSize );
586
587   Stage::GetCurrent().Add( actor );
588
589   Property::Map attributes;
590   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
591
592   application.SendNotification();
593   application.Render();
594
595   // renderer is added to actor
596   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
597   Renderer renderer = actor.GetRendererAt( 0u );
598   DALI_TEST_CHECK( renderer );
599
600   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
601   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
602
603   int resultStartFrame, resultEndFrame;
604   Property::Array* result = value->GetArray();
605   result->GetElementAt( 0 ).Get( resultStartFrame );
606   result->GetElementAt( 1 ).Get( resultEndFrame );
607
608   DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
609   DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
610
611   // Set invalid play range
612   array.Clear();
613   array.PushBack( -1 );
614   array.PushBack( 100 );
615
616   attributes.Clear();
617   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
618   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
619
620   application.SendNotification();
621   application.Render();
622
623   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
624   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
625
626   result = value->GetArray();
627   result->GetElementAt( 0 ).Get( resultStartFrame );
628   result->GetElementAt( 1 ).Get( resultEndFrame );
629
630   DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );  // Should not be changed
631   DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
632
633   END_TEST;
634 }
635
636 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
637 {
638   ToolkitTestApplication application;
639   tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
640
641   Property::Map propertyMap;
642   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
643              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
644              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
645
646   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
647   DALI_TEST_CHECK( visual );
648
649   DummyControl actor = DummyControl::New( true );
650   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
651   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
652
653   DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
654
655   Vector2 controlSize( 20.f, 30.f );
656   actor.SetSize( controlSize );
657
658   Stage::GetCurrent().Add( actor );
659
660   Property::Map attributes;
661   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
662
663   application.SendNotification();
664   application.Render();
665
666   // Wait for animation finish
667   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
668
669   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
670   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
671   DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
672
673   DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
674
675   END_TEST;
676 }
677
678 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
679 {
680   ToolkitTestApplication application;
681   tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
682
683   Property::Map propertyMap;
684   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
685              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
686
687   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
688   DALI_TEST_CHECK( visual );
689
690   DummyControl actor = DummyControl::New( true );
691   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
692   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
693
694   Vector2 controlSize( 20.f, 30.f );
695   actor.SetSize( controlSize );
696
697   Stage::GetCurrent().Add( actor );
698
699   application.SendNotification();
700   application.Render();
701
702   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
703
704   application.SendNotification();
705   application.Render();
706
707   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
708   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
709   DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
710
711   Property::Array array;
712   array.PushBack( 0 );
713   array.PushBack( 2 );
714
715   Property::Map attributes;
716   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
717   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
718
719   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
720
721   application.SendNotification();
722   application.Render();
723
724   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
725   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
726   DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
727
728   // Change play range
729   attributes.Clear();
730   array.Clear();
731
732   array.PushBack( 0 );
733   array.PushBack( 4 );
734
735   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
736   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
737
738   attributes.Clear();
739   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
740
741   application.SendNotification();
742   application.Render();
743
744   // Stop and jump to 3
745   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
746
747   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
748
749   application.SendNotification();
750   application.Render();
751
752   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
753   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
754   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
755
756   // Jump to the same position
757   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
758
759   application.SendNotification();
760   application.Render();
761
762   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
763   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
764   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
765
766   END_TEST;
767 }
768
769 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
770 {
771   ToolkitTestApplication application;
772   tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
773
774   int startFrame = 1, endFrame = 3;
775   Property::Array playRange;
776   playRange.PushBack( startFrame );
777   playRange.PushBack( endFrame );
778
779   Property::Map propertyMap;
780   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
781              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
782              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
783              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
784
785   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
786   DALI_TEST_CHECK( visual );
787
788   DummyControl actor = DummyControl::New( true );
789   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
790   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
791
792   Vector2 controlSize( 20.f, 30.f );
793   actor.SetSize( controlSize );
794
795   Stage::GetCurrent().Add( actor );
796
797   application.SendNotification();
798   application.Render();
799
800   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
801   Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
802   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
803
804   value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
805   DALI_TEST_CHECK( value );
806
807   Property::Array* result = value->GetArray();
808   DALI_TEST_CHECK( result );
809
810   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
811   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
812
813   playRange.Clear();
814   playRange.PushBack( 0 );
815   playRange.PushBack( 2 );
816
817   Property::Map attributes;
818   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
819   attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
820
821   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
822
823   application.SendNotification();
824   application.Render();
825
826   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
827   value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
828   DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
829
830   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
831   result = value->GetArray();
832   DALI_TEST_CHECK( result );
833
834   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
835   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
836
837   attributes.Clear();
838
839   playRange.Clear();
840   playRange.PushBack( startFrame );
841   playRange.PushBack( endFrame );
842
843   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
844
845   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
846
847   application.SendNotification();
848   application.Render();
849
850   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
851   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
852
853   result = value->GetArray();
854   DALI_TEST_CHECK( result );
855
856   DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
857   DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
858
859   END_TEST;
860 }
861
862 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
863 {
864   ToolkitTestApplication application;
865   tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
866
867   Property::Map propertyMap;
868   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
869              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
870              .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
871              .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
872
873   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
874   DALI_TEST_CHECK( visual );
875
876   DummyControl actor = DummyControl::New( true );
877   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
878   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
879
880   Vector2 controlSize( 20.f, 30.f );
881   actor.SetSize( controlSize );
882
883   Stage::GetCurrent().Add( actor );
884
885   Property::Map attributes;
886   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
887
888   application.SendNotification();
889   application.Render();
890
891   // Trigger count is 1 - animation finished
892   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
893
894   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
895   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
896   DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION );  // Should be the first frame
897
898   // Change stop behavior
899   attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
900
901   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
902
903   attributes.Clear();
904
905   // Play again
906   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
907
908   application.SendNotification();
909   application.Render();
910
911   // Trigger count is 1 - animation finished
912   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
913
914   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
915
916   Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
917   int totalFrameNumber = value1->Get< int >();
918
919   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
920   DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION );  // Should be the last frame
921
922   // Change stop behavior
923   attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
924   attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
925
926   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
927
928   attributes.Clear();
929
930   // Play again
931   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
932
933   application.SendNotification();
934   application.Render();
935
936   // Pause
937   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
938
939   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
940   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
941   int currentFrameNumber = value->Get< int >();
942
943   // Stop
944   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
945
946   application.SendNotification();
947   application.Render( 16 );
948
949   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
950   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
951   DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION );  // Should be same with currentFrameNumber
952
953   END_TEST;
954 }
955
956 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
957 {
958   ToolkitTestApplication application;
959   tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
960
961   Property::Map propertyMap;
962   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
963              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
964              .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
965              .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
966              .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
967
968   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
969   DALI_TEST_CHECK( visual );
970
971   DummyControl actor = DummyControl::New( true );
972   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
973   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
974
975   Vector2 controlSize( 20.f, 30.f );
976   actor.SetSize( controlSize );
977
978   Stage::GetCurrent().Add( actor );
979
980   Property::Map attributes;
981   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
982
983   application.SendNotification();
984   application.Render();
985
986   // Trigger count is 1 - animation finished
987   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
988
989   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
990   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
991   DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION );  // Should be the first frame because of auto reverse
992
993   // Change stop behavior
994   attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
995
996   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
997
998   // Play again
999   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1000
1001   application.SendNotification();
1002   application.Render();
1003
1004   // Trigger count is 1 - animation finished
1005   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1006
1007   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1008   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1009   DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION );  // Should be the first frame
1010
1011   // Change looping mode
1012   attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1013
1014   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1015
1016   // Play again
1017   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1018
1019   application.SendNotification();
1020   application.Render();
1021
1022   // Trigger count is 1 - animation finished
1023   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1024
1025   Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1026   int totalFrameNumber = value1->Get< int >();
1027
1028   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1029   value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1030   DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION );  // Should be the last frame
1031
1032   END_TEST;
1033 }
1034
1035 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1036 {
1037   ToolkitTestApplication application;
1038   tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1039
1040   Property::Map propertyMap;
1041   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1042              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
1043
1044   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1045   DALI_TEST_CHECK( visual );
1046
1047   DummyControl actor = DummyControl::New( true );
1048   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1049   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1050
1051   Vector2 controlSize( 20.f, 30.f );
1052   Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1053   actor.SetSize( controlSize );
1054   actor.SetScale( controlScale );
1055
1056   Stage::GetCurrent().Add( actor );
1057
1058   application.SendNotification();
1059   application.Render();
1060
1061   application.SendNotification();
1062   application.Render();
1063
1064   Renderer renderer = actor.GetRendererAt( 0u );
1065   DALI_TEST_CHECK( renderer );
1066
1067   auto textureSet = renderer.GetTextures();
1068   auto texture = textureSet.GetTexture(0);
1069
1070   DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1071   DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1072
1073   // Change scale and size
1074   controlSize = Vector2( 50.f, 40.f );
1075   controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1076   actor.SetSize( controlSize );
1077   actor.SetScale( controlScale );
1078
1079   application.SendNotification();
1080   application.Render();
1081
1082   application.SendNotification();
1083   application.Render();
1084
1085   renderer = actor.GetRendererAt( 0u );
1086   DALI_TEST_CHECK( renderer );
1087
1088   textureSet = renderer.GetTextures();
1089   texture = textureSet.GetTexture(0);
1090
1091   DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1092   DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1093
1094   END_TEST;
1095 }