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