2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <toolkit-timer.h>
21 #include <toolkit-event-thread-callback.h>
22 #include <dali-toolkit/dali-toolkit.h>
23 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
24 #include <dali-toolkit/devel-api/controls/control-devel.h>
25 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
26 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
27 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
28 #include "dummy-control.h"
31 using namespace Dali::Toolkit;
33 void dali_animated_vector_image_visual_startup(void)
35 test_return_value = TET_UNDEF;
38 void dali_animated_vector_image_visual_cleanup(void)
40 test_return_value = TET_PASS;
46 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
50 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
52 ToolkitTestApplication application;
53 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
55 VisualFactory factory = VisualFactory::Get();
56 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
57 DALI_TEST_CHECK( visual );
59 DummyControl actor = DummyControl::New( true );
60 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
61 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
62 actor.SetSize( 200.0f, 200.0f );
63 Stage::GetCurrent().Add( actor );
65 application.SendNotification();
68 // Wait for resource ready event callback
69 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
71 // renderer is added to actor
72 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
73 Renderer renderer = actor.GetRendererAt( 0u );
74 DALI_TEST_CHECK( renderer );
76 // Test SetOffStage().
78 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
83 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
85 ToolkitTestApplication application;
86 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
88 Property::Map propertyMap;
89 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
90 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
92 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
93 DALI_TEST_CHECK( visual );
95 DummyControl actor = DummyControl::New( true );
96 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
97 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
98 actor.SetSize( 200.0f, 200.0f );
99 Stage::GetCurrent().Add( actor );
101 application.SendNotification();
102 application.Render();
104 // Wait for resource ready event callback
105 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
107 // renderer is added to actor
108 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
109 Renderer renderer = actor.GetRendererAt( 0u );
110 DALI_TEST_CHECK( renderer );
113 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
118 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
120 ToolkitTestApplication application;
121 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
123 Property::Map propertyMap;
124 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
125 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
126 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
127 .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.2f, 0.8f ) );
129 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
130 DALI_TEST_CHECK( visual );
132 DummyControl actor = DummyControl::New( true );
133 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
134 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
135 actor.SetSize( 200.0f, 200.0f );
136 Stage::GetCurrent().Add( actor );
138 application.SendNotification();
139 application.Render();
141 // Wait for resource ready event callback
142 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
144 // renderer is added to actor
145 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
146 Renderer renderer = actor.GetRendererAt( 0u );
147 DALI_TEST_CHECK( renderer );
150 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
155 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
157 ToolkitTestApplication application;
158 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
160 Property::Map propertyMap;
161 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
162 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
163 .Add( "loopCount", 3 )
164 .Add( "playRange", Vector2( 0.2f, 0.8f ) );
166 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
167 DALI_TEST_CHECK( visual );
169 DummyControl actor = DummyControl::New( true );
170 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
171 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
172 actor.SetSize( 200.0f, 200.0f );
173 Stage::GetCurrent().Add( actor );
175 application.SendNotification();
176 application.Render();
178 // Wait for resource ready event callback
179 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
181 // renderer is added to actor
182 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
183 Renderer renderer = actor.GetRendererAt( 0u );
184 DALI_TEST_CHECK( renderer );
187 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
192 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
194 ToolkitTestApplication application;
195 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
197 Vector2 playRange( 0.2f, 0.8f );
199 Property::Map propertyMap;
200 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
201 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
202 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
203 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
205 // request AnimatedVectorImageVisual with a property map
206 VisualFactory factory = VisualFactory::Get();
207 Visual::Base visual = factory.CreateVisual( propertyMap );
209 Property::Map resultMap;
210 visual.CreatePropertyMap( resultMap );
212 // check the property values from the returned map from a visual
213 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
214 DALI_TEST_CHECK( value );
215 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
217 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
218 DALI_TEST_CHECK( value );
219 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
221 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
222 DALI_TEST_CHECK( value );
223 DALI_TEST_CHECK( value->Get< int >() == 3 );
225 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::VECTOR2 );
226 DALI_TEST_CHECK( value );
227 DALI_TEST_CHECK( value->Get< Vector2 >() == playRange );
229 // request AnimatedVectorImageVisual with an URL
230 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
233 visual2.CreatePropertyMap( resultMap );
235 // check the property values from the returned map from a visual
236 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
237 DALI_TEST_CHECK( value );
238 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
240 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
241 DALI_TEST_CHECK( value );
242 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
247 int UtcDaliAnimatedVectorImageVisualPlayback(void)
249 ToolkitTestApplication application;
251 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
254 // request AnimatedVectorImageVisual with a property map
255 VisualFactory factory = VisualFactory::Get();
256 Visual::Base visual = factory.CreateVisual(
258 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
259 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
261 DummyControl dummyControl = DummyControl::New( true );
262 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
263 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
264 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
266 Property::Map attributes;
267 tet_infoline( "Test Play action" );
268 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
270 Stage::GetCurrent().Add( dummyControl );
271 application.SendNotification();
272 application.Render( 16 );
274 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
278 tet_infoline( "Test Pause action" );
279 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
281 application.SendNotification();
282 application.Render(16);
286 tet_infoline( "Test Resume action" );
287 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::RESUME, attributes );
289 application.SendNotification();
290 application.Render(16);
294 tet_infoline( "Test Stop action" );
295 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
297 application.SendNotification();
298 application.Render(16);
302 tet_infoline( "Test Stop action again" );
303 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
305 application.SendNotification();
306 application.Render(16);
310 tet_infoline( "Test Play action" );
311 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
313 application.SendNotification();
314 application.Render(16);
318 dummyControl.SetSize( 100.0f, 100.0f );
320 application.SendNotification();
321 application.Render(16);
324 // Size should be changed
326 dummyControl.Unparent();
332 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
334 ToolkitTestApplication application;
335 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
337 VisualFactory factory = VisualFactory::Get();
338 Property::Map properties;
339 Property::Map shader;
340 const std::string vertexShader = "Foobar";
341 const std::string fragmentShader = "Foobar sampler2D Foobar";
342 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
343 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
345 properties[Visual::Property::TYPE] = Visual::IMAGE;
346 properties[Visual::Property::SHADER] = shader;
347 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
349 Visual::Base visual = factory.CreateVisual( properties );
351 // trigger creation through setting on stage
352 DummyControl dummy = DummyControl::New( true );
353 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
354 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
356 dummy.SetSize( 200.f, 200.f );
357 dummy.SetParentOrigin( ParentOrigin::CENTER );
358 Stage::GetCurrent().Add( dummy );
360 application.SendNotification();
361 application.Render();
363 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
365 Renderer renderer = dummy.GetRendererAt( 0 );
366 Shader shader2 = renderer.GetShader();
367 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
368 Property::Map* map = value.GetMap();
369 DALI_TEST_CHECK( map );
371 std::string resultFragmentShader, resultVertexShader;
372 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
373 fragment->Get( resultFragmentShader );
374 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
376 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
377 vertex->Get( resultVertexShader );
378 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
383 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
385 ToolkitTestApplication application;
386 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
388 VisualFactory factory = VisualFactory::Get();
389 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
390 DALI_TEST_CHECK( visual );
392 DummyControl actor = DummyControl::New( true );
393 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
394 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
396 Vector2 controlSize( 20.f, 30.f );
399 actor.SetSize( controlSize );
400 Stage::GetCurrent().Add( actor );
402 application.SendNotification();
403 application.Render();
405 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
407 visual.GetNaturalSize( naturalSize );
409 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
414 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
416 ToolkitTestApplication application;
417 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
419 Property::Map propertyMap;
420 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
421 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
422 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
424 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
425 DALI_TEST_CHECK( visual );
427 DummyControl actor = DummyControl::New( true );
428 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
429 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
431 Vector2 controlSize( 20.f, 30.f );
432 actor.SetSize( controlSize );
434 Stage::GetCurrent().Add( actor );
436 Property::Map attributes;
437 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
439 application.SendNotification();
440 application.Render();
442 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
444 // renderer is added to actor
445 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
446 Renderer renderer = actor.GetRendererAt( 0u );
447 DALI_TEST_CHECK( renderer );
452 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
454 ToolkitTestApplication application;
455 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
457 Vector2 playRange( 0.8f, 0.2f );
459 Property::Map propertyMap;
460 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
461 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
462 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
464 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
465 DALI_TEST_CHECK( visual );
467 DummyControl actor = DummyControl::New( true );
468 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
469 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
471 Vector2 controlSize( 20.f, 30.f );
472 actor.SetSize( controlSize );
474 Stage::GetCurrent().Add( actor );
476 Property::Map attributes;
477 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
479 application.SendNotification();
480 application.Render();
482 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
484 // renderer is added to actor
485 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
486 Renderer renderer = actor.GetRendererAt( 0u );
487 DALI_TEST_CHECK( renderer );