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 gTextChangedCallBackCalled;
59 static bool gMaxCharactersCallBackCalled;
61 static void TestTextChangedCallback( TextField control )
63 tet_infoline(" TestTextChangedCallback");
65 gTextChangedCallBackCalled = true;
68 static void TestMaxLengthReachedCallback( TextField control )
70 tet_infoline(" TestMaxLengthReachedCallback");
72 gMaxCharactersCallBackCalled = true;
77 int UtcDaliToolkitTextFieldConstructorP(void)
79 ToolkitTestApplication application;
80 tet_infoline(" UtcDaliToolkitTextFieldConstructorP");
82 DALI_TEST_CHECK( !textField );
86 int UtcDaliToolkitTextFieldNewP(void)
88 ToolkitTestApplication application;
89 tet_infoline(" UtcDaliToolkitTextFieldNewP");
90 TextField textField = TextField::New();
91 DALI_TEST_CHECK( textField );
95 int UtcDaliToolkitTextFieldDownCastP(void)
97 ToolkitTestApplication application;
98 tet_infoline(" UtcDaliToolkitTextFieldDownCastP");
99 TextField textField1 = TextField::New();
100 BaseHandle object( textField1 );
102 TextField textField2 = TextField::DownCast( object );
103 DALI_TEST_CHECK( textField2 );
105 TextField textField3 = DownCast< TextField >( object );
106 DALI_TEST_CHECK( textField3 );
110 int UtcDaliToolkitTextFieldDownCastN(void)
112 ToolkitTestApplication application;
113 tet_infoline(" UtcDaliToolkitTextFieldDownCastN");
114 BaseHandle uninitializedObject;
115 TextField textField1 = TextField::DownCast( uninitializedObject );
116 DALI_TEST_CHECK( !textField1 );
118 TextField textField2 = DownCast< TextField >( uninitializedObject );
119 DALI_TEST_CHECK( !textField2 );
123 int UtcDaliToolkitTextFieldCopyConstructorP(void)
125 ToolkitTestApplication application;
126 tet_infoline(" UtcDaliToolkitTextFieldCopyConstructorP");
127 TextField textField = TextField::New();
128 textField.SetProperty( TextField::Property::TEXT, "Test" );
130 TextField copy( textField );
131 DALI_TEST_CHECK( copy );
132 DALI_TEST_CHECK( copy.GetProperty<std::string>( TextLabel::Property::TEXT ) == textField.GetProperty<std::string>( TextLabel::Property::TEXT ) );
136 int UtcDaliToolkitTextFieldAssignmentOperatorP(void)
138 ToolkitTestApplication application;
139 tet_infoline(" UtcDaliToolkitTextFieldAssignmentOperatorP");
140 TextField textField = TextField::New();
141 textField.SetProperty( TextField::Property::TEXT, "Test" );
143 TextField copy = textField;
144 DALI_TEST_CHECK( copy );
145 DALI_TEST_CHECK( copy.GetProperty<std::string>( TextField::Property::TEXT ) == textField.GetProperty<std::string>( TextField::Property::TEXT ) );
149 int UtcDaliTextFieldNewP(void)
151 ToolkitTestApplication application;
152 tet_infoline(" UtcDaliToolkitTextFieldNewP");
153 TextField textField = TextField::New();
154 DALI_TEST_CHECK( textField );
158 int UtcDaliTextFieldGetPropertyN(void)
160 ToolkitTestApplication application;
161 tet_infoline(" UtcDaliToolkitTextFieldGetPropertyN");
162 TextField field = TextField::New();
163 DALI_TEST_CHECK( field );
168 Property::Value value = field.GetProperty<bool>( 0 );
176 tet_result(TET_PASS);
180 tet_result(TET_FAIL);
185 // Positive test case for a method
186 int UtcDaliTextFieldGetPropertyP(void)
188 ToolkitTestApplication application;
189 tet_infoline(" UtcDaliToolkitTextFieldGetPropertyP");
190 TextField field = TextField::New();
191 DALI_TEST_CHECK( field );
193 // Check Property Indices are correct
194 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_RENDERING_BACKEND ) == TextField::Property::RENDERING_BACKEND );
195 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PLACEHOLDER_TEXT ) == TextField::Property::PLACEHOLDER_TEXT );
196 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_TEXT ) == TextField::Property::TEXT );
197 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_FAMILY ) == TextField::Property::FONT_FAMILY );
198 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_STYLE ) == TextField::Property::FONT_STYLE );
199 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_POINT_SIZE ) == TextField::Property::POINT_SIZE );
200 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_EXCEED_POLICY ) == TextField::Property::EXCEED_POLICY );
201 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PRIMARY_CURSOR_COLOR ) == TextField::Property::PRIMARY_CURSOR_COLOR );
202 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SECONDARY_CURSOR_COLOR ) == TextField::Property::SECONDARY_CURSOR_COLOR );
203 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_ENABLE_CURSOR_BLINK ) == TextField::Property::ENABLE_CURSOR_BLINK );
204 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_INTERVAL ) == TextField::Property::CURSOR_BLINK_INTERVAL );
205 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_DURATION ) == TextField::Property::CURSOR_BLINK_DURATION );
206 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_GRAB_HANDLE_IMAGE ) == TextField::Property::GRAB_HANDLE_IMAGE );
207 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_DECORATION_BOUNDING_BOX ) == TextField::Property::DECORATION_BOUNDING_BOX );
208 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_HORIZONTAL_ALIGNMENT ) == TextField::Property::HORIZONTAL_ALIGNMENT );
209 DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_VERTICAL_ALIGNMENT ) == TextField::Property::VERTICAL_ALIGNMENT );
213 // Positive test case for a method
214 int UtcDaliTextFieldSetPropertyP(void)
216 ToolkitTestApplication application;
217 tet_infoline(" UtcDaliToolkitTextFieldSetPropertyP");
218 TextField field = TextField::New();
219 DALI_TEST_CHECK( field );
221 // Check exceed policy
222 field.SetProperty( TextField::Property::EXCEED_POLICY, TextField::EXCEED_POLICY_CLIP );
223 DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::EXCEED_POLICY ), TextField::EXCEED_POLICY_CLIP, TEST_LOCATION );
225 // Check cursor properties
226 field.SetProperty( TextField::Property::ENABLE_CURSOR_BLINK, true );
227 DALI_TEST_EQUALS( field.GetProperty<bool>( TextField::Property::ENABLE_CURSOR_BLINK ), true, TEST_LOCATION );
228 field.SetProperty( TextField::Property::PRIMARY_CURSOR_COLOR, Color::RED );
229 DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::PRIMARY_CURSOR_COLOR ), Color::RED, TEST_LOCATION );
230 field.SetProperty( TextField::Property::SECONDARY_CURSOR_COLOR, Color::BLUE );
231 DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SECONDARY_CURSOR_COLOR ), Color::BLUE, TEST_LOCATION );
232 field.SetProperty( TextField::Property::CURSOR_BLINK_DURATION, 10.0f );
233 DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_DURATION ), 10.0f, TEST_LOCATION );
236 field.SetProperty( TextField::Property::CURSOR_BLINK_INTERVAL, 1.0f );
237 DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_INTERVAL ), 1.0f, TEST_LOCATION );
239 // Decoration bounding box
240 field.SetProperty( TextField::Property::DECORATION_BOUNDING_BOX, Rect<int>( 0, 0, 1, 1 ) );
241 DALI_TEST_EQUALS( field.GetProperty<Rect <int > >( TextField::Property::DECORATION_BOUNDING_BOX ), Rect<int>( 0, 0, 1, 1 ), TEST_LOCATION );
243 // Check that the Alignment properties can be correctly set
244 field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
245 DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::HORIZONTAL_ALIGNMENT ), "BEGIN", TEST_LOCATION );
246 field.SetProperty( TextField::Property::VERTICAL_ALIGNMENT, "CENTER" );
247 DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::VERTICAL_ALIGNMENT ), "CENTER", TEST_LOCATION );
250 field.SetProperty( TextField::Property::TEXT, "Setting Text" );
252 // Set placeholder text (currently not implemented)
253 field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "Setting Text" );
255 // Set Grab Handle image
256 field.SetProperty( TextField::Property::GRAB_HANDLE_IMAGE, "" );
258 // Check that the MAX_LENGTH property can be correctly set
259 const int maxNumberOfCharacters = 20;
260 field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
261 DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::MAX_LENGTH ), maxNumberOfCharacters, TEST_LOCATION );
266 // Negative test case for a method
267 int UtcDaliTextFieldSetPropertyN(void)
269 ToolkitTestApplication application;
270 tet_infoline(" UtcDaliToolkitTextFieldSetPropertyN");
271 TextField field = TextField::New();
272 DALI_TEST_CHECK( field );
277 field.SetProperty( 0, true );
285 tet_result(TET_PASS);
289 tet_result(TET_FAIL);
294 // Positive Basic Text Renderer test
295 int utcDaliTextFieldBasicRenderP(void)
297 ToolkitTestApplication application;
298 tet_infoline("UtcDaliToolkitTextFieldBasicRenderP");
299 TextField field = TextField::New();
300 DALI_TEST_CHECK( field );
302 field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
306 // Render some text with the basic backend
307 field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
308 application.SendNotification();
309 application.Render();
313 tet_result(TET_FAIL);
318 // Positive Atlas Text Renderer test
319 int utcDaliTextFieldAtlasRenderP(void)
321 ToolkitTestApplication application;
322 tet_infoline(" UtcDaliToolkitTextFieldAtlasRenderP");
323 StyleManager styleManager = StyleManager::Get();
324 styleManager.RequestDefaultTheme();
325 TextField field = TextField::New();
326 DALI_TEST_CHECK( field );
328 field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
331 // Render some text with the shared atlas backend
332 field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
333 application.SendNotification();
334 application.Render();
338 tet_result(TET_FAIL);
343 // Positive test for the text-changed signal.
344 int utcDaliTextFieldTextChangedP(void)
346 ToolkitTestApplication application;
347 tet_infoline(" utcDaliTextFieldTextChangedP");
348 TextField field = TextField::New();
349 DALI_TEST_CHECK( field );
351 Stage::GetCurrent().Add(field);
353 field.TextChangedSignal().Connect(&TestTextChangedCallback);
355 gTextChangedCallBackCalled = false;
356 field.SetProperty( TextField::Property::TEXT, "ABC" );
357 DALI_TEST_CHECK( gTextChangedCallBackCalled );
359 application.SendNotification();
361 field.SetKeyInputFocus();
363 Dali::Integration::KeyEvent keyevent;
364 keyevent.keyName = "D";
365 keyevent.keyString = "D";
366 keyevent.keyCode = 0;
367 keyevent.keyModifier = 0;
369 keyevent.state = Integration::KeyEvent::Down;
371 gTextChangedCallBackCalled = false;
372 application.ProcessEvent( keyevent );
373 DALI_TEST_CHECK( gTextChangedCallBackCalled );
378 // Negative test for the text-changed signal.
379 int utcDaliTextFieldTextChangedN(void)
381 ToolkitTestApplication application;
382 tet_infoline(" utcDaliTextFieldTextChangedN");
383 TextField field = TextField::New();
384 DALI_TEST_CHECK( field );
386 Stage::GetCurrent().Add(field);
388 field.TextChangedSignal().Connect(&TestTextChangedCallback);
390 gTextChangedCallBackCalled = false;
391 field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "ABC" ); // Setting placeholder, not TEXT
392 DALI_TEST_CHECK( ! gTextChangedCallBackCalled );
397 // Positive test for Max Characters reached signal.
398 int utcDaliTextFieldMaxCharactersReachedP(void)
400 ToolkitTestApplication application;
401 tet_infoline(" utcDaliTextFieldMaxCharactersReachedP");
402 TextField field = TextField::New();
403 DALI_TEST_CHECK( field );
405 Stage::GetCurrent().Add(field);
407 const int maxNumberOfCharacters = 1;
408 field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
410 field.SetKeyInputFocus();
412 gMaxCharactersCallBackCalled = false;
413 field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
415 Dali::Integration::KeyEvent keyevent;
416 keyevent.keyName = "a";
417 keyevent.keyString = "a";
418 keyevent.keyCode = 0;
419 keyevent.keyModifier = 0;
421 keyevent.state = Integration::KeyEvent::Down;
423 application.ProcessEvent( keyevent );
425 application.ProcessEvent( keyevent );
427 DALI_TEST_CHECK( gMaxCharactersCallBackCalled );
432 // Negative test for Max Characters reached signal.
433 int utcDaliTextFieldMaxCharactersReachedN(void)
435 ToolkitTestApplication application;
436 tet_infoline(" utcDaliTextFieldMaxCharactersReachedN");
437 TextField field = TextField::New();
438 DALI_TEST_CHECK( field );
440 Stage::GetCurrent().Add(field);
442 const int maxNumberOfCharacters = 3;
443 field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
445 field.SetKeyInputFocus();
447 gMaxCharactersCallBackCalled = false;
448 field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
450 Dali::Integration::KeyEvent keyevent;
451 keyevent.keyName = "a";
452 keyevent.keyString = "a";
453 keyevent.keyCode = 0;
454 keyevent.keyModifier = 0;
456 keyevent.state = Integration::KeyEvent::Down;
458 application.ProcessEvent( keyevent );
459 application.ProcessEvent( keyevent );
461 DALI_TEST_CHECK( !gMaxCharactersCallBackCalled );