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";
45 int UtcDaliVisualAction(void)
47 ToolkitTestApplication application;
48 tet_infoline("Register an ImageVisual and and perform an Action on Visual directly");
49 Vector2 controlSize(20.f, 30.f);
52 Property::Map settings;
53 Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New(settings);
55 DummyControl dummyControl = DummyControl::New(true);
56 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
58 tet_infoline("Register visual and stage control");
60 Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base(dummyVisualPtr.Get());
61 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visualBaseHandle);
62 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
63 application.GetScene().Add(dummyControl);
65 application.SendNotification();
68 tet_infoline("Check action counter is 0 before DoAction");
69 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
71 tet_infoline("Perform TEST_ACTION action on Visual. Should increase the action counter");
73 Property::Map attributes;
74 Toolkit::Internal::Visual::Base& internalVisualBase = GetImplementation(visualBaseHandle);
75 internalVisualBase.DoAction(Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes);
76 application.SendNotification();
77 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 1, TEST_LOCATION);
82 int UtcDaliVisualActionNotImplemented(void)
84 ToolkitTestApplication application;
85 tet_infoline("Register an ImageVisual and and perform an Action on a Visual which does not support any Actions");
86 Vector2 controlSize(20.f, 30.f);
89 Property::Map settings;
90 Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New(settings);
92 DummyControl dummyControl = DummyControl::New(true);
93 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
95 tet_infoline("Register visual and stage control");
97 VisualFactory factory = VisualFactory::Get();
98 Property::Map propertyMap;
99 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
100 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
101 Visual::Base visual = factory.CreateVisual(propertyMap);
103 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
104 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
105 application.GetScene().Add(dummyControl);
107 application.SendNotification();
108 application.Render();
110 tet_infoline("Check action counter is 0 before DoAction");
111 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
113 tet_infoline("Perform TEST_ACTION action on Color Visual which does not support it.. Should not increment the action counter");
114 Property::Map attributes;
115 GetImplementation(visual).DoAction(Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes);
116 application.SendNotification();
117 DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
122 int UtcDaliVisualSetProperties(void)
124 ToolkitTestApplication application;
125 tet_infoline("Register a visual and SetProperties");
127 Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
129 //Created ColorVisual
130 Property::Map propertyMap1;
131 propertyMap1.Insert(Visual::Property::TYPE, Visual::COLOR);
132 propertyMap1.Insert(ColorVisual::Property::MIX_COLOR, Color::RED);
133 Toolkit::Internal::ColorVisualPtr colorVisualPtr = Toolkit::Internal::ColorVisual::New(*factoryCache, propertyMap1);
135 DummyControl dummyControl = DummyControl::New(true);
136 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
138 Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base(colorVisualPtr.Get());
139 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visualBaseHandle);
140 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
141 application.GetScene().Add(dummyControl);
143 application.SendNotification();
144 application.Render();
146 Property::Map propertyMap;
147 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
149 colorVisualPtr->SetProperties(propertyMap);
150 application.SendNotification();
151 application.Render();
153 Property::Map resultMap;
154 visualBaseHandle.CreatePropertyMap(resultMap);
156 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
157 DALI_TEST_CHECK(colorValue);
158 DALI_TEST_CHECK(colorValue->Get<Vector4>() == Color::BLUE);
165 int UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap(void)
167 ToolkitTestApplication application;
168 tet_infoline("UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap");
170 Property::Map propertyMap;
171 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
172 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
174 // request AnimatedVectorImageVisual with a property map
175 VisualFactory factory = VisualFactory::Get();
176 Visual::Base visual = factory.CreateVisual(propertyMap);
177 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
179 Property::Map resultMap;
180 visualImpl.CreateInstancePropertyMap(resultMap);
182 // check the property values from the returned map from a visual
183 DALI_TEST_CHECK(resultMap.Empty()); // Now the map is empty
188 int UtcDaliAnimatedVectorImageVisualSetProperties(void)
190 ToolkitTestApplication application;
191 tet_infoline("UtcDaliAnimatedVectorImageVisualSetProperties");
193 Property::Map propertyMap;
194 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
195 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
196 .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
197 .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.2f, 0.8f))
198 .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false);
200 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
201 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
202 DALI_TEST_CHECK(visual);
204 DummyControl actor = DummyControl::New(true);
205 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
206 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
207 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
208 application.GetScene().Add(actor);
210 application.SendNotification();
211 application.Render();
213 // Trigger count is 2 - load, resource ready
214 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
216 // renderer is added to actor
217 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
218 Renderer renderer = actor.GetRendererAt(0u);
219 DALI_TEST_CHECK(renderer);
221 Property::Map propertyMap1;
222 propertyMap1.Add(DevelImageVisual::Property::LOOP_COUNT, 1)
223 .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.4f, 0.6f));
225 visualImpl.SetProperties(propertyMap1);
227 application.SendNotification();
228 application.Render();
230 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
231 renderer = actor.GetRendererAt(0u);
232 DALI_TEST_CHECK(renderer);
235 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
240 int UtcDaliArcVisualCreateInstancePropertyMap(void)
242 ToolkitTestApplication application;
243 tet_infoline("UtcDaliArcVisualCreateInstancePropertyMap");
245 Property::Map propertyMap;
246 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ARC)
247 .Add(DevelArcVisual::Property::THICKNESS, 20.0f);
249 // request ArcVisual with a property map
250 VisualFactory factory = VisualFactory::Get();
251 Visual::Base visual = factory.CreateVisual(propertyMap);
252 Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
254 Property::Map resultMap;
255 visualImpl.CreateInstancePropertyMap(resultMap);
257 // check the property values from the returned map from a visual
258 DALI_TEST_CHECK(resultMap.Empty()); // Now the map is empty
262 int UtcDaliVisualUpdateBrokenImageRenderer(void)
264 ToolkitTestApplication application;
265 tet_infoline("UpdateBrokenImageRenderer Test");
267 Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
269 std::string defaultBrokenImageUrl = "not-9patch.png";
271 // Set default broken image
272 factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
274 //Created dummy renderer
275 Geometry geometry = factoryCache->GetGeometry(Toolkit::Internal::VisualFactoryCache::QUAD_GEOMETRY);
276 Shader shader = Shader::New("foo", "bar");
277 Renderer renderer = Renderer::New(geometry, shader);
279 DALI_TEST_CHECK(renderer);
281 // renderer doesn't changed.
282 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, true);
283 Shader testShader1 = renderer.GetShader();
285 // Get default image renderer.
286 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
287 Shader testShader2 = renderer.GetShader();
289 // Get default image renderer but nine patch.
290 // Note : This API behavior can be changed. (DALi don't consider about default BrokenImageUrl is failed.
291 defaultBrokenImageUrl = "yes-9patch.9.png";
292 factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
293 factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
294 Shader testShader3 = renderer.GetShader();
296 DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
297 DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));
298 DALI_TEST_CHECK(testShader2 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
299 DALI_TEST_CHECK(testShader3 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));