TextField MaxLengthReachedSignal Tests added
[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_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";
57
58 static bool gMaxCharactersCallBackCalled;
59
60 static void TestMaxLengthReachedCallback( TextField control )
61 {
62   tet_infoline(" TestMaxLengthReachedCallbackCallback");
63
64   gMaxCharactersCallBackCalled = true;
65 }
66
67 } // namespace
68
69 int UtcDaliToolkitTextFieldConstructorP(void)
70 {
71   ToolkitTestApplication application;
72   tet_infoline(" UtcDaliToolkitTextFieldConstructorP");
73   TextField textField;
74   DALI_TEST_CHECK( !textField );
75   END_TEST;
76 }
77
78 int UtcDaliToolkitTextFieldNewP(void)
79 {
80   ToolkitTestApplication application;
81   tet_infoline(" UtcDaliToolkitTextFieldNewP");
82   TextField textField = TextField::New();
83   DALI_TEST_CHECK( textField );
84   END_TEST;
85 }
86
87 int UtcDaliToolkitTextFieldDownCastP(void)
88 {
89   ToolkitTestApplication application;
90   tet_infoline(" UtcDaliToolkitTextFieldDownCastP");
91   TextField textField1 = TextField::New();
92   BaseHandle object( textField1 );
93
94   TextField textField2 = TextField::DownCast( object );
95   DALI_TEST_CHECK( textField2 );
96
97   TextField textField3 = DownCast< TextField >( object );
98   DALI_TEST_CHECK( textField3 );
99   END_TEST;
100 }
101
102 int UtcDaliToolkitTextFieldDownCastN(void)
103 {
104   ToolkitTestApplication application;
105   tet_infoline(" UtcDaliToolkitTextFieldDownCastN");
106   BaseHandle uninitializedObject;
107   TextField textField1 = TextField::DownCast( uninitializedObject );
108   DALI_TEST_CHECK( !textField1 );
109
110   TextField textField2 = DownCast< TextField >( uninitializedObject );
111   DALI_TEST_CHECK( !textField2 );
112   END_TEST;
113 }
114
115 int UtcDaliToolkitTextFieldCopyConstructorP(void)
116 {
117   ToolkitTestApplication application;
118   tet_infoline(" UtcDaliToolkitTextFieldCopyConstructorP");
119   TextField textField = TextField::New();
120   textField.SetProperty( TextField::Property::TEXT, "Test" );
121
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 ) );
125   END_TEST;
126 }
127
128 int UtcDaliToolkitTextFieldAssignmentOperatorP(void)
129 {
130   ToolkitTestApplication application;
131   tet_infoline(" UtcDaliToolkitTextFieldAssignmentOperatorP");
132   TextField textField = TextField::New();
133   textField.SetProperty( TextField::Property::TEXT, "Test" );
134
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 ) );
138   END_TEST;
139 }
140
141 int UtcDaliTextFieldNewP(void)
142 {
143   ToolkitTestApplication application;
144   tet_infoline(" UtcDaliToolkitTextFieldNewP");
145   TextField textField = TextField::New();
146   DALI_TEST_CHECK( textField );
147   END_TEST;
148 }
149
150 int UtcDaliTextFieldGetPropertyN(void)
151 {
152   ToolkitTestApplication application;
153   tet_infoline(" UtcDaliToolkitTextFieldGetPropertyN");
154   TextField field = TextField::New();
155   DALI_TEST_CHECK( field );
156
157   bool assert = false;
158   try
159   {
160     Property::Value value = field.GetProperty<bool>( 0 );
161   }
162   catch ( ... )
163   {
164     assert = true;
165   }
166   if ( assert )
167   {
168     tet_result(TET_PASS);
169   }
170   else
171   {
172     tet_result(TET_FAIL);
173   }
174   END_TEST;
175 }
176
177 // Positive test case for a method
178 int UtcDaliTextFieldGetPropertyP(void)
179 {
180   ToolkitTestApplication application;
181   tet_infoline(" UtcDaliToolkitTextFieldGetPropertyP");
182   TextField field = TextField::New();
183   DALI_TEST_CHECK( field );
184
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 );
202   END_TEST;
203 }
204
205 // Positive test case for a method
206 int UtcDaliTextFieldSetPropertyP(void)
207 {
208   ToolkitTestApplication application;
209   tet_infoline(" UtcDaliToolkitTextFieldSetPropertyP");
210   TextField field = TextField::New();
211   DALI_TEST_CHECK( field );
212
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 );
216
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 );
226
227   // Blink interval
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 );
230
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 );
234
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 );
240
241   // Set text
242   field.SetProperty( TextField::Property::TEXT, "Setting Text" );
243
244   // Set placeholder text (currently not implemented)
245   field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "Setting Text" );
246
247   // Set Grab Handle image
248   field.SetProperty( TextField::Property::GRAB_HANDLE_IMAGE, "" );
249
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 );
254
255   END_TEST;
256 }
257
258 // Negative test case for a method
259 int UtcDaliTextFieldSetPropertyN(void)
260 {
261   ToolkitTestApplication application;
262   tet_infoline(" UtcDaliToolkitTextFieldSetPropertyN");
263   TextField field = TextField::New();
264   DALI_TEST_CHECK( field );
265
266   bool assert = false;
267   try
268   {
269     field.SetProperty( 0, true );
270   }
271   catch ( ... )
272   {
273     assert = true;
274   }
275   if ( assert )
276   {
277     tet_result(TET_PASS);
278   }
279   else
280   {
281     tet_result(TET_FAIL);
282   }
283   END_TEST;
284 }
285
286 // Positive Basic Text Renderer test
287 int utcDaliTextFieldBasicRenderP(void)
288 {
289   ToolkitTestApplication application;
290   tet_infoline("UtcDaliToolkitTextFieldBasicRenderP");
291   TextField field = TextField::New();
292   DALI_TEST_CHECK( field );
293
294   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
295
296   try
297   {
298     // Render some text with the basic backend
299     field.SetProperty( TextField::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
300     application.SendNotification();
301     application.Render();
302   }
303   catch( ... )
304   {
305     tet_result(TET_FAIL);
306   }
307   END_TEST;
308 }
309
310 // Positive Atlas Text Renderer test
311 int utcDaliTextFieldAtlasRenderP(void)
312 {
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 );
319
320   field.SetProperty( TextField::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
321   try
322   {
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();
327   }
328   catch( ... )
329   {
330     tet_result(TET_FAIL);
331   }
332   END_TEST;
333 }
334
335 // Positive test for Max Characters reached signal.
336 int utcDaliTextFieldMaxCharactersReachedP(void)
337 {
338   ToolkitTestApplication application;
339   tet_infoline(" utcDaliTextFieldMaxCharactersReachedP");
340   TextField field = TextField::New();
341   DALI_TEST_CHECK( field );
342
343   Stage::GetCurrent().Add(field);
344
345   const int maxNumberOfCharacters = 1;
346   field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
347
348   field.SetKeyInputFocus();
349
350   gMaxCharactersCallBackCalled = false;
351   field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
352
353   Dali::Integration::KeyEvent keyevent;
354   keyevent.keyName = "a";
355   keyevent.keyString = "a";
356   keyevent.keyCode = 0;
357   keyevent.keyModifier = 0;
358   keyevent.time = 0;
359   keyevent.state = Integration::KeyEvent::Down;
360
361   application.ProcessEvent( keyevent );
362
363   application.ProcessEvent( keyevent );
364
365   DALI_TEST_CHECK( gMaxCharactersCallBackCalled );
366
367   END_TEST;
368 }
369
370 // Negative test for Max Characters reached signal.
371 int utcDaliTextFieldMaxCharactersReachedN(void)
372 {
373   ToolkitTestApplication application;
374   tet_infoline(" utcDaliTextFieldMaxCharactersReachedN");
375   TextField field = TextField::New();
376   DALI_TEST_CHECK( field );
377
378   Stage::GetCurrent().Add(field);
379
380   const int maxNumberOfCharacters = 3;
381   field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters );
382
383   field.SetKeyInputFocus();
384
385   gMaxCharactersCallBackCalled = false;
386   field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
387
388   Dali::Integration::KeyEvent keyevent;
389   keyevent.keyName = "a";
390   keyevent.keyString = "a";
391   keyevent.keyCode = 0;
392   keyevent.keyModifier = 0;
393   keyevent.time = 0;
394   keyevent.state = Integration::KeyEvent::Down;
395
396   application.ProcessEvent( keyevent );
397   application.ProcessEvent( keyevent );
398
399   DALI_TEST_CHECK( !gMaxCharactersCallBackCalled );
400
401   END_TEST;
402 }