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