Merge "TextContoller Copy and Cut buttons functional" into devel/master
[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/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>
24
25 using namespace Dali;
26 using namespace Toolkit;
27
28 void dali_textfield_startup(void)
29 {
30   test_return_value = TET_UNDEF;
31 }
32
33 void dali_textfield_cleanup(void)
34 {
35   test_return_value = TET_PASS;
36 }
37
38 namespace
39 {
40
41 const char* const PROPERTY_NAME_RENDERING_BACKEND                    = "rendering-backend";
42 const char* const PROPERTY_NAME_TEXT                                 = "text";
43 const char* const PROPERTY_NAME_PLACEHOLDER_TEXT                     = "placeholder-text";
44 const char* const PROPERTY_NAME_PLACEHOLDER_TEXT_FOCUSED             = "placeholder-text-focused";
45 const char* const PROPERTY_NAME_FONT_FAMILY                          = "font-family";
46 const char* const PROPERTY_NAME_FONT_STYLE                           = "font-style";
47 const char* const PROPERTY_NAME_POINT_SIZE                           = "point-size";
48 const char* const PROPERTY_NAME_MAX_LENGTH                           = "max-length";
49 const char* const PROPERTY_NAME_EXCEED_POLICY                        = "exceed-policy";
50 const char* const PROPERTY_NAME_HORIZONTAL_ALIGNMENT                 = "horizontal-alignment";
51 const char* const PROPERTY_NAME_VERTICAL_ALIGNMENT                   = "vertical-alignment";
52 const char* const PROPERTY_NAME_TEXT_COLOR                           = "text-color";
53 const char* const PROPERTY_NAME_PLACEHOLDER_TEXT_COLOR               = "placeholder-text-color";
54 const char* const PROPERTY_NAME_SHADOW_OFFSET                        = "shadow-offset";
55 const char* const PROPERTY_NAME_SHADOW_COLOR                         = "shadow-color";
56 const char* const PROPERTY_NAME_PRIMARY_CURSOR_COLOR                 = "primary-cursor-color";
57 const char* const PROPERTY_NAME_SECONDARY_CURSOR_COLOR               = "secondary-cursor-color";
58 const char* const PROPERTY_NAME_ENABLE_CURSOR_BLINK                  = "enable-cursor-blink";
59 const char* const PROPERTY_NAME_CURSOR_BLINK_INTERVAL                = "cursor-blink-interval";
60 const char* const PROPERTY_NAME_CURSOR_BLINK_DURATION                = "cursor-blink-duration";
61 const char* const PROPERTY_NAME_GRAB_HANDLE_IMAGE                    = "grab-handle-image";
62 const char* const PROPERTY_NAME_GRAB_HANDLE_PRESSED_IMAGE            = "grab-handle-pressed-image";
63 const char* const PROPERTY_NAME_SCROLL_THRESHOLD                     = "scroll-threshold";
64 const char* const PROPERTY_NAME_SCROLL_SPEED                         = "scroll-speed";
65 const char* const PROPERTY_NAME_SELECTION_HANDLE_IMAGE_LEFT          = "selection-handle-image-left";
66 const char* const PROPERTY_NAME_SELECTION_HANDLE_IMAGE_RIGHT         = "selection-handle-image-right";
67 const char* const PROPERTY_NAME_SELECTION_HANDLE_PRESSED_IMAGE_LEFT  = "selection-handle-pressed-image-left";
68 const char* const PROPERTY_NAME_SELECTION_HANDLE_PRESSED_IMAGE_RIGHT = "selection-handle-pressed-image-right";
69 const char* const PROPERTY_NAME_SELECTION_HIGHLIGHT_COLOR            = "selection-highlight-color";
70 const char* const PROPERTY_NAME_DECORATION_BOUNDING_BOX              = "decoration-bounding-box";
71 const char* const PROPERTY_NAME_INPUT_METHOD_SETTINGS                = "input-method-settings";
72
73 const unsigned int DEFAULT_RENDERING_BACKEND = Dali::Toolkit::Text::DEFAULT_RENDERING_BACKEND;
74
75 const Vector4 PLACEHOLDER_TEXT_COLOR( 0.8f, 0.8f, 0.8f, 0.8f );
76 const Dali::Vector4 LIGHT_BLUE( (0xb2 / 255.0f), (0xeb / 255.0f), (0xf2 / 255.0f), 0.5f ); // The text highlight color.
77
78 const unsigned int CURSOR_BLINK_INTERVAL = 500u; // Cursor blink interval
79 const float TO_MILLISECONDS = 1000.f;
80 const float TO_SECONDS = 1.f / TO_MILLISECONDS;
81
82 const float SCROLL_THRESHOLD = 10.f;
83 const float SCROLL_SPEED = 300.f;
84
85 static bool gTextChangedCallBackCalled;
86 static bool gMaxCharactersCallBackCalled;
87
88 static void TestTextChangedCallback( TextField control )
89 {
90   tet_infoline(" TestTextChangedCallback");
91
92   gTextChangedCallBackCalled = true;
93 }
94
95 static void TestMaxLengthReachedCallback( TextField control )
96 {
97   tet_infoline(" TestMaxLengthReachedCallback");
98
99   gMaxCharactersCallBackCalled = true;
100 }
101
102 } // namespace
103
104 int UtcDaliToolkitTextFieldConstructorP(void)
105 {
106   ToolkitTestApplication application;
107   tet_infoline(" UtcDaliToolkitTextFieldConstructorP");
108   TextField textField;
109   DALI_TEST_CHECK( !textField );
110   END_TEST;
111 }
112
113 int UtcDaliToolkitTextFieldNewP(void)
114 {
115   ToolkitTestApplication application;
116   tet_infoline(" UtcDaliToolkitTextFieldNewP");
117   TextField textField = TextField::New();
118   DALI_TEST_CHECK( textField );
119   END_TEST;
120 }
121
122 int UtcDaliToolkitTextFieldDownCastP(void)
123 {
124   ToolkitTestApplication application;
125   tet_infoline(" UtcDaliToolkitTextFieldDownCastP");
126   TextField textField1 = TextField::New();
127   BaseHandle object( textField1 );
128
129   TextField textField2 = TextField::DownCast( object );
130   DALI_TEST_CHECK( textField2 );
131
132   TextField textField3 = DownCast< TextField >( object );
133   DALI_TEST_CHECK( textField3 );
134   END_TEST;
135 }
136
137 int UtcDaliToolkitTextFieldDownCastN(void)
138 {
139   ToolkitTestApplication application;
140   tet_infoline(" UtcDaliToolkitTextFieldDownCastN");
141   BaseHandle uninitializedObject;
142   TextField textField1 = TextField::DownCast( uninitializedObject );
143   DALI_TEST_CHECK( !textField1 );
144
145   TextField textField2 = DownCast< TextField >( uninitializedObject );
146   DALI_TEST_CHECK( !textField2 );
147   END_TEST;
148 }
149
150 int UtcDaliToolkitTextFieldCopyConstructorP(void)
151 {
152   ToolkitTestApplication application;
153   tet_infoline(" UtcDaliToolkitTextFieldCopyConstructorP");
154   TextField textField = TextField::New();
155   textField.SetProperty( TextField::Property::TEXT, "Test" );
156
157   TextField copy( textField );
158   DALI_TEST_CHECK( copy );
159   DALI_TEST_CHECK( copy.GetProperty<std::string>( TextLabel::Property::TEXT ) == textField.GetProperty<std::string>( TextLabel::Property::TEXT ) );
160   END_TEST;
161 }
162
163 int UtcDaliToolkitTextFieldAssignmentOperatorP(void)
164 {
165   ToolkitTestApplication application;
166   tet_infoline(" UtcDaliToolkitTextFieldAssignmentOperatorP");
167   TextField textField = TextField::New();
168   textField.SetProperty( TextField::Property::TEXT, "Test" );
169
170   TextField copy = textField;
171   DALI_TEST_CHECK( copy );
172   DALI_TEST_CHECK( copy.GetProperty<std::string>( TextField::Property::TEXT ) == textField.GetProperty<std::string>( TextField::Property::TEXT ) );
173   END_TEST;
174 }
175
176 int UtcDaliTextFieldNewP(void)
177 {
178   ToolkitTestApplication application;
179   tet_infoline(" UtcDaliToolkitTextFieldNewP");
180   TextField textField = TextField::New();
181   DALI_TEST_CHECK( textField );
182   END_TEST;
183 }
184
185 // Positive test case for a method
186 int UtcDaliTextFieldGetPropertyP(void)
187 {
188   ToolkitTestApplication application;
189   tet_infoline(" UtcDaliToolkitTextFieldGetPropertyP");
190   TextField field = TextField::New();
191   DALI_TEST_CHECK( field );
192
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_TEXT ) == TextField::Property::TEXT );
196   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PLACEHOLDER_TEXT ) == TextField::Property::PLACEHOLDER_TEXT );
197   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PLACEHOLDER_TEXT_FOCUSED ) == TextField::Property::PLACEHOLDER_TEXT_FOCUSED );
198   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_FAMILY ) == TextField::Property::FONT_FAMILY );
199   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_FONT_STYLE ) == TextField::Property::FONT_STYLE );
200   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_POINT_SIZE ) == TextField::Property::POINT_SIZE );
201   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_MAX_LENGTH ) == TextField::Property::MAX_LENGTH );
202   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_EXCEED_POLICY ) == TextField::Property::EXCEED_POLICY );
203   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_HORIZONTAL_ALIGNMENT ) == TextField::Property::HORIZONTAL_ALIGNMENT );
204   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_VERTICAL_ALIGNMENT ) == TextField::Property::VERTICAL_ALIGNMENT );
205   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_TEXT_COLOR ) == TextField::Property::TEXT_COLOR );
206   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PLACEHOLDER_TEXT_COLOR ) == TextField::Property::PLACEHOLDER_TEXT_COLOR );
207   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SHADOW_OFFSET ) == TextField::Property::SHADOW_OFFSET );
208   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SHADOW_COLOR ) == TextField::Property::SHADOW_COLOR );
209   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_PRIMARY_CURSOR_COLOR ) == TextField::Property::PRIMARY_CURSOR_COLOR );
210   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SECONDARY_CURSOR_COLOR ) == TextField::Property::SECONDARY_CURSOR_COLOR );
211   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_ENABLE_CURSOR_BLINK ) == TextField::Property::ENABLE_CURSOR_BLINK );
212   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_INTERVAL ) == TextField::Property::CURSOR_BLINK_INTERVAL );
213   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_CURSOR_BLINK_DURATION ) == TextField::Property::CURSOR_BLINK_DURATION );
214   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_GRAB_HANDLE_IMAGE ) == TextField::Property::GRAB_HANDLE_IMAGE );
215   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_GRAB_HANDLE_PRESSED_IMAGE ) == TextField::Property::GRAB_HANDLE_PRESSED_IMAGE );
216   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SCROLL_THRESHOLD ) == TextField::Property::SCROLL_THRESHOLD );
217   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SCROLL_SPEED ) == TextField::Property::SCROLL_SPEED );
218   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SELECTION_HANDLE_IMAGE_LEFT ) == TextField::Property::SELECTION_HANDLE_IMAGE_LEFT );
219   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SELECTION_HANDLE_IMAGE_RIGHT ) == TextField::Property::SELECTION_HANDLE_IMAGE_RIGHT );
220   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SELECTION_HANDLE_PRESSED_IMAGE_LEFT ) == TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_LEFT );
221   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SELECTION_HANDLE_PRESSED_IMAGE_RIGHT ) == TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT );
222   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_SELECTION_HIGHLIGHT_COLOR ) == TextField::Property::SELECTION_HIGHLIGHT_COLOR );
223   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_DECORATION_BOUNDING_BOX ) == TextField::Property::DECORATION_BOUNDING_BOX );
224   DALI_TEST_CHECK( field.GetPropertyIndex( PROPERTY_NAME_INPUT_METHOD_SETTINGS ) == TextField::Property::INPUT_METHOD_SETTINGS );
225   END_TEST;
226 }
227
228 // Positive test case for a method
229 int UtcDaliTextFieldSetPropertyP(void)
230 {
231   ToolkitTestApplication application;
232   tet_infoline(" UtcDaliToolkitTextFieldSetPropertyP");
233   TextField field = TextField::New();
234   DALI_TEST_CHECK( field );
235
236   // Check defaults.
237   DALI_TEST_EQUALS( field.GetProperty<unsigned int>( TextField::Property::RENDERING_BACKEND ), DEFAULT_RENDERING_BACKEND, TEST_LOCATION );
238   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::TEXT ), std::string(""), TEST_LOCATION );
239   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::PLACEHOLDER_TEXT ), std::string(""), TEST_LOCATION );
240   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::PLACEHOLDER_TEXT_FOCUSED ), std::string(""), TEST_LOCATION );
241   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::FONT_FAMILY ), std::string(""), TEST_LOCATION );
242   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::FONT_STYLE ), std::string(""), TEST_LOCATION );
243   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::POINT_SIZE ), 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
244   DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::MAX_LENGTH ), 50u, TEST_LOCATION );
245   DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::EXCEED_POLICY ), TextField::EXCEED_POLICY_CLIP, TEST_LOCATION );
246   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::HORIZONTAL_ALIGNMENT ), "BEGIN", TEST_LOCATION );
247   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::VERTICAL_ALIGNMENT ), "TOP", TEST_LOCATION );
248   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::TEXT_COLOR ), Color::BLACK, TEST_LOCATION );
249   DALI_TEST_EQUALS( field.GetProperty<Vector2>( TextField::Property::SHADOW_OFFSET ), Vector2::ZERO, TEST_LOCATION );
250   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::PLACEHOLDER_TEXT_COLOR ), PLACEHOLDER_TEXT_COLOR, TEST_LOCATION );
251   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SHADOW_COLOR ), Color::BLACK, TEST_LOCATION );
252   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::PRIMARY_CURSOR_COLOR ), Color::BLACK, TEST_LOCATION );
253   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SECONDARY_CURSOR_COLOR ), Color::BLACK, TEST_LOCATION );
254   DALI_TEST_EQUALS( field.GetProperty<bool>( TextField::Property::ENABLE_CURSOR_BLINK ), true, TEST_LOCATION );
255   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_INTERVAL ), CURSOR_BLINK_INTERVAL * TO_SECONDS, TEST_LOCATION );
256   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_DURATION ), 0.f, TEST_LOCATION );
257   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::SCROLL_THRESHOLD ), SCROLL_THRESHOLD, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
258   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::SCROLL_SPEED ), SCROLL_SPEED, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
259   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SELECTION_HIGHLIGHT_COLOR ), LIGHT_BLUE, TEST_LOCATION );
260
261   // Check the render backend property.
262   field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
263   DALI_TEST_EQUALS( field.GetProperty<unsigned int>( TextField::Property::RENDERING_BACKEND ), Text::RENDERING_BASIC, TEST_LOCATION );
264
265   // Check text property.
266   field.SetProperty( TextField::Property::TEXT, "Setting Text" );
267   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::TEXT ), std::string("Setting Text"), TEST_LOCATION );
268
269   // Check placeholder text properties.
270   field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "Setting Placeholder Text" );
271   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::PLACEHOLDER_TEXT ), std::string("Setting Placeholder Text"), TEST_LOCATION );
272
273   field.SetProperty( TextField::Property::PLACEHOLDER_TEXT_FOCUSED, "Setting Placeholder Text Focused" );
274   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::PLACEHOLDER_TEXT_FOCUSED ), std::string("Setting Placeholder Text Focused"), TEST_LOCATION );
275
276   // Check font properties.
277   field.SetProperty( TextField::Property::FONT_FAMILY, "Setting font family" );
278   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::FONT_FAMILY ), std::string("Setting font family"), TEST_LOCATION );
279   field.SetProperty( TextField::Property::FONT_STYLE, "Setting font style" );
280   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::FONT_STYLE ), std::string("Setting font style"), TEST_LOCATION );
281   field.SetProperty( TextField::Property::POINT_SIZE, 10.f );
282   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::POINT_SIZE ), 10.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
283
284   // Check that the MAX_LENGTH property can be correctly set
285   const int maxNumberOfCharacters = 20;
286   field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
287   DALI_TEST_EQUALS( field.GetProperty<int>( TextField::Property::MAX_LENGTH ), maxNumberOfCharacters, TEST_LOCATION );
288
289   // Check exceed policy
290   // Set a different exceed policy is not implemented.
291
292   // Check that the Alignment properties can be correctly set
293   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "END" );
294   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::HORIZONTAL_ALIGNMENT ), "END", TEST_LOCATION );
295   field.SetProperty( TextField::Property::VERTICAL_ALIGNMENT, "CENTER" );
296   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::VERTICAL_ALIGNMENT ), "CENTER", TEST_LOCATION );
297
298   // Check text's color property
299   field.SetProperty( TextField::Property::TEXT_COLOR, Color::WHITE );
300   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::TEXT_COLOR ), Color::WHITE, TEST_LOCATION );
301
302   // Check placeholder text's color property.
303   field.SetProperty( TextField::Property::PLACEHOLDER_TEXT_COLOR, Color::RED );
304   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::PLACEHOLDER_TEXT_COLOR ), Color::RED, TEST_LOCATION );
305
306   // Check shadow properties.
307   field.SetProperty( TextField::Property::SHADOW_OFFSET, Vector2( 1.f, 1.f ) );
308   DALI_TEST_EQUALS( field.GetProperty<Vector2>( TextField::Property::SHADOW_OFFSET ), Vector2( 1.f, 1.f ), TEST_LOCATION );
309   field.SetProperty( TextField::Property::SHADOW_COLOR, Color::GREEN );
310   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SHADOW_COLOR ), Color::GREEN, TEST_LOCATION );
311
312   // Check cursor properties
313   field.SetProperty( TextField::Property::PRIMARY_CURSOR_COLOR, Color::RED );
314   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::PRIMARY_CURSOR_COLOR ), Color::RED, TEST_LOCATION );
315   field.SetProperty( TextField::Property::SECONDARY_CURSOR_COLOR, Color::BLUE );
316   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SECONDARY_CURSOR_COLOR ), Color::BLUE, TEST_LOCATION );
317
318   field.SetProperty( TextField::Property::ENABLE_CURSOR_BLINK, false );
319   DALI_TEST_EQUALS( field.GetProperty<bool>( TextField::Property::ENABLE_CURSOR_BLINK ), false, TEST_LOCATION );
320   field.SetProperty( TextField::Property::CURSOR_BLINK_INTERVAL, 1.f );
321   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_INTERVAL ), 1.f, TEST_LOCATION );
322   field.SetProperty( TextField::Property::CURSOR_BLINK_DURATION, 10.f );
323   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::CURSOR_BLINK_DURATION ), 10.f, TEST_LOCATION );
324
325   // Check scroll properties.
326   field.SetProperty( TextField::Property::SCROLL_THRESHOLD, 1.f );
327   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::SCROLL_THRESHOLD ), 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
328   field.SetProperty( TextField::Property::SCROLL_SPEED, 100.f );
329   DALI_TEST_EQUALS( field.GetProperty<float>( TextField::Property::SCROLL_SPEED ), 100.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
330
331   // Check handle images
332   field.SetProperty( TextField::Property::GRAB_HANDLE_IMAGE, "image1" );
333   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::GRAB_HANDLE_IMAGE ), "image1", TEST_LOCATION );
334   field.SetProperty( TextField::Property::GRAB_HANDLE_PRESSED_IMAGE, "image2" );
335   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::GRAB_HANDLE_PRESSED_IMAGE ), "image2", TEST_LOCATION );
336   field.SetProperty( TextField::Property::SELECTION_HANDLE_IMAGE_LEFT, "image3" );
337   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::SELECTION_HANDLE_IMAGE_LEFT ), "image3", TEST_LOCATION );
338   field.SetProperty( TextField::Property::SELECTION_HANDLE_IMAGE_RIGHT, "image4" );
339   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::SELECTION_HANDLE_IMAGE_RIGHT ), "image4", TEST_LOCATION );
340   field.SetProperty( TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_LEFT, "image5" );
341   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_LEFT ), "image5", TEST_LOCATION );
342   field.SetProperty( TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT, "image6" );
343   DALI_TEST_EQUALS( field.GetProperty<std::string>( TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT ), "image6", TEST_LOCATION );
344
345   // Check the highlight color
346   field.SetProperty( TextField::Property::SELECTION_HIGHLIGHT_COLOR, Color::GREEN );
347   DALI_TEST_EQUALS( field.GetProperty<Vector4>( TextField::Property::SELECTION_HIGHLIGHT_COLOR ), Color::GREEN, TEST_LOCATION );
348
349   // Decoration bounding box
350   field.SetProperty( TextField::Property::DECORATION_BOUNDING_BOX, Rect<int>( 0, 0, 1, 1 ) );
351   DALI_TEST_EQUALS( field.GetProperty<Rect <int > >( TextField::Property::DECORATION_BOUNDING_BOX ), Rect<int>( 0, 0, 1, 1 ), TEST_LOCATION );
352
353   END_TEST;
354 }
355
356 // Positive Basic Text Renderer test
357 int utcDaliTextFieldBasicRenderP(void)
358 {
359   ToolkitTestApplication application;
360   tet_infoline("UtcDaliToolkitTextFieldBasicRenderP");
361   TextField field = TextField::New();
362   DALI_TEST_CHECK( field );
363
364   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
365
366   try
367   {
368     // Render some text with the basic backend
369     field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
370     application.SendNotification();
371     application.Render();
372   }
373   catch( ... )
374   {
375     tet_result(TET_FAIL);
376   }
377   END_TEST;
378 }
379
380 // Positive Atlas Text Renderer test
381 int utcDaliTextFieldAtlasRenderP(void)
382 {
383   ToolkitTestApplication application;
384   tet_infoline(" UtcDaliToolkitTextFieldAtlasRenderP");
385   StyleManager styleManager = StyleManager::Get();
386   styleManager.RequestDefaultTheme();
387   TextField field = TextField::New();
388   DALI_TEST_CHECK( field );
389
390   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
391   try
392   {
393     // Render some text with the shared atlas backend
394     field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
395     application.SendNotification();
396     application.Render();
397   }
398   catch( ... )
399   {
400     tet_result(TET_FAIL);
401   }
402   END_TEST;
403 }
404
405 // Positive test for the text-changed signal.
406 int utcDaliTextFieldTextChangedP(void)
407 {
408   ToolkitTestApplication application;
409   tet_infoline(" utcDaliTextFieldTextChangedP");
410   TextField field = TextField::New();
411   DALI_TEST_CHECK( field );
412
413   Stage::GetCurrent().Add( field );
414
415   field.TextChangedSignal().Connect(&TestTextChangedCallback);
416
417   gTextChangedCallBackCalled = false;
418   field.SetProperty( TextField::Property::TEXT, "ABC" );
419   DALI_TEST_CHECK( gTextChangedCallBackCalled );
420
421   application.SendNotification();
422
423   field.SetKeyInputFocus();
424
425   Dali::Integration::KeyEvent keyevent;
426   keyevent.keyName = "D";
427   keyevent.keyString = "D";
428   keyevent.keyCode = 0;
429   keyevent.keyModifier = 0;
430   keyevent.time = 0;
431   keyevent.state = Integration::KeyEvent::Down;
432
433   gTextChangedCallBackCalled = false;
434   application.ProcessEvent( keyevent );
435   DALI_TEST_CHECK( gTextChangedCallBackCalled );
436
437   END_TEST;
438 }
439
440 // Negative test for the text-changed signal.
441 int utcDaliTextFieldTextChangedN(void)
442 {
443   ToolkitTestApplication application;
444   tet_infoline(" utcDaliTextFieldTextChangedN");
445   TextField field = TextField::New();
446   DALI_TEST_CHECK( field );
447
448   Stage::GetCurrent().Add( field );
449
450   field.TextChangedSignal().Connect(&TestTextChangedCallback);
451
452   gTextChangedCallBackCalled = false;
453   field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "ABC" ); // Setting placeholder, not TEXT
454   DALI_TEST_CHECK( !gTextChangedCallBackCalled );
455
456   END_TEST;
457 }
458
459 // Positive test for Max Characters reached signal.
460 int utcDaliTextFieldMaxCharactersReachedP(void)
461 {
462   ToolkitTestApplication application;
463   tet_infoline(" utcDaliTextFieldMaxCharactersReachedP");
464   TextField field = TextField::New();
465   DALI_TEST_CHECK( field );
466
467   Stage::GetCurrent().Add( field );
468
469   const int maxNumberOfCharacters = 1;
470   field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
471
472   field.SetKeyInputFocus();
473
474   gMaxCharactersCallBackCalled = false;
475   field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
476
477   Dali::Integration::KeyEvent keyevent;
478   keyevent.keyName = "a";
479   keyevent.keyString = "a";
480   keyevent.keyCode = 0;
481   keyevent.keyModifier = 0;
482   keyevent.time = 0;
483   keyevent.state = Integration::KeyEvent::Down;
484
485   application.ProcessEvent( keyevent );
486
487   application.ProcessEvent( keyevent );
488
489   DALI_TEST_CHECK( gMaxCharactersCallBackCalled );
490
491   END_TEST;
492 }
493
494 // Negative test for Max Characters reached signal.
495 int utcDaliTextFieldMaxCharactersReachedN(void)
496 {
497   ToolkitTestApplication application;
498   tet_infoline(" utcDaliTextFieldMaxCharactersReachedN");
499   TextField field = TextField::New();
500   DALI_TEST_CHECK( field );
501
502   Stage::GetCurrent().Add( field );
503
504   const int maxNumberOfCharacters = 3;
505   field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
506
507   field.SetKeyInputFocus();
508
509   gMaxCharactersCallBackCalled = false;
510   field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
511
512   Dali::Integration::KeyEvent keyevent;
513   keyevent.keyName = "a";
514   keyevent.keyString = "a";
515   keyevent.keyCode = 0;
516   keyevent.keyModifier = 0;
517   keyevent.time = 0;
518   keyevent.state = Integration::KeyEvent::Down;
519
520   application.ProcessEvent( keyevent );
521   application.ProcessEvent( keyevent );
522
523   DALI_TEST_CHECK( !gMaxCharactersCallBackCalled );
524
525   END_TEST;
526 }