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