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 UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
120 ToolkitTestApplication application;
121 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
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 );
127 // request AnimatedVectorImageVisual with a property map
128 VisualFactory factory = VisualFactory::Get();
129 Visual::Base visual = factory.CreateVisual( propertyMap );
131 Property::Map resultMap;
132 visual.CreatePropertyMap( resultMap );
134 // check the property values from the returned map from a visual
135 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
136 DALI_TEST_CHECK( value );
137 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
139 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
140 DALI_TEST_CHECK( value );
141 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
143 // request AnimatedVectorImageVisual with an URL
144 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
147 visual2.CreatePropertyMap( resultMap );
149 // check the property values from the returned map from a visual
150 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
151 DALI_TEST_CHECK( value );
152 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
154 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
155 DALI_TEST_CHECK( value );
156 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
161 int UtcDaliAnimatedVectorImageVisualPlayback(void)
163 ToolkitTestApplication application;
165 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
168 // request AnimatedVectorImageVisual with a property map
169 VisualFactory factory = VisualFactory::Get();
170 Visual::Base visual = factory.CreateVisual(
172 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
173 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
175 DummyControl dummyControl = DummyControl::New( true );
176 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
177 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
178 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
180 Property::Map attributes;
181 tet_infoline( "Test Play action" );
182 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
184 Stage::GetCurrent().Add( dummyControl );
185 application.SendNotification();
186 application.Render( 16 );
188 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
192 tet_infoline( "Test Pause action" );
193 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
195 application.SendNotification();
196 application.Render(16);
200 tet_infoline( "Test Resume action" );
201 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::RESUME, attributes );
203 application.SendNotification();
204 application.Render(16);
208 tet_infoline( "Test Stop action" );
209 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
211 application.SendNotification();
212 application.Render(16);
216 tet_infoline( "Test Stop action again" );
217 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
219 application.SendNotification();
220 application.Render(16);
224 tet_infoline( "Test Play action" );
225 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
227 application.SendNotification();
228 application.Render(16);
232 dummyControl.SetSize( 100.0f, 100.0f );
234 application.SendNotification();
235 application.Render(16);
238 // Size should be changed
240 dummyControl.Unparent();
246 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
248 ToolkitTestApplication application;
249 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
251 VisualFactory factory = VisualFactory::Get();
252 Property::Map properties;
253 Property::Map shader;
254 const std::string vertexShader = "Foobar";
255 const std::string fragmentShader = "Foobar sampler2D Foobar";
256 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
257 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
259 properties[Visual::Property::TYPE] = Visual::IMAGE;
260 properties[Visual::Property::SHADER] = shader;
261 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
263 Visual::Base visual = factory.CreateVisual( properties );
265 // trigger creation through setting on stage
266 DummyControl dummy = DummyControl::New( true );
267 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
268 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
270 dummy.SetSize( 200.f, 200.f );
271 dummy.SetParentOrigin( ParentOrigin::CENTER );
272 Stage::GetCurrent().Add( dummy );
274 application.SendNotification();
275 application.Render();
277 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
279 Renderer renderer = dummy.GetRendererAt( 0 );
280 Shader shader2 = renderer.GetShader();
281 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
282 Property::Map* map = value.GetMap();
283 DALI_TEST_CHECK( map );
285 std::string resultFragmentShader, resultVertexShader;
286 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
287 fragment->Get( resultFragmentShader );
288 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
290 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
291 vertex->Get( resultVertexShader );
292 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
297 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
299 ToolkitTestApplication application;
300 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
302 VisualFactory factory = VisualFactory::Get();
303 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
304 DALI_TEST_CHECK( visual );
306 DummyControl actor = DummyControl::New( true );
307 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
308 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
310 Vector2 controlSize( 20.f, 30.f );
313 actor.SetSize( controlSize );
314 Stage::GetCurrent().Add( actor );
316 application.SendNotification();
317 application.Render();
319 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
321 visual.GetNaturalSize( naturalSize );
323 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );