d2e63326ae559e233975c5f70f3636daa6835a72
[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   actor.SetSize( controlSize );
462   Stage::GetCurrent().Add( actor );
463
464   application.SendNotification();
465   application.Render();
466
467   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
468
469   visual.GetNaturalSize( naturalSize );
470
471   DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
472
473   END_TEST;
474 }
475
476 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
477 {
478   ToolkitTestApplication application;
479   tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
480
481   Property::Map propertyMap;
482   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
483              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
484              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
485
486   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
487   DALI_TEST_CHECK( visual );
488
489   DummyControl actor = DummyControl::New( true );
490   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
491   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
492
493   Vector2 controlSize( 20.f, 30.f );
494   actor.SetSize( controlSize );
495
496   Stage::GetCurrent().Add( actor );
497
498   Property::Map attributes;
499   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
500
501   application.SendNotification();
502   application.Render();
503
504   // Trigger count is 2 - resource ready and animation finished
505   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
506
507   // renderer is added to actor
508   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
509   Renderer renderer = actor.GetRendererAt( 0u );
510   DALI_TEST_CHECK( renderer );
511
512   END_TEST;
513 }
514
515 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
516 {
517   ToolkitTestApplication application;
518   tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
519
520   Vector2 playRange( 0.8f, 0.2f );
521
522   Property::Map propertyMap;
523   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
524              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
525              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
526
527   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
528   DALI_TEST_CHECK( visual );
529
530   DummyControl actor = DummyControl::New( true );
531   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
532   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
533
534   Vector2 controlSize( 20.f, 30.f );
535   actor.SetSize( controlSize );
536
537   Stage::GetCurrent().Add( actor );
538
539   Property::Map attributes;
540   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
541
542   application.SendNotification();
543   application.Render();
544
545   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
546
547   // renderer is added to actor
548   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
549   Renderer renderer = actor.GetRendererAt( 0u );
550   DALI_TEST_CHECK( renderer );
551
552   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
553   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
554   DALI_TEST_EQUALS( value->Get< Vector2 >(), playRange, TEST_LOCATION );
555
556   END_TEST;
557 }
558
559 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
560 {
561   ToolkitTestApplication application;
562   tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
563
564   Property::Map propertyMap;
565   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
566              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
567              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  );
568
569   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
570   DALI_TEST_CHECK( visual );
571
572   DummyControl actor = DummyControl::New( true );
573   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
574   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
575
576   DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
577
578   Vector2 controlSize( 20.f, 30.f );
579   actor.SetSize( controlSize );
580
581   Stage::GetCurrent().Add( actor );
582
583   Property::Map attributes;
584   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
585
586   application.SendNotification();
587   application.Render();
588
589   // Wait for animation finish
590   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
591
592   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
593   Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
594   DALI_TEST_CHECK( value->Get< int >() == static_cast< int >( DevelImageVisual::PlayState::STOPPED ) );
595
596   DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
597
598   END_TEST;
599 }
600
601 int UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress(void)
602 {
603   ToolkitTestApplication application;
604   tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
605
606   Property::Map propertyMap;
607   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
608              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
609
610   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
611   DALI_TEST_CHECK( visual );
612
613   DummyControl actor = DummyControl::New( true );
614   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
615   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
616
617   Vector2 controlSize( 20.f, 30.f );
618   actor.SetSize( controlSize );
619
620   Stage::GetCurrent().Add( actor );
621
622   application.SendNotification();
623   application.Render();
624
625   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
626
627   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 0.6f );
628
629   application.SendNotification();
630   application.Render();
631
632   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
633   Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_PROGRESS );
634   DALI_TEST_EQUALS( value->Get< float >(), 0.6f, TEST_LOCATION );
635
636   Vector2 playRange( 0.0f, 0.4f );
637
638   Property::Map attributes;
639   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
640   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
641
642   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 0.8f );
643
644   application.SendNotification();
645   application.Render();
646
647   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
648   value = map.Find( DevelImageVisual::Property::CURRENT_PROGRESS );
649   DALI_TEST_EQUALS( value->Get< float >(), 0.4f, TEST_LOCATION );
650
651   END_TEST;
652 }
653
654 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
655 {
656   ToolkitTestApplication application;
657   tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
658
659   Vector2 playRange( 0.2f, 0.5f );
660
661   Property::Map propertyMap;
662   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
663              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
664              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
665              .Add( DevelImageVisual::Property::PLAY_RANGE, playRange  );
666
667   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
668   DALI_TEST_CHECK( visual );
669
670   DummyControl actor = DummyControl::New( true );
671   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
672   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
673
674   Vector2 controlSize( 20.f, 30.f );
675   actor.SetSize( controlSize );
676
677   Stage::GetCurrent().Add( actor );
678
679   application.SendNotification();
680   application.Render();
681
682   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
683
684   Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
685   Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
686   DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
687
688   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
689   DALI_TEST_EQUALS( value->Get< Vector2 >(), playRange, TEST_LOCATION );
690
691   Vector2 newPlayRange( 0.6f, 1.0f );
692
693   Property::Map attributes;
694   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, newPlayRange );
695   attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
696
697   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
698
699   application.SendNotification();
700   application.Render();
701
702   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
703   value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
704   DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
705
706   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
707   DALI_TEST_EQUALS( value->Get< Vector2 >(), newPlayRange, TEST_LOCATION );
708
709   attributes.Clear();
710   attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
711
712   DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
713
714   application.SendNotification();
715   application.Render();
716
717   map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
718   value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
719   DALI_TEST_EQUALS( value->Get< Vector2 >(), playRange, TEST_LOCATION );
720
721   END_TEST;
722 }