Merge "Add a TextEditor property to limit input to maximum characters" into devel...
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-CheckBoxButton.cpp
1 /*
2  * Copyright (c) 2020 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 <iostream>
19 #include <stdlib.h>
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <test-application.h>
23 #include <dali-toolkit/devel-api/controls/buttons/button-devel.h>
24
25
26 using namespace Dali;
27 using namespace Toolkit;
28
29 namespace
30 {
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
343   application.SendNotification();
344   application.Render();
345
346   Vector3 preVisualPaddingSize = checkBox.GetNaturalSize();
347
348   tet_printf( "Button RelayoutSize with text and icon (%f,%f)\n", checkBox.GetNaturalSize().width, checkBox.GetNaturalSize().height );
349
350   checkBox.SetProperty( Toolkit::DevelButton::Property::VISUAL_PADDING, Vector4( 25.0f, 25.0f, 25.0f, 25.0f ) );
351
352   application.SendNotification();
353   application.Render();
354
355   Vector3 paddingAddedSize = checkBox.GetNaturalSize();
356
357   tet_printf( "Button RelayoutSize with text, icon and padding (%f,%f)\n", checkBox.GetNaturalSize().width, checkBox.GetNaturalSize().height );
358
359   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 );
360
361   tet_infoline("Comparing original size of button before adding padding to visual foreground\n");
362
363   DALI_TEST_GREATER( paddingAddedSize.width, preVisualPaddingSize.width , TEST_LOCATION );
364
365   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");
366
367   DALI_TEST_GREATER( paddingAddedSize.height, preVisualPaddingSize.height , TEST_LOCATION );
368
369   END_TEST;
370 }
371
372 // Deprecated API Tests
373
374 int UtcDaliCheckBoxButtonSetGetSelected(void)
375 {
376   ToolkitTestApplication application;
377   tet_infoline(" UtcDaliCheckBoxButtonSetGetSelected");
378
379   CheckBoxButton checkBoxButton = CheckBoxButton::New();
380   checkBoxButton.StateChangedSignal().Connect( &CheckBoxButtonClicked );
381
382   // global var used to check if CheckBoxButtonClicked is called;
383   gCheckBoxButtonState = false;
384
385   checkBoxButton.SetProperty( Button::Property::SELECTED, true );
386
387   DALI_TEST_EQUALS( checkBoxButton.GetProperty( Button::Property::SELECTED ).Get<bool>(), true, TEST_LOCATION );
388   DALI_TEST_CHECK( gCheckBoxButtonState );
389
390   checkBoxButton.SetProperty( Button::Property::SELECTED, false );
391
392   DALI_TEST_EQUALS( checkBoxButton.GetProperty( Button::Property::SELECTED ).Get<bool>(), false, TEST_LOCATION );
393   DALI_TEST_CHECK( !gCheckBoxButtonState );
394
395   checkBoxButton.SetProperty( Button::Property::SELECTED, true );
396
397   DALI_TEST_EQUALS( checkBoxButton.GetProperty( Button::Property::SELECTED ).Get<bool>(), true, TEST_LOCATION );
398   DALI_TEST_CHECK( gCheckBoxButtonState );
399   END_TEST;
400 }
401
402 int UtcDaliCheckBoxSetLabelDisabledP(void)
403 {
404   ToolkitTestApplication application;
405
406   CheckBoxButton checkBox = CheckBoxButton::New();
407   application.GetScene().Add( checkBox );
408
409   checkBox.SetProperty( Actor::Property::SIZE, Vector2( 20.0f, 20.0f ) );
410   checkBox.SetProperty(Button::Property::DISABLED_UNSELECTED_VISUAL, "Image.jpg" );
411
412   application.SendNotification();
413   application.Render();
414
415   Property::Map propertyMap;
416
417   propertyMap.Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT )
418              .Add( Toolkit::TextVisual::Property::TEXT, "activate" )
419              .Add( Toolkit::TextVisual::Property::POINT_SIZE, 15.0f );
420
421   checkBox.SetProperty(checkBox.GetPropertyIndex("disabled"), true);
422   checkBox.SetProperty( checkBox.GetPropertyIndex("label"), propertyMap );
423
424   DALI_TEST_CHECK(  checkBox.GetProperty<bool>(checkBox.GetPropertyIndex("disabled")) );
425   DALI_TEST_EQUALS( GetButtonText(checkBox), "activate", TEST_LOCATION );
426
427   END_TEST;
428 }