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.
17 #include <dali-toolkit-test-suite-utils.h>
18 #include <dali-toolkit/dali-toolkit.h>
19 #include <dali-toolkit/devel-api/controls/control-devel.h>
20 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
21 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
22 #include <dali-toolkit/devel-api/visuals/visual-actions-devel.h>
23 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
24 #include <dali/devel-api/rendering/renderer-devel.h>
27 #include "dummy-control.h"
30 using namespace Dali::Toolkit;
32 void dali_arc_visual_startup(void)
34 test_return_value = TET_UNDEF;
37 void dali_arc_visual_cleanup(void)
39 test_return_value = TET_PASS;
42 int UtcDaliVisualFactoryGetArcVisual01(void)
44 ToolkitTestApplication application;
45 tet_infoline("UtcDaliVisualFactoryGetArcVisual01: Request arc visual with a Property::Map");
47 Property::Map propertyMap;
48 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ARC)
49 .Add(Visual::Property::MIX_COLOR, Color::RED)
50 .Add(DevelArcVisual::Property::THICKNESS, 20.0f);
52 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
53 DALI_TEST_CHECK(visual);
55 DummyControl actor = DummyControl::New(true);
56 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
57 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
58 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
59 application.GetScene().Add(actor);
61 application.SendNotification();
64 // renderer is added to actor
65 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
66 Renderer renderer = actor.GetRendererAt(0u);
67 DALI_TEST_CHECK(renderer);
70 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
75 int UtcDaliVisualFactoryGetArcVisual02(void)
77 ToolkitTestApplication application;
78 tet_infoline("UtcDaliVisualFactoryGetArcVisual02: Request arc visual with a Property::Map");
80 Property::Map propertyMap;
81 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ARC)
82 .Add(Visual::Property::MIX_COLOR, Color::RED)
83 .Add(DevelArcVisual::Property::THICKNESS, 20.0f)
84 .Add(DevelArcVisual::Property::START_ANGLE, 0.0f)
85 .Add(DevelArcVisual::Property::SWEEP_ANGLE, 90.0f)
86 .Add(DevelArcVisual::Property::CAP, DevelArcVisual::Cap::ROUND);
88 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
89 DALI_TEST_CHECK(visual);
91 DummyControl actor = DummyControl::New(true);
92 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
93 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
94 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
95 application.GetScene().Add(actor);
97 application.SendNotification();
100 // renderer is added to actor
101 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
102 Renderer renderer = actor.GetRendererAt(0u);
103 DALI_TEST_CHECK(renderer);
106 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
111 int UtcDaliArcVisualGetPropertyMap01(void)
113 ToolkitTestApplication application;
114 tet_infoline("UtcDaliArcVisualGetPropertyMap01");
116 float thickness = 20.0f;
117 float startAngle = 0.0f, sweepAngle = 90.0f;
119 Property::Map propertyMap;
120 propertyMap.Add("visualType", DevelVisual::ARC)
121 .Add("mixColor", Color::RED)
122 .Add("thickness", thickness)
123 .Add("startAngle", startAngle)
124 .Add("sweepAngle", sweepAngle)
125 .Add("cap", DevelArcVisual::Cap::ROUND);
127 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
128 DALI_TEST_CHECK(visual);
130 DummyControl actor = DummyControl::New(true);
131 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
132 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
133 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
134 application.GetScene().Add(actor);
136 application.SendNotification();
137 application.Render();
139 // renderer is added to actor
140 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
141 Renderer renderer = actor.GetRendererAt(0u);
142 DALI_TEST_CHECK(renderer);
144 Property::Map resultMap;
145 visual.CreatePropertyMap(resultMap);
147 // check the property values from the returned map from a visual
148 Property::Value* value = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
149 DALI_TEST_CHECK(value);
150 DALI_TEST_EQUALS(value->Get<Vector4>(), Color::RED, TEST_LOCATION);
152 value = resultMap.Find(DevelArcVisual::Property::THICKNESS, Property::FLOAT);
153 DALI_TEST_CHECK(value);
154 DALI_TEST_EQUALS(value->Get<float>(), thickness, TEST_LOCATION);
156 value = resultMap.Find(DevelArcVisual::Property::START_ANGLE, Property::FLOAT);
157 DALI_TEST_CHECK(value);
158 DALI_TEST_EQUALS(value->Get<float>(), startAngle, TEST_LOCATION);
160 value = resultMap.Find(DevelArcVisual::Property::SWEEP_ANGLE, Property::FLOAT);
161 DALI_TEST_CHECK(value);
162 DALI_TEST_EQUALS(value->Get<float>(), sweepAngle, TEST_LOCATION);
164 value = resultMap.Find(DevelArcVisual::Property::CAP, Property::INTEGER);
165 DALI_TEST_CHECK(value);
166 DALI_TEST_CHECK(value->Get<int>() == DevelArcVisual::Cap::ROUND);
169 propertyMap[DevelArcVisual::Property::THICKNESS] = "3.0f";
170 propertyMap[DevelArcVisual::Property::START_ANGLE] = "0.0f";
171 propertyMap[DevelArcVisual::Property::SWEEP_ANGLE] = "90.0f";
172 propertyMap[DevelArcVisual::Property::CAP] = "1";
174 visual = VisualFactory::Get().CreateVisual(propertyMap);
175 DALI_TEST_CHECK(visual);
177 visual.CreatePropertyMap(resultMap);
179 value = resultMap.Find(DevelArcVisual::Property::THICKNESS, Property::FLOAT);
180 DALI_TEST_CHECK(value);
181 DALI_TEST_EQUALS(value->Get<float>(), 0.0f, TEST_LOCATION);
183 value = resultMap.Find(DevelArcVisual::Property::START_ANGLE, Property::FLOAT);
184 DALI_TEST_CHECK(value);
185 DALI_TEST_EQUALS(value->Get<float>(), 0.0f, TEST_LOCATION);
187 value = resultMap.Find(DevelArcVisual::Property::SWEEP_ANGLE, Property::FLOAT);
188 DALI_TEST_CHECK(value);
189 DALI_TEST_EQUALS(value->Get<float>(), 360.0f, TEST_LOCATION);
191 value = resultMap.Find(DevelArcVisual::Property::CAP, Property::INTEGER);
192 DALI_TEST_CHECK(value);
193 DALI_TEST_CHECK(value->Get<int>() == DevelArcVisual::Cap::BUTT);
196 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
201 int UtcDaliArcVisualGetPropertyMap02(void)
203 ToolkitTestApplication application;
204 tet_infoline("UtcDaliArcVisualGetPropertyMap02");
206 float thickness = 20.0f;
207 float startAngle = 0.0f, sweepAngle = 90.0f;
209 Property::Map propertyMap;
210 propertyMap.Add(Visual::Property::TYPE, DevelVisual::ARC)
211 .Add(Visual::Property::MIX_COLOR, Color::RED)
212 .Add(DevelArcVisual::Property::THICKNESS, thickness)
213 .Add(DevelArcVisual::Property::START_ANGLE, startAngle)
214 .Add(DevelArcVisual::Property::SWEEP_ANGLE, sweepAngle)
215 .Add(DevelArcVisual::Property::CAP, DevelArcVisual::Cap::ROUND);
217 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
218 DALI_TEST_CHECK(visual);
220 Property::Map resultMap;
221 visual.CreatePropertyMap(resultMap);
223 // check the property values from the returned map from a visual
224 Property::Value* value = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
225 DALI_TEST_CHECK(value);
226 DALI_TEST_EQUALS(value->Get<Vector4>(), Color::RED, TEST_LOCATION);
228 value = resultMap.Find(DevelArcVisual::Property::THICKNESS, Property::FLOAT);
229 DALI_TEST_CHECK(value);
230 DALI_TEST_EQUALS(value->Get<float>(), thickness, TEST_LOCATION);
232 value = resultMap.Find(DevelArcVisual::Property::START_ANGLE, Property::FLOAT);
233 DALI_TEST_CHECK(value);
234 DALI_TEST_EQUALS(value->Get<float>(), startAngle, TEST_LOCATION);
236 value = resultMap.Find(DevelArcVisual::Property::SWEEP_ANGLE, Property::FLOAT);
237 DALI_TEST_CHECK(value);
238 DALI_TEST_EQUALS(value->Get<float>(), sweepAngle, TEST_LOCATION);
240 value = resultMap.Find(DevelArcVisual::Property::CAP, Property::INTEGER);
241 DALI_TEST_CHECK(value);
242 DALI_TEST_CHECK(value->Get<int>() == DevelArcVisual::Cap::ROUND);
247 int UtcDaliArcVisualUpdateProperty(void)
249 ToolkitTestApplication application;
250 tet_infoline("UtcDaliArcVisualUpdateProperty");
252 static std::vector<UniformData> customUniforms =
254 UniformData("thickness", Property::Type::FLOAT),
255 UniformData("startAngle", Property::Type::FLOAT),
256 UniformData("sweepAngle", Property::Type::FLOAT),
259 TestGraphicsController& graphics = application.GetGraphicsController();
260 graphics.AddCustomUniforms(customUniforms);
262 TestGlAbstraction& gl = application.GetGlAbstraction();
264 float thickness = 20.0f;
265 float startAngle = 0.0f;
266 float sweepAngle = 90.0f;
268 Property::Map propertyMap;
269 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ARC)
270 .Add(Visual::Property::MIX_COLOR, Color::RED)
271 .Add(DevelArcVisual::Property::THICKNESS, thickness)
272 .Add(DevelArcVisual::Property::START_ANGLE, startAngle)
273 .Add(DevelArcVisual::Property::SWEEP_ANGLE, sweepAngle);
275 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
276 DALI_TEST_CHECK(visual);
278 DummyControl actor = DummyControl::New(true);
279 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
280 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
282 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
283 application.GetScene().Add(actor);
285 application.SendNotification();
286 application.Render();
288 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
289 Property::Value* value = map.Find(DevelArcVisual::Property::THICKNESS, Property::FLOAT);
290 DALI_TEST_EQUALS(value->Get<float>(), thickness, TEST_LOCATION);
291 DALI_TEST_EQUALS(gl.CheckUniformValue<float>("thickness", thickness), true, TEST_LOCATION);
293 value = map.Find(DevelArcVisual::Property::START_ANGLE, Property::FLOAT);
294 DALI_TEST_EQUALS(value->Get<float>(), startAngle, TEST_LOCATION);
295 DALI_TEST_EQUALS(gl.CheckUniformValue<float>("startAngle", startAngle), true, TEST_LOCATION);
297 value = map.Find(DevelArcVisual::Property::SWEEP_ANGLE, Property::FLOAT);
298 DALI_TEST_EQUALS(value->Get<float>(), sweepAngle, TEST_LOCATION);
299 DALI_TEST_EQUALS(gl.CheckUniformValue<float>("sweepAngle", sweepAngle), true, TEST_LOCATION);
305 Property::Map attributes;
306 attributes.Add(DevelArcVisual::Property::THICKNESS, thickness)
307 .Add(DevelArcVisual::Property::START_ANGLE, startAngle)
308 .Add(DevelArcVisual::Property::SWEEP_ANGLE, sweepAngle);
310 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
312 application.SendNotification();
313 application.Render();
315 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
316 value = map.Find(DevelArcVisual::Property::THICKNESS, Property::FLOAT);
317 DALI_TEST_EQUALS(value->Get<float>(), thickness, TEST_LOCATION);
318 DALI_TEST_EQUALS(gl.CheckUniformValue<float>("thickness", thickness), true, TEST_LOCATION);
320 value = map.Find(DevelArcVisual::Property::START_ANGLE, Property::FLOAT);
321 DALI_TEST_EQUALS(value->Get<float>(), startAngle, TEST_LOCATION);
322 DALI_TEST_EQUALS(gl.CheckUniformValue<float>("startAngle", startAngle), true, TEST_LOCATION);
324 value = map.Find(DevelArcVisual::Property::SWEEP_ANGLE, Property::FLOAT);
325 DALI_TEST_EQUALS(value->Get<float>(), sweepAngle, TEST_LOCATION);
326 DALI_TEST_EQUALS(gl.CheckUniformValue<float>("sweepAngle", sweepAngle), true, TEST_LOCATION);