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