2 * Copyright (c) 2014 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.
20 #include <dali/integration-api/events/key-event-integ.h>
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <dali-toolkit/dali-toolkit.h>
23 #include <dali-toolkit/devel-api/styling/style-manager.h>
26 using namespace Toolkit;
28 void dali_textfield_startup(void)
30 test_return_value = TET_UNDEF;
33 void dali_textfield_cleanup(void)
35 test_return_value = TET_PASS;
41 const char* const PROPERTY_NAME_RENDERING_BACKEND = "rendering-backend";
42 const char* const PROPERTY_NAME_PLACEHOLDER_TEXT = "placeholder-text";
43 const char* const PROPERTY_NAME_TEXT = "text";
44 const char* const PROPERTY_NAME_FONT_FAMILY = "font-family";
45 const char* const PROPERTY_NAME_FONT_STYLE = "font-style";
46 const char* const PROPERTY_NAME_POINT_SIZE = "point-size";
47 const char* const PROPERTY_NAME_EXCEED_POLICY = "exceed-policy";
48 const char* const PROPERTY_NAME_PRIMARY_CURSOR_COLOR = "primary-cursor-color";
49 const char* const PROPERTY_NAME_SECONDARY_CURSOR_COLOR = "secondary-cursor-color";
50 const char* const PROPERTY_NAME_ENABLE_CURSOR_BLINK = "enable-cursor-blink";
51 const char* const PROPERTY_NAME_CURSOR_BLINK_INTERVAL = "cursor-blink-interval";
52 const char* const PROPERTY_NAME_CURSOR_BLINK_DURATION = "cursor-blink-duration";
53 const char* const PROPERTY_NAME_GRAB_HANDLE_IMAGE = "grab-handle-image";
54 const char* const PROPERTY_NAME_DECORATION_BOUNDING_BOX = "decoration-bounding-box";
55 const char* const PROPERTY_NAME_HORIZONTAL_ALIGNMENT = "horizontal-alignment";
56 const char* const PROPERTY_NAME_VERTICAL_ALIGNMENT = "vertical-alignment";
58 static bool gMaxCharactersCallBackCalled;
60 static void TestMaxLengthReachedCallback( TextField control )
62 tet_infoline(" TestMaxLengthReachedCallbackCallback");
64 gMaxCharactersCallBackCalled = true;
69 int UtcDaliToolkitTextFieldConstructorP(void)
71 ToolkitTestApplication application;
72 tet_infoline(" UtcDaliToolkitTextFieldConstructorP");
74 DALI_TEST_CHECK( !textField );
78 int UtcDaliToolkitTextFieldNewP(void)
80 ToolkitTestApplication application;
81 tet_infoline(" UtcDaliToolkitTextFieldNewP");
82 TextField textField = TextField::New();
83 DALI_TEST_CHECK( textField );
87 int UtcDaliToolkitTextFieldDownCastP(void)
89 ToolkitTestApplication application;
90 tet_infoline(" UtcDaliToolkitTextFieldDownCastP");
91 TextField textField1 = TextField::New();
92 BaseHandle object( textField1 );
94 TextField textField2 = TextField::DownCast( object );
95 DALI_TEST_CHECK( textField2 );
97 TextField textField3 = DownCast< TextField >( object );
98 DALI_TEST_CHECK( textField3 );
102 int UtcDaliToolkitTextFieldDownCastN(void)
104 ToolkitTestApplication application;
105 tet_infoline(" UtcDaliToolkitTextFieldDownCastN");
106 BaseHandle uninitializedObject;
107 TextField textField1 = TextField::DownCast( uninitializedObject );
108 DALI_TEST_CHECK( !textField1 );
110 TextField textField2 = DownCast< TextField >( uninitializedObject );
111 DALI_TEST_CHECK( !textField2 );
115 int UtcDaliToolkitTextFieldCopyConstructorP(void)
117 ToolkitTestApplication application;
118 tet_infoline(" UtcDaliToolkitTextFieldCopyConstructorP");
119 TextField textField = TextField::New();
120 textField.SetProperty( TextField::Property::TEXT, "Test" );
122 TextField copy( textField );
123 DALI_TEST_CHECK( copy );
124 DALI_TEST_CHECK( copy.GetProperty<std::string>( TextLabel::Property::TEXT ) == textField.GetProperty<std::string>( TextLabel::Property::TEXT ) );
128 int UtcDaliToolkitTextFieldAssignmentOperatorP(void)
130 ToolkitTestApplication application;
131 tet_infoline(" UtcDaliToolkitTextFieldAssignmentOperatorP");
132 TextField textField = TextField::New();
133 textField.SetProperty( TextField::Property::TEXT, "Test" );
135 TextField copy = textField;
136 DALI_TEST_CHECK( copy );
137 DALI_TEST_CHECK( copy.GetProperty<std::string>( TextField::Property::TEXT ) == textField.GetProperty<std::string>( TextField::Property::TEXT ) );
141 int UtcDaliTextFieldNewP(void)
143 ToolkitTestApplication application;
144 tet_infoline(" UtcDaliToolkitTextFieldNewP");
145 TextField textField = TextField::New();
146 DALI_TEST_CHECK( textField );
150 int UtcDaliTextFieldGetPropertyN(void)
152 ToolkitTestApplication application;
153 tet_infoline(" UtcDaliToolkitTextFieldGetPropertyN");
154 TextField field = TextField::New();
155 DALI_TEST_CHECK( field );
160 Property::Value value = field.GetProperty<bool>( 0 );
168 tet_result(TET_PASS);
172 tet_result(TET_FAIL);
177 // Positive test case for a method
178 int UtcDaliTextFieldGetPropertyP(void)
180 ToolkitTestApplication application;
181 tet_infoline(" UtcDaliToolkitTextFieldGetPropertyP");
182 TextField field = TextField::New();
183 DALI_TEST_CHECK( field );
185 // Check Property Indices are correct
186 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_RENDERING_BACKEND ) == TextField::Property::RENDERING_BACKEND );
187 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PLACEHOLDER_TEXT ) == TextField::Property::PLACEHOLDER_TEXT );
188 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_TEXT ) == TextField::Property::TEXT );
189 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_FAMILY ) == TextField::Property::FONT_FAMILY );
190 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_STYLE ) == TextField::Property::FONT_STYLE );
191 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_POINT_SIZE ) == TextField::Property::POINT_SIZE );
192 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_EXCEED_POLICY ) == TextField::Property::EXCEED_POLICY );
193 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PRIMARY_CURSOR_COLOR ) == TextField::Property::PRIMARY_CURSOR_COLOR );
194 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SECONDARY_CURSOR_COLOR ) == TextField::Property::SECONDARY_CURSOR_COLOR );
195 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_ENABLE_CURSOR_BLINK ) == TextField::Property::ENABLE_CURSOR_BLINK );
196 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_INTERVAL ) == TextField::Property::CURSOR_BLINK_INTERVAL );
197 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_DURATION ) == TextField::Property::CURSOR_BLINK_DURATION );
198 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_GRAB_HANDLE_IMAGE ) == TextField::Property::GRAB_HANDLE_IMAGE );
199 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_DECORATION_BOUNDING_BOX ) == TextField::Property::DECORATION_BOUNDING_BOX );
200 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_HORIZONTAL_ALIGNMENT ) == TextField::Property::HORIZONTAL_ALIGNMENT );
201 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_VERTICAL_ALIGNMENT ) == TextField::Property::VERTICAL_ALIGNMENT );
205 // Positive test case for a method
206 int UtcDaliTextFieldSetPropertyP(void)
208 ToolkitTestApplication application;
209 tet_infoline(" UtcDaliToolkitTextFieldSetPropertyP");
210 TextField field = TextField::New();
211 DALI_TEST_CHECK( field );
213 // Check exceed policy
214 field.SetProperty( TextField::Property::EXCEED_POLICY, TextField::EXCEED_POLICY_CLIP );
215 DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::EXCEED_POLICY ), TextField::EXCEED_POLICY_CLIP, TEST_LOCATION );
217 // Check cursor properties
218 field.SetProperty( TextField::Property::ENABLE_CURSOR_BLINK, true );
219 DALI_TEST_EQUALS( field.GetProperty<bool>( TextField::Property::ENABLE_CURSOR_BLINK ), true, TEST_LOCATION );
220 field.SetProperty( TextField::Property::PRIMARY_CURSOR_COLOR, Color::RED );
221 DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::PRIMARY_CURSOR_COLOR ), Color::RED, TEST_LOCATION );
222 field.SetProperty( TextField::Property::SECONDARY_CURSOR_COLOR, Color::BLUE );
223 DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SECONDARY_CURSOR_COLOR ), Color::BLUE, TEST_LOCATION );
224 field.SetProperty( TextField::Property::CURSOR_BLINK_DURATION, 10.0f );
225 DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_DURATION ), 10.0f, TEST_LOCATION );
228 field.SetProperty( TextField::Property::CURSOR_BLINK_INTERVAL, 1.0f );
229 DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_INTERVAL ), 1.0f, TEST_LOCATION );
231 // Decoration bounding box
232 field.SetProperty( TextField::Property::DECORATION_BOUNDING_BOX, Rect<int>( 0, 0, 1, 1 ) );
233 DALI_TEST_EQUALS( field.GetProperty<Rect <int > >( TextField::Property::DECORATION_BOUNDING_BOX ), Rect<int>( 0, 0, 1, 1 ), TEST_LOCATION );
235 // Check that the Alignment properties can be correctly set
236 field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
237 DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::HORIZONTAL_ALIGNMENT ), "BEGIN", TEST_LOCATION );
238 field.SetProperty( TextField::Property::VERTICAL_ALIGNMENT, "CENTER" );
239 DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::VERTICAL_ALIGNMENT ), "CENTER", TEST_LOCATION );
242 field.SetProperty( TextField::Property::TEXT, "Setting Text" );
244 // Set placeholder text (currently not implemented)
245 field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "Setting Text" );
247 // Set Grab Handle image
248 field.SetProperty( TextField::Property::GRAB_HANDLE_IMAGE, "" );
250 // Check that the MAX_LENGTH property can be correctly set
251 const int maxNumberOfCharacters = 20;
252 field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
253 DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::MAX_LENGTH ), maxNumberOfCharacters, TEST_LOCATION );
258 // Negative test case for a method
259 int UtcDaliTextFieldSetPropertyN(void)
261 ToolkitTestApplication application;
262 tet_infoline(" UtcDaliToolkitTextFieldSetPropertyN");
263 TextField field = TextField::New();
264 DALI_TEST_CHECK( field );
269 field.SetProperty( 0, true );
277 tet_result(TET_PASS);
281 tet_result(TET_FAIL);
286 // Positive Basic Text Renderer test
287 int utcDaliTextFieldBasicRenderP(void)
289 ToolkitTestApplication application;
290 tet_infoline("UtcDaliToolkitTextFieldBasicRenderP");
291 TextField field = TextField::New();
292 DALI_TEST_CHECK( field );
294 field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
298 // Render some text with the basic backend
299 field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
300 application.SendNotification();
301 application.Render();
305 tet_result(TET_FAIL);
310 // Positive Atlas Text Renderer test
311 int utcDaliTextFieldAtlasRenderP(void)
313 ToolkitTestApplication application;
314 tet_infoline(" UtcDaliToolkitTextFieldAtlasRenderP");
315 StyleManager styleManager = StyleManager::Get();
316 styleManager.RequestDefaultTheme();
317 TextField field = TextField::New();
318 DALI_TEST_CHECK( field );
320 field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
323 // Render some text with the shared atlas backend
324 field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
325 application.SendNotification();
326 application.Render();
330 tet_result(TET_FAIL);
335 // Positive test for Max Characters reached signal.
336 int utcDaliTextFieldMaxCharactersReachedP(void)
338 ToolkitTestApplication application;
339 tet_infoline(" utcDaliTextFieldMaxCharactersReachedP");
340 TextField field = TextField::New();
341 DALI_TEST_CHECK( field );
343 Stage::GetCurrent().Add(field);
345 const int maxNumberOfCharacters = 1;
346 field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
348 field.SetKeyInputFocus();
350 gMaxCharactersCallBackCalled = false;
351 field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
353 Dali::Integration::KeyEvent keyevent;
354 keyevent.keyName = "a";
355 keyevent.keyString = "a";
356 keyevent.keyCode = 0;
357 keyevent.keyModifier = 0;
359 keyevent.state = Integration::KeyEvent::Down;
361 application.ProcessEvent( keyevent );
363 application.ProcessEvent( keyevent );
365 DALI_TEST_CHECK( gMaxCharactersCallBackCalled );
370 // Negative test for Max Characters reached signal.
371 int utcDaliTextFieldMaxCharactersReachedN(void)
373 ToolkitTestApplication application;
374 tet_infoline(" utcDaliTextFieldMaxCharactersReachedN");
375 TextField field = TextField::New();
376 DALI_TEST_CHECK( field );
378 Stage::GetCurrent().Add(field);
380 const int maxNumberOfCharacters = 3;
381 field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
383 field.SetKeyInputFocus();
385 gMaxCharactersCallBackCalled = false;
386 field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
388 Dali::Integration::KeyEvent keyevent;
389 keyevent.keyName = "a";
390 keyevent.keyString = "a";
391 keyevent.keyCode = 0;
392 keyevent.keyModifier = 0;
394 keyevent.state = Integration::KeyEvent::Down;
396 application.ProcessEvent( keyevent );
397 application.ProcessEvent( keyevent );
399 DALI_TEST_CHECK( !gMaxCharactersCallBackCalled );