2 * Copyright (c) 2020 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.
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <toolkit-text-utils.h>
25 #include <toolkit-event-thread-callback.h>
26 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
27 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
28 #include <dali-toolkit/internal/visuals/color/color-visual.h>
29 #include <dali-toolkit/internal/visuals/npatch/npatch-visual.h>
30 #include <dummy-visual.h>
31 #include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
32 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
35 using namespace Toolkit;
40 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
44 int UtcDaliVisualAction(void)
46 ToolkitTestApplication application;
47 tet_infoline( "Register an ImageVisual and and perform an Action on Visual directly" );
48 Vector2 controlSize( 20.f, 30.f );
51 Property::Map settings;
52 Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
54 DummyControl dummyControl = DummyControl::New( true );
55 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
57 tet_infoline( "Register visual and stage control" );
59 Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( dummyVisualPtr.Get() );
60 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
61 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
62 application.GetScene().Add( dummyControl );
64 application.SendNotification();
67 tet_infoline( "Check action counter is 0 before DoAction" );
68 DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
70 tet_infoline( "Perform TEST_ACTION action on Visual. Should increase the action counter" );
72 Property::Map attributes;
73 Toolkit::Internal::Visual::Base& internalVisualBase = GetImplementation( visualBaseHandle );
74 internalVisualBase.DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
75 application.SendNotification();
76 DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 1, TEST_LOCATION );
81 int UtcDaliVisualActionNotImplemented(void)
83 ToolkitTestApplication application;
84 tet_infoline( "Register an ImageVisual and and perform an Action on a Visual which does not support any Actions" );
85 Vector2 controlSize( 20.f, 30.f );
88 Property::Map settings;
89 Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
91 DummyControl dummyControl = DummyControl::New( true );
92 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
94 tet_infoline( "Register visual and stage control" );
96 VisualFactory factory = VisualFactory::Get();
97 Property::Map propertyMap;
98 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
99 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
100 Visual::Base visual = factory.CreateVisual( propertyMap );
102 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
103 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
104 application.GetScene().Add( dummyControl );
106 application.SendNotification();
107 application.Render();
109 tet_infoline( "Check action counter is 0 before DoAction" );
110 DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
112 tet_infoline( "Perform TEST_ACTION action on Color Visual which does not support it.. Should not increment the action counter" );
113 Property::Map attributes;
114 GetImplementation( visual ).DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
115 application.SendNotification();
116 DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
121 int UtcDaliVisualSetProperties(void)
123 ToolkitTestApplication application;
124 tet_infoline( "Register a visual and SetProperties" );
126 Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
128 //Created ColorVisual
129 Property::Map propertyMap1;
130 propertyMap1.Insert(Visual::Property::TYPE, Visual::COLOR);
131 propertyMap1.Insert(ColorVisual::Property::MIX_COLOR, Color::RED);
132 Toolkit::Internal::ColorVisualPtr colorVisualPtr = Toolkit::Internal::ColorVisual::New( *factoryCache, propertyMap1 );
134 DummyControl dummyControl = DummyControl::New( true );
135 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
137 Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( colorVisualPtr.Get() );
138 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
139 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
140 application.GetScene().Add( dummyControl );
142 application.SendNotification();
143 application.Render();
145 Property::Map propertyMap;
146 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
148 colorVisualPtr->SetProperties( propertyMap );
149 application.SendNotification();
150 application.Render();
152 Property::Map resultMap;
153 visualBaseHandle.CreatePropertyMap( resultMap );
155 Property::Value* colorValue = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
156 DALI_TEST_CHECK( colorValue );
157 DALI_TEST_CHECK( colorValue->Get< Vector4 >() == Color::BLUE );
164 int UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap(void)
166 ToolkitTestApplication application;
167 tet_infoline( "UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap" );
169 Property::Map propertyMap;
170 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
171 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
173 // request AnimatedVectorImageVisual with a property map
174 VisualFactory factory = VisualFactory::Get();
175 Visual::Base visual = factory.CreateVisual( propertyMap );
176 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
178 Property::Map resultMap;
179 visualImpl.CreateInstancePropertyMap( resultMap );
181 // check the property values from the returned map from a visual
182 DALI_TEST_CHECK( resultMap.Empty() ); // Now the map is empty
187 int UtcDaliAnimatedVectorImageVisualSetProperties(void)
189 ToolkitTestApplication application;
190 tet_infoline( "UtcDaliAnimatedVectorImageVisualSetProperties" );
192 Property::Map propertyMap;
193 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
194 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
195 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
196 .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.2f, 0.8f ) );
198 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
199 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
200 DALI_TEST_CHECK( visual );
202 DummyControl actor = DummyControl::New( true );
203 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
204 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
205 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
206 application.GetScene().Add( actor );
208 application.SendNotification();
209 application.Render();
211 // renderer is added to actor
212 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
213 Renderer renderer = actor.GetRendererAt( 0u );
214 DALI_TEST_CHECK( renderer );
216 Property::Map propertyMap1;
217 propertyMap1.Add( DevelImageVisual::Property::LOOP_COUNT, 1 )
218 .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.4f, 0.6f ) );
220 visualImpl.SetProperties( propertyMap1 );
222 application.SendNotification();
223 application.Render();
225 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
226 renderer = actor.GetRendererAt( 0u );
227 DALI_TEST_CHECK( renderer );
230 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
235 int UtcDaliArcVisualCreateInstancePropertyMap(void)
237 ToolkitTestApplication application;
238 tet_infoline( "UtcDaliArcVisualCreateInstancePropertyMap" );
240 Property::Map propertyMap;
241 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ARC )
242 .Add( DevelArcVisual::Property::THICKNESS, 20.0f );
244 // request ArcVisual with a property map
245 VisualFactory factory = VisualFactory::Get();
246 Visual::Base visual = factory.CreateVisual( propertyMap );
247 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
249 Property::Map resultMap;
250 visualImpl.CreateInstancePropertyMap( resultMap );
252 // check the property values from the returned map from a visual
253 DALI_TEST_CHECK( resultMap.Empty() ); // Now the map is empty
257 int UtcDaliVisualUpdateBrokenImageRenderer(void)
259 ToolkitTestApplication application;
260 tet_infoline( "UpdateBrokenImageRenderer Test" );
262 Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
264 std::string defaultBrokenImageUrl = "not-9patch.png";
266 // Set default broken image
267 factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
269 //Created dummy renderer
270 Geometry geometry = factoryCache->GetGeometry(Toolkit::Internal::VisualFactoryCache::QUAD_GEOMETRY);
271 Shader shader = Shader::New("foo","bar");
272 Renderer renderer = Renderer::New(geometry, shader);
274 DALI_TEST_CHECK(renderer);
276 // renderer doesn't changed.
277 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, true);
278 Shader testShader1 = renderer.GetShader();
280 // Get default image renderer.
281 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
282 Shader testShader2 = renderer.GetShader();
284 // Get default image renderer but nine patch.
285 // Note : This API behavior can be changed. (DALi don't consider about default BrokenImageUrl is failed.
286 defaultBrokenImageUrl = "yes-9patch.9.png";
287 factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
288 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
289 Shader testShader3 = renderer.GetShader();
291 DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
292 DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));
293 DALI_TEST_CHECK(testShader2 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
294 DALI_TEST_CHECK(testShader3 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));