DALi Version 1.4.25
[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   // Wait for resource ready event callback
82   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
83
84   // renderer is added to actor
85   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
86   Renderer renderer = actor.GetRendererAt( 0u );
87   DALI_TEST_CHECK( renderer );
88
89   // Test SetOffStage().
90   actor.Unparent();
91   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
92
93   END_TEST;
94 }
95
96 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
97 {
98   ToolkitTestApplication application;
99   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
100
101   Property::Map propertyMap;
102   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
103              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
104
105   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
106   DALI_TEST_CHECK( visual );
107
108   DummyControl actor = DummyControl::New( true );
109   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
110   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
111   actor.SetSize( 200.0f, 200.0f );
112   Stage::GetCurrent().Add( actor );
113
114   application.SendNotification();
115   application.Render();
116
117   // Wait for resource ready event callback
118   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
119
120   // renderer is added to actor
121   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
122   Renderer renderer = actor.GetRendererAt( 0u );
123   DALI_TEST_CHECK( renderer );
124
125   actor.Unparent( );
126   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
127
128   END_TEST;
129 }
130
131 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
132 {
133   ToolkitTestApplication application;
134   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
135
136   Property::Map propertyMap;
137   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
138              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
139              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
140              .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.2f, 0.8f )  );
141
142   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
143   DALI_TEST_CHECK( visual );
144
145   DummyControl actor = DummyControl::New( true );
146   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
147   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
148   actor.SetSize( 200.0f, 200.0f );
149   Stage::GetCurrent().Add( actor );
150
151   application.SendNotification();
152   application.Render();
153
154   // Wait for resource ready event callback
155   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
156
157   // renderer is added to actor
158   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
159   Renderer renderer = actor.GetRendererAt( 0u );
160   DALI_TEST_CHECK( renderer );
161
162   actor.Unparent( );
163   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
164
165   END_TEST;
166 }
167
168 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
169 {
170   ToolkitTestApplication application;
171   tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
172
173   Property::Map propertyMap;
174   propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
175              .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME  )
176              .Add( "loopCount", 3  )
177              .Add( "playRange", Vector2( 0.2f, 0.8f )  );
178
179   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
180   DALI_TEST_CHECK( visual );
181
182   DummyControl actor = DummyControl::New( true );
183   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
184   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
185   actor.SetSize( 200.0f, 200.0f );
186   Stage::GetCurrent().Add( actor );
187
188   application.SendNotification();
189   application.Render();
190
191   // Wait for resource ready event callback
192   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
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   actor.Unparent( );
200   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
201
202   END_TEST;
203 }
204
205 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
206 {
207   ToolkitTestApplication application;
208   tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
209
210   Vector2 playRange( 0.2f, 0.8f );
211
212   Property::Map propertyMap;
213   propertyMap.Add( Toolkit::Visual::Property::TYPE,  DevelVisual::ANIMATED_VECTOR_IMAGE )
214              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
215              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
216              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
217
218   // request AnimatedVectorImageVisual with a property map
219   VisualFactory factory = VisualFactory::Get();
220   Visual::Base visual = factory.CreateVisual( propertyMap );
221
222   Property::Map resultMap;
223   visual.CreatePropertyMap( resultMap );
224
225   // check the property values from the returned map from a visual
226   Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
227   DALI_TEST_CHECK( value );
228   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
229
230   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
231   DALI_TEST_CHECK( value );
232   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
233
234   value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
235   DALI_TEST_CHECK( value );
236   DALI_TEST_CHECK( value->Get< int >() == 3 );
237
238   value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::VECTOR2 );
239   DALI_TEST_CHECK( value );
240   DALI_TEST_CHECK( value->Get< Vector2 >() == playRange );
241
242   // request AnimatedVectorImageVisual with an URL
243   Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
244
245   resultMap.Clear();
246   visual2.CreatePropertyMap( resultMap );
247
248   // check the property values from the returned map from a visual
249   value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
250   DALI_TEST_CHECK( value );
251   DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
252
253   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
254   DALI_TEST_CHECK( value );
255   DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
256
257   END_TEST;
258 }
259
260 int UtcDaliAnimatedVectorImageVisualPlayback(void)
261 {
262   ToolkitTestApplication application;
263
264   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
265
266   {
267     // request AnimatedVectorImageVisual with a property map
268     VisualFactory factory = VisualFactory::Get();
269     Visual::Base visual = factory.CreateVisual(
270       Property::Map()
271       .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
272       .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
273
274     DummyControl dummyControl = DummyControl::New( true );
275     Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
276     dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
277     dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
278
279     Property::Map attributes;
280     tet_infoline( "Test Play action" );
281     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
282
283     Stage::GetCurrent().Add( dummyControl );
284     application.SendNotification();
285     application.Render( 16 );
286
287     std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );    // wait for one animation loop (16fps, 5frames, need 80ms)
288
289     DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
290
291     Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
292     Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
293     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
294
295     tet_infoline( "Test Pause action" );
296     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
297
298     application.SendNotification();
299     application.Render(16);
300
301     std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) );    // wait for next rasterize thread run
302
303     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
304     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
305     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PAUSED ) );
306
307     tet_infoline( "Test Play action" );
308     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
309
310     application.SendNotification();
311     application.Render(16);
312
313     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
314     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
315     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
316
317     tet_infoline( "Test Stop action" );
318     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
319
320     application.SendNotification();
321     application.Render(16);
322
323     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
324     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
325     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
326
327     tet_infoline( "Test Stop action again" );
328     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
329
330     application.SendNotification();
331     application.Render(16);
332
333     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
334     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
335     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
336
337     tet_infoline( "Test Play action" );
338     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
339
340     application.SendNotification();
341     application.Render(16);
342
343     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
344     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
345     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
346
347     tet_infoline( "Off stage" );
348     dummyControl.Unparent();
349
350     application.SendNotification();
351     application.Render(16);
352
353     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
354     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
355     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PAUSED ) );
356
357     tet_infoline( "On stage again" );
358     Stage::GetCurrent().Add( dummyControl );
359
360     application.SendNotification();
361     application.Render(16);
362
363     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
364     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
365     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PAUSED ) );
366
367     tet_infoline( "Test Play action" );
368     DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
369
370     application.SendNotification();
371     application.Render(16);
372
373     map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
374     value = map.Find( DevelImageVisual::Property::PLAY_STATE );
375     DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::PLAYING ) );
376
377     // Change Size
378     Vector3 newSize( 100.0f, 100.0f, 0.0f );
379     dummyControl.SetSize( newSize );
380
381     application.SendNotification();
382     application.Render(16);
383
384     // Size should be changed
385     Vector3 naturalSize = dummyControl.GetNaturalSize();
386     DALI_TEST_CHECK( naturalSize == newSize );
387
388     dummyControl.Unparent();
389   }
390
391   END_TEST;
392 }
393
394 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
395 {
396   ToolkitTestApplication application;
397   tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
398
399   VisualFactory factory = VisualFactory::Get();
400   Property::Map properties;
401   Property::Map shader;
402   const std::string vertexShader = "Foobar";
403   const std::string fragmentShader = "Foobar sampler2D Foobar";
404   shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
405   shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
406
407   properties[Visual::Property::TYPE] = Visual::IMAGE;
408   properties[Visual::Property::SHADER] = shader;
409   properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
410
411   Visual::Base visual = factory.CreateVisual( properties );
412
413   // trigger creation through setting on stage
414   DummyControl dummy = DummyControl::New( true );
415   Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
416   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
417
418   dummy.SetSize( 200.f, 200.f );
419   dummy.SetParentOrigin( ParentOrigin::CENTER );
420   Stage::GetCurrent().Add( dummy );
421
422   application.SendNotification();
423   application.Render();
424
425   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
426
427   Renderer renderer = dummy.GetRendererAt( 0 );
428   Shader shader2 = renderer.GetShader();
429   Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
430   Property::Map* map = value.GetMap();
431   DALI_TEST_CHECK( map );
432
433   std::string resultFragmentShader, resultVertexShader;
434   Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
435   fragment->Get( resultFragmentShader );
436   DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
437
438   Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
439   vertex->Get( resultVertexShader );
440   DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
441
442   END_TEST;
443 }
444
445 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
446 {
447   ToolkitTestApplication application;
448   tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
449
450   VisualFactory factory = VisualFactory::Get();
451   Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
452   DALI_TEST_CHECK( visual );
453
454   DummyControl actor = DummyControl::New( true );
455   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
456   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
457
458   Vector2 controlSize( 20.f, 30.f );
459   Vector2 naturalSize;
460
461   Stage::GetCurrent().Add( actor );
462
463   application.SendNotification();
464   application.Render();
465
466   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
467
468   visual.GetNaturalSize( naturalSize );
469
470   DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION );    // 100x100 is the content default size.
471
472   actor.SetSize( controlSize );
473
474   application.SendNotification();
475   application.Render();
476
477   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
478
479   visual.GetNaturalSize( naturalSize );
480
481   DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
482
483   END_TEST;
484 }
485
486 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
487 {
488   ToolkitTestApplication application;
489   tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
490
491   Property::Map propertyMap;
492   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
493              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
494              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
495
496   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
497   DALI_TEST_CHECK( visual );
498
499   DummyControl actor = DummyControl::New( true );
500   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
501   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
502
503   Vector2 controlSize( 20.f, 30.f );
504   actor.SetSize( controlSize );
505
506   Stage::GetCurrent().Add( actor );
507
508   Property::Map attributes;
509   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
510
511   application.SendNotification();
512   application.Render();
513
514   // Trigger count is 2 - resource ready and animation finished
515   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
516
517   // renderer is added to actor
518   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
519   Renderer renderer = actor.GetRendererAt( 0u );
520   DALI_TEST_CHECK( renderer );
521
522   END_TEST;
523 }
524
525 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
526 {
527   ToolkitTestApplication application;
528   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
529
530   Vector2 playRange( 0.8f, 0.2f );
531
532   Property::Map propertyMap;
533   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
534              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
535              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
536
537   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
538   DALI_TEST_CHECK( visual );
539
540   DummyControl actor = DummyControl::New( true );
541   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
542   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
543
544   Vector2 controlSize( 20.f, 30.f );
545   actor.SetSize( controlSize );
546
547   Stage::GetCurrent().Add( actor );
548
549   Property::Map attributes;
550   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
551
552   application.SendNotification();
553   application.Render();
554
555   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
556
557   // renderer is added to actor
558   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
559   Renderer renderer = actor.GetRendererAt( 0u );
560   DALI_TEST_CHECK( renderer );
561
562   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
563   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
564   DALI_TEST_EQUALS( value->Get< Vector2 >(), playRange, TEST_LOCATION );
565
566   END_TEST;
567 }
568
569 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
570 {
571   ToolkitTestApplication application;
572   tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
573
574   Property::Map propertyMap;
575   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
576              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
577              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
578
579   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
580   DALI_TEST_CHECK( visual );
581
582   DummyControl actor = DummyControl::New( true );
583   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
584   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
585
586   DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
587
588   Vector2 controlSize( 20.f, 30.f );
589   actor.SetSize( controlSize );
590
591   Stage::GetCurrent().Add( actor );
592
593   Property::Map attributes;
594   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
595
596   application.SendNotification();
597   application.Render();
598
599   // Wait for animation finish
600   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
601
602   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
603   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
604   DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
605
606   DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
607
608   END_TEST;
609 }
610
611 int UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress(void)
612 {
613   ToolkitTestApplication application;
614   tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
615
616   Property::Map propertyMap;
617   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
618              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
619
620   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
621   DALI_TEST_CHECK( visual );
622
623   DummyControl actor = DummyControl::New( true );
624   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
625   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
626
627   Vector2 controlSize( 20.f, 30.f );
628   actor.SetSize( controlSize );
629
630   Stage::GetCurrent().Add( actor );
631
632   application.SendNotification();
633   application.Render();
634
635   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
636
637   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 0.6f );
638
639   application.SendNotification();
640   application.Render();
641
642   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
643   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_PROGRESS );
644   DALI_TEST_EQUALS( value->Get< float >(), 0.6f, TEST_LOCATION );
645
646   Vector2 playRange( 0.0f, 0.4f );
647
648   Property::Map attributes;
649   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
650   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
651
652   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 0.8f );
653
654   application.SendNotification();
655   application.Render();
656
657   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
658   value = map.Find( DevelImageVisual::Property::CURRENT_PROGRESS );
659   DALI_TEST_EQUALS( value->Get< float >(), 0.4f, TEST_LOCATION );
660
661   // Change play range
662   attributes.Clear();
663   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.0f, 1.0f ) );
664   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
665
666   attributes.Clear();
667   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
668
669   application.SendNotification();
670   application.Render();
671
672   // Stop and jump to 0.2
673   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
674
675   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 0.2f );
676
677   application.SendNotification();
678   application.Render();
679
680   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
681   value = map.Find( DevelImageVisual::Property::CURRENT_PROGRESS );
682   DALI_TEST_EQUALS( value->Get< float >(), 0.2f, TEST_LOCATION );
683
684   END_TEST;
685 }
686
687 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
688 {
689   ToolkitTestApplication application;
690   tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
691
692   Vector2 playRange( 0.2f, 0.5f );
693
694   Property::Map propertyMap;
695   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
696              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
697              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
698              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
699
700   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
701   DALI_TEST_CHECK( visual );
702
703   DummyControl actor = DummyControl::New( true );
704   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
705   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
706
707   Vector2 controlSize( 20.f, 30.f );
708   actor.SetSize( controlSize );
709
710   Stage::GetCurrent().Add( actor );
711
712   application.SendNotification();
713   application.Render();
714
715   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
716
717   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
718   Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
719   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
720
721   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
722   DALI_TEST_EQUALS( value->Get< Vector2 >(), playRange, TEST_LOCATION );
723
724   Vector2 newPlayRange( 0.6f, 1.0f );
725
726   Property::Map attributes;
727   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, newPlayRange );
728   attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
729
730   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
731
732   application.SendNotification();
733   application.Render();
734
735   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
736   value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
737   DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
738
739   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
740   DALI_TEST_EQUALS( value->Get< Vector2 >(), newPlayRange, TEST_LOCATION );
741
742   attributes.Clear();
743   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
744
745   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
746
747   application.SendNotification();
748   application.Render();
749
750   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
751   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
752   DALI_TEST_EQUALS( value->Get< Vector2 >(), playRange, TEST_LOCATION );
753
754   END_TEST;
755 }