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