Updating code formatting
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-CheckBoxButton.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 #include <stdlib.h>
19 #include <iostream>
20
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <dali-toolkit/dali-toolkit.h>
23
24 #include <dali-toolkit/devel-api/controls/buttons/button-devel.h>
25 #include <test-application.h>
26
27 using namespace Dali;
28 using namespace Toolkit;
29
30 namespace
31 {
32 static bool gCheckBoxButtonState = false;
33 bool        CheckBoxButtonClicked(Button button)
34 {
35   gCheckBoxButtonState = button.GetProperty<bool>(button.GetPropertyIndex("selected"));
36   return true;
37 }
38
39 static const char* TEST_IMAGE_ONE  = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
40 const Vector2      TEST_IMAGE_SIZE = Vector2(66.0f, 66.0f);
41
42 static std::string GetButtonText(Button button)
43 {
44   Property::Value value = button.GetProperty(Toolkit::Button::Property::LABEL);
45
46   Property::Map* labelProperty = value.GetMap();
47
48   std::string textLabel;
49
50   if(labelProperty)
51   {
52     Property::Value* value = labelProperty->Find(Toolkit::TextVisual::Property::TEXT);
53     value->Get(textLabel);
54   }
55
56   return textLabel;
57 }
58
59 } // namespace
60
61 void checkbox_button_startup(void)
62 {
63   test_return_value = TET_UNDEF;
64 }
65
66 void checkbox_button_cleanup(void)
67 {
68   test_return_value = TET_PASS;
69 }
70
71 int UtcDaliCheckBoxButtonConstructorP(void)
72 {
73   ToolkitTestApplication application;
74
75   CheckBoxButton checkBox;
76
77   DALI_TEST_CHECK(!checkBox);
78   END_TEST;
79 }
80
81 int UtcDaliCheckBoxButtonCopyConstructorP(void)
82 {
83   ToolkitTestApplication application;
84
85   // Initialize an object, ref count == 1
86   CheckBoxButton checkBox = CheckBoxButton::New();
87
88   CheckBoxButton copy(checkBox);
89   DALI_TEST_CHECK(copy);
90   END_TEST;
91 }
92
93 int UtcDaliCheckBoxButtonMoveConstructor(void)
94 {
95   ToolkitTestApplication application;
96
97   CheckBoxButton button = CheckBoxButton::New();
98   DALI_TEST_EQUALS(1, button.GetBaseObject().ReferenceCount(), TEST_LOCATION);
99   DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
100   button.SetProperty(Button::Property::TOGGLABLE, false);
101   DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
102
103   CheckBoxButton moved = std::move(button);
104   DALI_TEST_CHECK(moved);
105   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
106   DALI_TEST_EQUALS(moved.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
107   DALI_TEST_CHECK(!button);
108
109   END_TEST;
110 }
111
112 int UtcDaliCheckBoxButtonAssignmentOperatorP(void)
113 {
114   ToolkitTestApplication application;
115
116   CheckBoxButton checkBox = CheckBoxButton::New();
117
118   CheckBoxButton copy(checkBox);
119   DALI_TEST_CHECK(copy);
120
121   DALI_TEST_CHECK(checkBox == copy);
122   END_TEST;
123 }
124
125 int UtcDaliCheckBoxButtonMoveAssignment(void)
126 {
127   ToolkitTestApplication application;
128
129   CheckBoxButton button = CheckBoxButton::New();
130   DALI_TEST_EQUALS(1, button.GetBaseObject().ReferenceCount(), TEST_LOCATION);
131   DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
132   button.SetProperty(Button::Property::TOGGLABLE, false);
133   DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
134
135   CheckBoxButton moved;
136   moved = std::move(button);
137   DALI_TEST_CHECK(moved);
138   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
139   DALI_TEST_EQUALS(moved.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
140   DALI_TEST_CHECK(!button);
141
142   END_TEST;
143 }
144
145 int UtcDaliCheckBoxButtonNewP(void)
146 {
147   ToolkitTestApplication application;
148
149   CheckBoxButton checkBox = CheckBoxButton::New();
150
151   DALI_TEST_CHECK(checkBox);
152   END_TEST;
153 }
154
155 int UtcDaliCheckBoxButtonDownCastP(void)
156 {
157   ToolkitTestApplication application;
158
159   CheckBoxButton checkBox = CheckBoxButton::New();
160
161   BaseHandle object(checkBox);
162
163   CheckBoxButton checkBox2 = CheckBoxButton::DownCast(object);
164   DALI_TEST_CHECK(checkBox2);
165
166   CheckBoxButton checkBox3 = DownCast<CheckBoxButton>(object);
167   DALI_TEST_CHECK(checkBox3);
168   END_TEST;
169 }
170
171 int UtcDaliCheckBoxButtonDownCastN(void)
172 {
173   ToolkitTestApplication application;
174
175   BaseHandle unInitializedObject;
176
177   CheckBoxButton checkBox1 = CheckBoxButton::DownCast(unInitializedObject);
178   DALI_TEST_CHECK(!checkBox1);
179
180   CheckBoxButton checkBox2 = DownCast<CheckBoxButton>(unInitializedObject);
181   DALI_TEST_CHECK(!checkBox2);
182   END_TEST;
183 }
184
185 int UtcDaliCheckBoxButtonSelectedPropertyP(void)
186 {
187   ToolkitTestApplication application;
188   tet_infoline(" UtcDaliCheckBoxButtonSetGetSelected");
189
190   CheckBoxButton checkBoxButton = CheckBoxButton::New();
191   checkBoxButton.StateChangedSignal().Connect(&CheckBoxButtonClicked);
192
193   // global var used to check if CheckBoxButtonClicked is called;
194   gCheckBoxButtonState = false;
195
196   checkBoxButton.SetProperty(checkBoxButton.GetPropertyIndex("selected"), true);
197
198   DALI_TEST_EQUALS(checkBoxButton.GetProperty<bool>(checkBoxButton.GetPropertyIndex("selected")), true, TEST_LOCATION);
199   DALI_TEST_CHECK(gCheckBoxButtonState);
200
201   checkBoxButton.SetProperty(checkBoxButton.GetPropertyIndex("selected"), false);
202
203   DALI_TEST_EQUALS(checkBoxButton.GetProperty<bool>(checkBoxButton.GetPropertyIndex("selected")), false, TEST_LOCATION);
204   DALI_TEST_CHECK(!gCheckBoxButtonState);
205
206   checkBoxButton.SetProperty(checkBoxButton.GetPropertyIndex("selected"), true);
207
208   DALI_TEST_EQUALS(checkBoxButton.GetProperty<bool>(checkBoxButton.GetPropertyIndex("selected")), true, TEST_LOCATION);
209   DALI_TEST_CHECK(gCheckBoxButtonState);
210   END_TEST;
211 }
212
213 int UtcDaliCheckBoxSetLabelP(void)
214 {
215   ToolkitTestApplication application;
216
217   CheckBoxButton checkBox = CheckBoxButton::New();
218
219   Property::Map propertyMap;
220
221   propertyMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT)
222     .Add(Toolkit::TextVisual::Property::TEXT, "activate")
223     .Add(Toolkit::TextVisual::Property::POINT_SIZE, 15.0f);
224
225   checkBox.SetProperty(checkBox.GetPropertyIndex("label"), propertyMap);
226
227   DALI_TEST_EQUALS(GetButtonText(checkBox), "activate", TEST_LOCATION);
228   END_TEST;
229 }
230
231 int UtcDaliCheckBoxSetDisabledPropertyP(void)
232 {
233   ToolkitTestApplication application;
234
235   CheckBoxButton checkBox = CheckBoxButton::New();
236   application.GetScene().Add(checkBox);
237
238   checkBox.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
239   checkBox.SetProperty(checkBox.GetPropertyIndex("disabledUnselectedBackgroundVisual"), "Image.jpg");
240
241   application.SendNotification();
242   application.Render();
243
244   Property::Map propertyMap;
245
246   propertyMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT)
247     .Add(Toolkit::TextVisual::Property::TEXT, "activate")
248     .Add(Toolkit::TextVisual::Property::POINT_SIZE, 15.0f);
249
250   checkBox.SetProperty(checkBox.GetPropertyIndex("disabled"), true);
251   checkBox.SetProperty(checkBox.GetPropertyIndex("label"), propertyMap);
252
253   DALI_TEST_EQUALS(checkBox.GetProperty<bool>(checkBox.GetPropertyIndex("disabled")), true, TEST_LOCATION);
254   DALI_TEST_EQUALS(GetButtonText(checkBox), "activate", TEST_LOCATION);
255
256   END_TEST;
257 }
258
259 int UtcDaliCheckBoxSettingDisabled(void)
260 {
261   ToolkitTestApplication application;
262
263   CheckBoxButton checkBox = CheckBoxButton::New();
264
265   checkBox.SetProperty(checkBox.GetPropertyIndex("disabled"), true);
266   DALI_TEST_CHECK(checkBox.GetProperty<bool>(checkBox.GetPropertyIndex("disabled")));
267
268   checkBox.SetProperty(checkBox.GetPropertyIndex("disabled"), false);
269
270   DALI_TEST_CHECK(!checkBox.GetProperty<bool>(checkBox.GetPropertyIndex("disabled")));
271
272   END_TEST;
273 }
274
275 int UtcDaliCheckBoxSetLabelPadding(void)
276 {
277   tet_infoline("UtcDaliCheckBoxSetLabelPadding\n");
278
279   ToolkitTestApplication application;
280
281   CheckBoxButton checkBox = CheckBoxButton::New();
282
283   Property::Map propertyMap;
284
285   propertyMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT)
286     .Add(Toolkit::TextVisual::Property::TEXT, "activate")
287     .Add(Toolkit::TextVisual::Property::POINT_SIZE, 15.0f);
288
289   checkBox.SetProperty(Toolkit::Button::Property::LABEL, propertyMap);
290
291   application.SendNotification();
292   application.Render();
293
294   Vector3 orginalSize = checkBox.GetNaturalSize();
295
296   checkBox.SetProperty(Toolkit::DevelButton::Property::LABEL_PADDING, Vector4(10.0f, 10.0f, 10.0f, 10.0f));
297
298   application.SendNotification();
299   application.Render();
300
301   Vector3 paddingAddedSize = checkBox.GetNaturalSize();
302
303   DALI_TEST_EQUALS(checkBox.GetProperty<Vector4>(Toolkit::DevelButton::Property::LABEL_PADDING), Vector4(10.0f, 10.0f, 10.0f, 10.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
304
305   tet_infoline("Comparing original size of button with just text and button size with text and padding\n");
306
307   DALI_TEST_EQUALS(orginalSize.width + 10.0f + 10.0f, paddingAddedSize.width, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
308
309   DALI_TEST_EQUALS(orginalSize.height + 10.0f + 10.0f, paddingAddedSize.height, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
310
311   END_TEST;
312 }
313
314 int UtcDaliCheckBoxSetForegroundPadding(void)
315 {
316   tet_infoline("UtcDaliCheckBoxSetForegroundPadding\n");
317
318   ToolkitTestApplication application;
319
320   CheckBoxButton checkBox = CheckBoxButton::New();
321
322   Property::Map propertyMap;
323
324   propertyMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT)
325     .Add(Toolkit::TextVisual::Property::TEXT, "activate")
326     .Add(Toolkit::TextVisual::Property::POINT_SIZE, 15.0f);
327
328   checkBox.SetProperty(Toolkit::Button::Property::LABEL, propertyMap);
329   checkBox.SetProperty(Toolkit::DevelButton::Property::LABEL_PADDING, Vector4(5.0f, 5.0f, 5.0f, 5.0f));
330
331   application.SendNotification();
332   application.Render();
333
334   tet_printf("Button RelayoutSize with text(%f,%f)\n", checkBox.GetNaturalSize().width, checkBox.GetNaturalSize().height);
335
336   TestPlatformAbstraction& platform = application.GetPlatform();
337   platform.SetClosestImageSize(TEST_IMAGE_SIZE);
338
339   checkBox.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, TEST_IMAGE_ONE);
340   checkBox.SetProperty(Toolkit::Button::Property::SELECTED_VISUAL, TEST_IMAGE_ONE);
341
342   application.SendNotification();
343   application.Render();
344
345   Vector3 preVisualPaddingSize = checkBox.GetNaturalSize();
346
347   tet_printf("Button RelayoutSize with text and icon (%f,%f)\n", checkBox.GetNaturalSize().width, checkBox.GetNaturalSize().height);
348
349   checkBox.SetProperty(Toolkit::DevelButton::Property::VISUAL_PADDING, Vector4(25.0f, 25.0f, 25.0f, 25.0f));
350
351   application.SendNotification();
352   application.Render();
353
354   Vector3 paddingAddedSize = checkBox.GetNaturalSize();
355
356   tet_printf("Button RelayoutSize with text, icon and padding (%f,%f)\n", checkBox.GetNaturalSize().width, checkBox.GetNaturalSize().height);
357
358   DALI_TEST_EQUALS(checkBox.GetProperty<Vector4>(Toolkit::DevelButton::Property::VISUAL_PADDING), Vector4(25.0f, 25.0f, 25.0f, 25.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
359
360   tet_infoline("Comparing original size of button before adding padding to visual foreground\n");
361
362   DALI_TEST_GREATER(paddingAddedSize.width, preVisualPaddingSize.width, TEST_LOCATION);
363
364   tet_infoline("Text and Visual are side by side, visual height and padding must be greater than text height and padding for this test\n");
365
366   DALI_TEST_GREATER(paddingAddedSize.height, preVisualPaddingSize.height, TEST_LOCATION);
367
368   END_TEST;
369 }
370
371 // Deprecated API Tests
372
373 int UtcDaliCheckBoxButtonSetGetSelected(void)
374 {
375   ToolkitTestApplication application;
376   tet_infoline(" UtcDaliCheckBoxButtonSetGetSelected");
377
378   CheckBoxButton checkBoxButton = CheckBoxButton::New();
379   checkBoxButton.StateChangedSignal().Connect(&CheckBoxButtonClicked);
380
381   // global var used to check if CheckBoxButtonClicked is called;
382   gCheckBoxButtonState = false;
383
384   checkBoxButton.SetProperty(Button::Property::SELECTED, true);
385
386   DALI_TEST_EQUALS(checkBoxButton.GetProperty(Button::Property::SELECTED).Get<bool>(), true, TEST_LOCATION);
387   DALI_TEST_CHECK(gCheckBoxButtonState);
388
389   checkBoxButton.SetProperty(Button::Property::SELECTED, false);
390
391   DALI_TEST_EQUALS(checkBoxButton.GetProperty(Button::Property::SELECTED).Get<bool>(), false, TEST_LOCATION);
392   DALI_TEST_CHECK(!gCheckBoxButtonState);
393
394   checkBoxButton.SetProperty(Button::Property::SELECTED, true);
395
396   DALI_TEST_EQUALS(checkBoxButton.GetProperty(Button::Property::SELECTED).Get<bool>(), true, TEST_LOCATION);
397   DALI_TEST_CHECK(gCheckBoxButtonState);
398   END_TEST;
399 }
400
401 int UtcDaliCheckBoxSetLabelDisabledP(void)
402 {
403   ToolkitTestApplication application;
404
405   CheckBoxButton checkBox = CheckBoxButton::New();
406   application.GetScene().Add(checkBox);
407
408   checkBox.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
409   checkBox.SetProperty(Button::Property::DISABLED_UNSELECTED_VISUAL, "Image.jpg");
410
411   application.SendNotification();
412   application.Render();
413
414   Property::Map propertyMap;
415
416   propertyMap.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT)
417     .Add(Toolkit::TextVisual::Property::TEXT, "activate")
418     .Add(Toolkit::TextVisual::Property::POINT_SIZE, 15.0f);
419
420   checkBox.SetProperty(checkBox.GetPropertyIndex("disabled"), true);
421   checkBox.SetProperty(checkBox.GetPropertyIndex("label"), propertyMap);
422
423   DALI_TEST_CHECK(checkBox.GetProperty<bool>(checkBox.GetPropertyIndex("disabled")));
424   DALI_TEST_EQUALS(GetButtonText(checkBox), "activate", TEST_LOCATION);
425
426   END_TEST;
427 }