TextField to limit Input to maximum characters and emit signal
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-TextField.cpp
1 /*
2  * Copyright (c) 2014 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
23 using namespace Dali;
24 using namespace Toolkit;
25
26 void dali_textfield_startup(void)
27 {
28   test_return_value = TET_UNDEF;
29 }
30
31 void dali_textfield_cleanup(void)
32 {
33   test_return_value = TET_PASS;
34 }
35
36 namespace
37 {
38
39 const char* const PROPERTY_NAME_RENDERING_BACKEND       = "rendering-backend";
40 const char* const PROPERTY_NAME_PLACEHOLDER_TEXT        = "placeholder-text";
41 const char* const PROPERTY_NAME_TEXT                    = "text";
42 const char* const PROPERTY_NAME_FONT_FAMILY             = "font-family";
43 const char* const PROPERTY_NAME_FONT_STYLE              = "font-style";
44 const char* const PROPERTY_NAME_POINT_SIZE              = "point-size";
45 const char* const PROPERTY_NAME_EXCEED_POLICY           = "exceed-policy";
46 const char* const PROPERTY_NAME_PRIMARY_CURSOR_COLOR    = "primary-cursor-color";
47 const char* const PROPERTY_NAME_SECONDARY_CURSOR_COLOR  = "secondary-cursor-color";
48 const char* const PROPERTY_NAME_ENABLE_CURSOR_BLINK     = "enable-cursor-blink";
49 const char* const PROPERTY_NAME_CURSOR_BLINK_INTERVAL   = "cursor-blink-interval";
50 const char* const PROPERTY_NAME_CURSOR_BLINK_DURATION   = "cursor-blink-duration";
51 const char* const PROPERTY_NAME_GRAB_HANDLE_IMAGE       = "grab-handle-image";
52 const char* const PROPERTY_NAME_DECORATION_BOUNDING_BOX = "decoration-bounding-box";
53 const char* const PROPERTY_NAME_HORIZONTAL_ALIGNMENT    = "horizontal-alignment";
54 const char* const PROPERTY_NAME_VERTICAL_ALIGNMENT      = "vertical-alignment";
55
56 } // namespace
57
58 int UtcDaliToolkitTextFieldConstructorP(void)
59 {
60   ToolkitTestApplication application;
61   tet_infoline(" UtcDaliToolkitTextFieldConstructorP");
62   TextField textField;
63   DALI_TEST_CHECK( !textField );
64   END_TEST;
65 }
66
67 int UtcDaliToolkitTextFieldNewP(void)
68 {
69   ToolkitTestApplication application;
70   tet_infoline(" UtcDaliToolkitTextFieldNewP");
71   TextField textField = TextField::New();
72   DALI_TEST_CHECK( textField );
73   END_TEST;
74 }
75
76 int UtcDaliToolkitTextFieldDownCastP(void)
77 {
78   ToolkitTestApplication application;
79   tet_infoline(" UtcDaliToolkitTextFieldDownCastP");
80   TextField textField1 = TextField::New();
81   BaseHandle object( textField1 );
82
83   TextField textField2 = TextField::DownCast( object );
84   DALI_TEST_CHECK( textField2 );
85
86   TextField textField3 = DownCast< TextField >( object );
87   DALI_TEST_CHECK( textField3 );
88   END_TEST;
89 }
90
91 int UtcDaliToolkitTextFieldDownCastN(void)
92 {
93   ToolkitTestApplication application;
94   tet_infoline(" UtcDaliToolkitTextFieldDownCastN");
95   BaseHandle uninitializedObject;
96   TextField textField1 = TextField::DownCast( uninitializedObject );
97   DALI_TEST_CHECK( !textField1 );
98
99   TextField textField2 = DownCast< TextField >( uninitializedObject );
100   DALI_TEST_CHECK( !textField2 );
101   END_TEST;
102 }
103
104 int UtcDaliToolkitTextFieldCopyConstructorP(void)
105 {
106   ToolkitTestApplication application;
107   tet_infoline(" UtcDaliToolkitTextFieldCopyConstructorP");
108   TextField textField = TextField::New();
109   textField.SetProperty( TextField::Property::TEXT, "Test" );
110
111   TextField copy( textField );
112   DALI_TEST_CHECK( copy );
113   DALI_TEST_CHECK( copy.GetProperty<std::string>( TextLabel::Property::TEXT ) == textField.GetProperty<std::string>( TextLabel::Property::TEXT ) );
114   END_TEST;
115 }
116
117 int UtcDaliToolkitTextFieldAssignmentOperatorP(void)
118 {
119   ToolkitTestApplication application;
120   tet_infoline(" UtcDaliToolkitTextFieldAssignmentOperatorP");
121   TextField textField = TextField::New();
122   textField.SetProperty( TextField::Property::TEXT, "Test" );
123
124   TextField copy = textField;
125   DALI_TEST_CHECK( copy );
126   DALI_TEST_CHECK( copy.GetProperty<std::string>( TextField::Property::TEXT ) == textField.GetProperty<std::string>( TextField::Property::TEXT ) );
127   END_TEST;
128 }
129
130 int UtcDaliTextFieldNewP(void)
131 {
132   ToolkitTestApplication application;
133   tet_infoline(" UtcDaliToolkitTextFieldNewP");
134   TextField textField = TextField::New();
135   DALI_TEST_CHECK( textField );
136   END_TEST;
137 }
138
139 int UtcDaliTextFieldGetPropertyN(void)
140 {
141   ToolkitTestApplication application;
142   tet_infoline(" UtcDaliToolkitTextFieldGetPropertyN");
143   TextField field = TextField::New();
144   DALI_TEST_CHECK( field );
145
146   bool assert = false;
147   try
148   {
149     Property::Value value = field.GetProperty<bool>( 0 );
150   }
151   catch ( ... )
152   {
153     assert = true;
154   }
155   if ( assert )
156   {
157     tet_result(TET_PASS);
158   }
159   else
160   {
161     tet_result(TET_FAIL);
162   }
163   END_TEST;
164 }
165
166 // Positive test case for a method
167 int UtcDaliTextFieldGetPropertyP(void)
168 {
169   ToolkitTestApplication application;
170   tet_infoline(" UtcDaliToolkitTextFieldGetPropertyP");
171   TextField field = TextField::New();
172   DALI_TEST_CHECK( field );
173
174   // Check Property Indices are correct
175   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_RENDERING_BACKEND ) == TextField::Property::RENDERING_BACKEND );
176   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PLACEHOLDER_TEXT ) == TextField::Property::PLACEHOLDER_TEXT );
177   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_TEXT ) == TextField::Property::TEXT );
178   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_FAMILY ) == TextField::Property::FONT_FAMILY );
179   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_STYLE ) == TextField::Property::FONT_STYLE );
180   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_POINT_SIZE ) == TextField::Property::POINT_SIZE );
181   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_EXCEED_POLICY ) == TextField::Property::EXCEED_POLICY );
182   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PRIMARY_CURSOR_COLOR ) == TextField::Property::PRIMARY_CURSOR_COLOR );
183   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SECONDARY_CURSOR_COLOR ) == TextField::Property::SECONDARY_CURSOR_COLOR );
184   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_ENABLE_CURSOR_BLINK ) == TextField::Property::ENABLE_CURSOR_BLINK );
185   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_INTERVAL ) == TextField::Property::CURSOR_BLINK_INTERVAL );
186   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_DURATION ) == TextField::Property::CURSOR_BLINK_DURATION );
187   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_GRAB_HANDLE_IMAGE ) == TextField::Property::GRAB_HANDLE_IMAGE );
188   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_DECORATION_BOUNDING_BOX ) == TextField::Property::DECORATION_BOUNDING_BOX );
189   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_HORIZONTAL_ALIGNMENT ) == TextField::Property::HORIZONTAL_ALIGNMENT );
190   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_VERTICAL_ALIGNMENT ) == TextField::Property::VERTICAL_ALIGNMENT );
191   END_TEST;
192 }
193
194 // Positive test case for a method
195 int UtcDaliTextFieldSetPropertyP(void)
196 {
197   ToolkitTestApplication application;
198   tet_infoline(" UtcDaliToolkitTextFieldSetPropertyP");
199   TextField field = TextField::New();
200   DALI_TEST_CHECK( field );
201
202   // Check exceed policy
203   field.SetProperty( TextField::Property::EXCEED_POLICY, TextField::EXCEED_POLICY_CLIP );
204   DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::EXCEED_POLICY ), TextField::EXCEED_POLICY_CLIP, TEST_LOCATION );
205
206   // Check cursor properties
207   field.SetProperty( TextField::Property::ENABLE_CURSOR_BLINK, true );
208   DALI_TEST_EQUALS( field.GetProperty<bool>( TextField::Property::ENABLE_CURSOR_BLINK ), true, TEST_LOCATION );
209   field.SetProperty( TextField::Property::PRIMARY_CURSOR_COLOR, Color::RED );
210   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::PRIMARY_CURSOR_COLOR ), Color::RED, TEST_LOCATION );
211   field.SetProperty( TextField::Property::SECONDARY_CURSOR_COLOR, Color::BLUE );
212   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SECONDARY_CURSOR_COLOR ), Color::BLUE, TEST_LOCATION );
213   field.SetProperty( TextField::Property::CURSOR_BLINK_DURATION, 10.0f );
214   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_DURATION ), 10.0f, TEST_LOCATION );
215
216   // Blink interval
217   field.SetProperty( TextField::Property::CURSOR_BLINK_INTERVAL, 1.0f );
218   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_INTERVAL ), 1.0f, TEST_LOCATION );
219
220   // Decoration bounding box
221   field.SetProperty( TextField::Property::DECORATION_BOUNDING_BOX, Rect<int>( 0, 0, 1, 1 ) );
222   DALI_TEST_EQUALS( field.GetProperty<Rect <int > >( TextField::Property::DECORATION_BOUNDING_BOX ), Rect<int>( 0, 0, 1, 1 ), TEST_LOCATION );
223
224   // Check that the Alignment properties can be correctly set
225   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
226   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::HORIZONTAL_ALIGNMENT ), "BEGIN", TEST_LOCATION );
227   field.SetProperty( TextField::Property::VERTICAL_ALIGNMENT, "CENTER" );
228   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::VERTICAL_ALIGNMENT ), "CENTER", TEST_LOCATION );
229
230   // Set text
231   field.SetProperty( TextField::Property::TEXT, "Setting Text" );
232
233   // Set placeholder text (currently not implemented)
234   field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "Setting Text" );
235
236   // Set Grab Handle image
237   field.SetProperty( TextField::Property::GRAB_HANDLE_IMAGE, "" );
238
239   // Check that the MAX_LENGTH property can be correctly set
240   const int maxNumberOfCharacters = 20;
241   field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
242   DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::MAX_LENGTH ), maxNumberOfCharacters, TEST_LOCATION );
243
244   END_TEST;
245 }
246
247 // Negative test case for a method
248 int UtcDaliTextFieldSetPropertyN(void)
249 {
250   ToolkitTestApplication application;
251   tet_infoline(" UtcDaliToolkitTextFieldSetPropertyN");
252   TextField field = TextField::New();
253   DALI_TEST_CHECK( field );
254
255   bool assert = false;
256   try
257   {
258     field.SetProperty( 0, true );
259   }
260   catch ( ... )
261   {
262     assert = true;
263   }
264   if ( assert )
265   {
266     tet_result(TET_PASS);
267   }
268   else
269   {
270     tet_result(TET_FAIL);
271   }
272   END_TEST;
273 }
274
275 // Positive Basic Text Renderer test
276 int utcDaliTextFieldBasicRenderP(void)
277 {
278   ToolkitTestApplication application;
279   tet_infoline("UtcDaliToolkitTextFieldBasicRenderP");
280   TextField field = TextField::New();
281   DALI_TEST_CHECK( field );
282
283   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
284
285   try
286   {
287     // Render some text with the basic backend
288     field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
289     application.SendNotification();
290     application.Render();
291   }
292   catch( ... )
293   {
294     tet_result(TET_FAIL);
295   }
296   END_TEST;
297 }
298
299 // Positive Atlas Text Renderer test
300 int utcDaliTextFieldAtlasRenderP(void)
301 {
302   ToolkitTestApplication application;
303   tet_infoline(" UtcDaliToolkitTextFieldAtlasRenderP");
304   StyleManager styleManager = StyleManager::Get();
305   styleManager.RequestDefaultTheme();
306   TextField field = TextField::New();
307   DALI_TEST_CHECK( field );
308
309   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
310   try
311   {
312     // Render some text with the shared atlas backend
313     field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
314     application.SendNotification();
315     application.Render();
316   }
317   catch( ... )
318   {
319     tet_result(TET_FAIL);
320   }
321   END_TEST;
322 }
323