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