2 * Copyright (c) 2022 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-event-thread-callback.h>
25 #include <toolkit-text-utils.h>
27 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
28 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
29 #include <dali-toolkit/internal/visuals/color/color-visual.h>
30 #include <dali-toolkit/internal/visuals/npatch/npatch-visual.h>
31 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
33 #include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
34 #include <dummy-visual.h>
37 using namespace Toolkit;
41 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
42 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
46 int UtcDaliVisualAction(void)
48 ToolkitTestApplication application;
49 tet_infoline("Register an ImageVisual and and perform an Action on Visual directly");
50 Vector2 controlSize(20.f, 30.f);
53 Property::Map settings;
54 Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New(settings);
56 DummyControl dummyControl = DummyControl::New(true);
57 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
59 tet_infoline("Register visual and stage control");
61 Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base(dummyVisualPtr.Get());
62 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visualBaseHandle);
63 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
64 application.GetScene().Add(dummyControl);
66 application.SendNotification();
69 tet_infoline("Check action counter is 0 before DoAction");
70 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
72 tet_infoline("Perform TEST_ACTION action on Visual. Should increase the action counter");
74 Property::Map attributes;
75 Toolkit::Internal::Visual::Base& internalVisualBase = GetImplementation(visualBaseHandle);
76 internalVisualBase.DoAction(Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes);
77 application.SendNotification();
78 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 1, TEST_LOCATION);
83 int UtcDaliVisualActionNotImplemented(void)
85 ToolkitTestApplication application;
86 tet_infoline("Register an ImageVisual and and perform an Action on a Visual which does not support any Actions");
87 Vector2 controlSize(20.f, 30.f);
90 Property::Map settings;
91 Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New(settings);
93 DummyControl dummyControl = DummyControl::New(true);
94 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
96 tet_infoline("Register visual and stage control");
98 VisualFactory factory = VisualFactory::Get();
99 Property::Map propertyMap;
100 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
101 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
102 Visual::Base visual = factory.CreateVisual(propertyMap);
104 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
105 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
106 application.GetScene().Add(dummyControl);
108 application.SendNotification();
109 application.Render();
111 tet_infoline("Check action counter is 0 before DoAction");
112 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
114 tet_infoline("Perform TEST_ACTION action on Color Visual which does not support it.. Should not increment the action counter");
115 Property::Map attributes;
116 GetImplementation(visual).DoAction(Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes);
117 application.SendNotification();
118 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
123 int UtcDaliVisualSetProperties(void)
125 ToolkitTestApplication application;
126 tet_infoline("Register a visual and SetProperties");
128 Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
130 //Created ColorVisual
131 Property::Map propertyMap1;
132 propertyMap1.Insert(Visual::Property::TYPE, Visual::COLOR);
133 propertyMap1.Insert(ColorVisual::Property::MIX_COLOR, Color::RED);
134 Toolkit::Internal::ColorVisualPtr colorVisualPtr = Toolkit::Internal::ColorVisual::New(*factoryCache, propertyMap1);
136 DummyControl dummyControl = DummyControl::New(true);
137 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
139 Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base(colorVisualPtr.Get());
140 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visualBaseHandle);
141 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
142 application.GetScene().Add(dummyControl);
144 application.SendNotification();
145 application.Render();
147 Property::Map propertyMap;
148 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
150 colorVisualPtr->SetProperties(propertyMap);
151 application.SendNotification();
152 application.Render();
154 Property::Map resultMap;
155 visualBaseHandle.CreatePropertyMap(resultMap);
157 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
158 DALI_TEST_CHECK(colorValue);
159 DALI_TEST_CHECK(colorValue->Get<Vector4>() == Color::BLUE);
166 int UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap(void)
168 ToolkitTestApplication application;
169 tet_infoline("UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap");
171 Property::Map propertyMap;
172 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
173 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
175 // request AnimatedVectorImageVisual with a property map
176 VisualFactory factory = VisualFactory::Get();
177 Visual::Base visual = factory.CreateVisual(propertyMap);
178 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
180 Property::Map resultMap;
181 visualImpl.CreateInstancePropertyMap(resultMap);
183 // check the property values from the returned map from a visual
184 DALI_TEST_CHECK(resultMap.Empty()); // Now the map is empty
189 int UtcDaliAnimatedImageVisualCreateInstancePropertyMap(void)
191 ToolkitTestApplication application;
192 tet_infoline("UtcDaliAnimatedImageVisualCreateInstancePropertyMap");
194 Property::Map propertyMap;
195 propertyMap.Add(Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE)
196 .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME)
197 .Add(ImageVisual::Property::DESIRED_WIDTH, 10)
198 .Add(ImageVisual::Property::DESIRED_HEIGHT, 12);
200 // request AnimatedVectorImageVisual with a property map
201 VisualFactory factory = VisualFactory::Get();
202 Visual::Base visual = factory.CreateVisual(propertyMap);
203 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
205 Property::Map resultMap;
206 visualImpl.CreateInstancePropertyMap(resultMap);
208 // check the property values from the returned map from a visual
209 DALI_TEST_EQUALS(resultMap.Count(), 3u, TEST_LOCATION);
211 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
212 DALI_TEST_CHECK(value);
213 DALI_TEST_CHECK(value->Get<int>() == Visual::ANIMATED_IMAGE);
215 value = resultMap.Find(Toolkit::ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER);
216 DALI_TEST_CHECK(value);
217 DALI_TEST_CHECK(value->Get<int>() == 10);
219 value = resultMap.Find(Toolkit::ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER);
220 DALI_TEST_CHECK(value);
221 DALI_TEST_CHECK(value->Get<int>() == 12);
226 int UtcDaliAnimatedVectorImageVisualSetProperties(void)
228 ToolkitTestApplication application;
229 tet_infoline("UtcDaliAnimatedVectorImageVisualSetProperties");
231 Property::Map propertyMap;
232 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
233 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
234 .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
235 .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.2f, 0.8f))
236 .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false);
238 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
239 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
240 DALI_TEST_CHECK(visual);
242 DummyControl actor = DummyControl::New(true);
243 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
244 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
245 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
246 application.GetScene().Add(actor);
248 application.SendNotification();
249 application.Render();
251 // Trigger count is 2 - load, resource ready
252 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
254 // renderer is added to actor
255 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
256 Renderer renderer = actor.GetRendererAt(0u);
257 DALI_TEST_CHECK(renderer);
259 Property::Map propertyMap1;
260 propertyMap1.Add(DevelImageVisual::Property::LOOP_COUNT, 1)
261 .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.4f, 0.6f));
263 visualImpl.SetProperties(propertyMap1);
265 application.SendNotification();
266 application.Render();
268 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
269 renderer = actor.GetRendererAt(0u);
270 DALI_TEST_CHECK(renderer);
273 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
278 int UtcDaliArcVisualCreateInstancePropertyMap(void)
280 ToolkitTestApplication application;
281 tet_infoline("UtcDaliArcVisualCreateInstancePropertyMap");
283 Property::Map propertyMap;
284 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ARC)
285 .Add(DevelArcVisual::Property::THICKNESS, 20.0f);
287 // request ArcVisual with a property map
288 VisualFactory factory = VisualFactory::Get();
289 Visual::Base visual = factory.CreateVisual(propertyMap);
290 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
292 Property::Map resultMap;
293 visualImpl.CreateInstancePropertyMap(resultMap);
295 // check the property values from the returned map from a visual
296 DALI_TEST_CHECK(resultMap.Empty()); // Now the map is empty
300 int UtcDaliVisualUpdateBrokenImageRenderer(void)
302 ToolkitTestApplication application;
303 tet_infoline("UpdateBrokenImageRenderer Test");
305 Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
307 std::string defaultBrokenImageUrl = "not-9patch.png";
309 // Set default broken image
310 factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
312 //Created dummy renderer
313 Geometry geometry = factoryCache->GetGeometry(Toolkit::Internal::VisualFactoryCache::QUAD_GEOMETRY);
314 Shader shader = Shader::New("foo", "bar");
315 Renderer renderer = Renderer::New(geometry, shader);
317 DALI_TEST_CHECK(renderer);
319 // renderer doesn't changed.
320 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, true);
321 Shader testShader1 = renderer.GetShader();
323 // Get default image renderer.
324 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
325 Shader testShader2 = renderer.GetShader();
327 // Get default image renderer but nine patch.
328 // Note : This API behavior can be changed. (DALi don't consider about default BrokenImageUrl is failed.
329 defaultBrokenImageUrl = "yes-9patch.9.png";
330 factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
331 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
332 Shader testShader3 = renderer.GetShader();
334 DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
335 DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));
336 DALI_TEST_CHECK(testShader2 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
337 DALI_TEST_CHECK(testShader3 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));