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