Merged with Tizen Branch ( builds )
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-TextLabel.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_textlabel_startup(void)
27 {
28   test_return_value = TET_UNDEF;
29 }
30
31 void dali_textlabel_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_TEXT = "text";
41 const char* const PROPERTY_NAME_FONT_FAMILY = "font-family";
42 const char* const PROPERTY_NAME_FONT_STYLE = "font-style";
43 const char* const PROPERTY_NAME_POINT_SIZE = "point-size";
44 const char* const PROPERTY_NAME_MULTI_LINE =  "multi-line";
45 const char* const PROPERTY_NAME_HORIZONTAL_ALIGNMENT = "horizontal-alignment";
46 const char* const PROPERTY_NAME_VERTICAL_ALIGNMENT = "vertical-alignment";
47 const char* const PROPERTY_NAME_TEXT_COLOR = "text-color";
48 const char* const PROPERTY_NAME_SHADOW_OFFSET = "shadow-offset";
49 const char* const PROPERTY_NAME_SHADOW_COLOR = "shadow-color";
50 const char* const PROPERTY_NAME_UNDERLINE_ENABLED = "underline-enabled";
51 const char* const PROPERTY_NAME_UNDERLINE_COLOR = "underline-color";
52 const char* const PROPERTY_NAME_UNDERLINE_HEIGHT = "underline-height";
53
54 } // namespace
55
56 int UtcDaliToolkitTextLabelConstructorP(void)
57 {
58   ToolkitTestApplication application;
59   tet_infoline(" UtcDaliToolkitTextLabelConstructorP");
60   TextLabel textLabel;
61   DALI_TEST_CHECK( !textLabel );
62   END_TEST;
63 }
64
65 int UtcDaliToolkitTextLabelNewP(void)
66 {
67   ToolkitTestApplication application;
68   tet_infoline(" UtcDaliToolkitTextLabelNewP");
69   TextLabel textLabel = TextLabel::New( "Test Text" );
70   DALI_TEST_CHECK( textLabel );
71   END_TEST;
72 }
73
74 int UtcDaliToolkitTextLabelDownCastP(void)
75 {
76   ToolkitTestApplication application;
77   tet_infoline(" UtcDaliToolkitTextLabelDownCastP");
78   TextLabel textLabel1 = TextLabel::New();
79   BaseHandle object( textLabel1 );
80
81   TextLabel textLabel2 = TextLabel::DownCast( object );
82   DALI_TEST_CHECK( textLabel2 );
83
84   TextLabel textLabel3 = DownCast< TextLabel >( object );
85   DALI_TEST_CHECK( textLabel3 );
86   END_TEST;
87 }
88
89 int UtcDaliToolkitTextLabelDownCastN(void)
90 {
91   ToolkitTestApplication application;
92   tet_infoline(" UtcDaliToolkitTextLabelDownCastN");
93   BaseHandle uninitializedObject;
94   TextLabel textLabel1 = TextLabel::DownCast( uninitializedObject );
95   DALI_TEST_CHECK( !textLabel1 );
96
97   TextLabel textLabel2 = DownCast< TextLabel >( uninitializedObject );
98   DALI_TEST_CHECK( !textLabel2 );
99   END_TEST;
100 }
101
102 int UtcDaliToolkitTextLabelCopyConstructorP(void)
103 {
104   ToolkitTestApplication application;
105   tet_infoline(" UtcDaliToolkitTextLabelCopyConstructorP");
106   TextLabel textLabel = TextLabel::New();
107   textLabel.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
108
109   TextLabel copy( textLabel );
110   DALI_TEST_CHECK( copy );
111   DALI_TEST_CHECK( copy.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) == textLabel.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) );
112   END_TEST;
113 }
114
115 int UtcDaliToolkitTextLabelAssignmentOperatorP(void)
116 {
117   ToolkitTestApplication application;
118   tet_infoline(" UtcDaliToolkitTextLabelAssingmentOperatorP");
119   TextLabel textLabel = TextLabel::New();
120   textLabel.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
121
122   TextLabel copy = textLabel;
123   DALI_TEST_CHECK( copy );
124   DALI_TEST_CHECK( copy.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) == textLabel.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) );
125   END_TEST;
126 }
127
128 int UtcDaliToolkitTextLabelGetPropertyN(void)
129 {
130   ToolkitTestApplication application;
131   tet_infoline(" UtcDaliToolkitTextLabelGetPropertyN");
132   TextLabel label = TextLabel::New("Test Text");
133   DALI_TEST_CHECK( label );
134
135   bool assert = false;
136   try
137   {
138     Property::Value value = label.GetProperty<bool>( 0 );
139   }
140   catch ( ... )
141   {
142     assert = true;
143   }
144   if ( assert )
145   {
146     tet_result(TET_PASS);
147   }
148   else
149   {
150     tet_result(TET_FAIL);
151   }
152   END_TEST;
153 }
154
155 // Positive test case for a method
156 int UtcDaliToolkitTextLabelGetPropertyP(void)
157 {
158   ToolkitTestApplication application;
159   tet_infoline(" UtcDaliToolkitTextLabelGetPropertyP");
160   TextLabel label = TextLabel::New("Test Text");
161   DALI_TEST_CHECK( label );
162
163   // Check Property Indices are correct
164   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_RENDERING_BACKEND ) == TextLabel::Property::RENDERING_BACKEND );
165   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_TEXT ) == TextLabel::Property::TEXT );
166   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_FONT_FAMILY ) == TextLabel::Property::FONT_FAMILY );
167   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_FONT_STYLE ) == TextLabel::Property::FONT_STYLE );
168   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_POINT_SIZE ) == TextLabel::Property::POINT_SIZE );
169   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_MULTI_LINE ) == TextLabel::Property::MULTI_LINE );
170   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_HORIZONTAL_ALIGNMENT ) == TextLabel::Property::HORIZONTAL_ALIGNMENT );
171   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_VERTICAL_ALIGNMENT ) == TextLabel::Property::VERTICAL_ALIGNMENT );
172   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_TEXT_COLOR ) == TextLabel::Property::TEXT_COLOR );
173   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_SHADOW_OFFSET ) == TextLabel::Property::SHADOW_OFFSET );
174   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_SHADOW_COLOR ) == TextLabel::Property::SHADOW_COLOR );
175   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_UNDERLINE_ENABLED ) == TextLabel::Property::UNDERLINE_ENABLED );
176   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_UNDERLINE_COLOR ) == TextLabel::Property::UNDERLINE_COLOR );
177   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_UNDERLINE_HEIGHT) == TextLabel::Property::UNDERLINE_HEIGHT );
178
179   // Check label defaults are correct
180   DALI_TEST_EQUALS( label.GetProperty<int>( TextLabel::Property::RENDERING_BACKEND ), Text::RENDERING_SHARED_ATLAS, TEST_LOCATION );
181   DALI_TEST_EQUALS( label.GetProperty<Vector2>( TextLabel::Property::SHADOW_OFFSET ), Vector2::ZERO, TEST_LOCATION );
182   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::SHADOW_COLOR ), Color::BLACK, TEST_LOCATION );
183   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::UNDERLINE_ENABLED ), false, TEST_LOCATION );
184   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::UNDERLINE_HEIGHT ), 0.0f, TEST_LOCATION );
185   END_TEST;
186 }
187
188 int UtcDaliToolkitTextLabelSetPropertyN(void)
189 {
190   ToolkitTestApplication application;
191   tet_infoline(" UtcDaliToolkitTextLabelSetPropertyN");
192   TextLabel label = TextLabel::New("Test Text");
193   DALI_TEST_CHECK( label );
194
195   bool assert = false;
196   try
197   {
198     label.SetProperty( 0, true );
199   }
200   catch ( ... )
201   {
202     assert = true;
203   }
204   if ( assert )
205   {
206     tet_result(TET_PASS);
207   }
208   else
209   {
210     tet_result(TET_FAIL);
211   }
212   END_TEST;
213 }
214
215 int UtcDaliToolkitTextLabelSetPropertyP(void)
216 {
217   ToolkitTestApplication application;
218   tet_infoline(" UtcDaliToolkitTextLabelSetPropertyP");
219   TextLabel label = TextLabel::New("Test Text");
220   DALI_TEST_CHECK( label );
221
222   // Check that text can be correctly reset
223   label.SetProperty( TextLabel::Property::TEXT, "Setting Text" );
224   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::TEXT ), "Setting Text", TEST_LOCATION );
225
226   // Check that the Alignment properties can be correctly set
227   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
228   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::HORIZONTAL_ALIGNMENT ), "BEGIN", TEST_LOCATION );
229   label.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "TOP" );
230   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::VERTICAL_ALIGNMENT ), "TOP", TEST_LOCATION );
231
232   // Check that shadow parameters can be correctly set
233   label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 3.0f, 3.0f ) );
234   DALI_TEST_EQUALS( label.GetProperty<Vector2>( TextLabel::Property::SHADOW_OFFSET ), Vector2( 3.0f, 3.0f ), TEST_LOCATION );
235   label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLUE );
236   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::SHADOW_COLOR ), Color::BLUE, TEST_LOCATION );
237
238   // Check that underline parameters can be correctly set
239   label.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
240   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::UNDERLINE_ENABLED ), true, TEST_LOCATION );
241   label.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::RED );
242   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::UNDERLINE_COLOR ), Color::RED, TEST_LOCATION );
243   label.SetProperty( TextLabel::Property::UNDERLINE_HEIGHT, 1.0f );
244   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::UNDERLINE_HEIGHT ), 1.0f, TEST_LOCATION );
245
246   // Check that text color can be properly set
247   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::BLUE );
248   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ), Color::BLUE, TEST_LOCATION );
249
250   // Toggle multi-line
251   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
252   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::MULTI_LINE ), true, TEST_LOCATION );
253   END_TEST;
254 }
255
256 int UtcDaliToolkitTextlabelBasicRenderP(void)
257 {
258   ToolkitTestApplication application;
259   tet_infoline(" UtcDaliToolkitTextLabelBasicRenderP");
260   TextLabel label = TextLabel::New("Test Text");
261   DALI_TEST_CHECK( label );
262
263   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
264   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
265
266   try
267   {
268     // Render some text with the basic backend
269     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
270     application.SendNotification();
271     application.Render();
272   }
273   catch( ... )
274   {
275     tet_result(TET_FAIL);
276   }
277   END_TEST;
278 }
279
280 int UtcDaliToolkitTextlabelAtlasRenderP(void)
281 {
282   ToolkitTestApplication application;
283   tet_infoline(" UtcDaliToolkitTextLabelAtlasRenderP");
284   TextLabel label = TextLabel::New("Test Text");
285   DALI_TEST_CHECK( label );
286
287   // Turn on all the effects
288   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
289   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
290   label.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
291   label.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::RED );
292   label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 1.0f, 1.0f ) );
293   label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLUE );
294   try
295   {
296     // Render some text with the shared atlas backend
297     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
298     application.SendNotification();
299     application.Render();
300   }
301   catch( ... )
302   {
303     tet_result(TET_FAIL);
304   }
305   END_TEST;
306 }
307