Merge "Fix to default Shadow Color setting" into tizen
[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<Vector4>( TextLabel::Property::TEXT_COLOR ), Color::WHITE, TEST_LOCATION );
182   DALI_TEST_EQUALS( label.GetProperty<Vector2>( TextLabel::Property::SHADOW_OFFSET ), Vector2::ZERO, TEST_LOCATION );
183   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::SHADOW_COLOR ), Color::BLACK, TEST_LOCATION );
184   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::UNDERLINE_ENABLED ), false, TEST_LOCATION );
185   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::UNDERLINE_HEIGHT ), 0.0f, TEST_LOCATION );
186   END_TEST;
187 }
188
189 int UtcDaliToolkitTextLabelSetPropertyN(void)
190 {
191   ToolkitTestApplication application;
192   tet_infoline(" UtcDaliToolkitTextLabelSetPropertyN");
193   TextLabel label = TextLabel::New("Test Text");
194   DALI_TEST_CHECK( label );
195
196   bool assert = false;
197   try
198   {
199     label.SetProperty( 0, true );
200   }
201   catch ( ... )
202   {
203     assert = true;
204   }
205   if ( assert )
206   {
207     tet_result(TET_PASS);
208   }
209   else
210   {
211     tet_result(TET_FAIL);
212   }
213   END_TEST;
214 }
215
216 int UtcDaliToolkitTextLabelSetPropertyP(void)
217 {
218   ToolkitTestApplication application;
219   tet_infoline(" UtcDaliToolkitTextLabelSetPropertyP");
220   TextLabel label = TextLabel::New("Test Text");
221   DALI_TEST_CHECK( label );
222
223   // Check that text can be correctly reset
224   label.SetProperty( TextLabel::Property::TEXT, "Setting Text" );
225   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::TEXT ), "Setting Text", TEST_LOCATION );
226
227   // Check that the Alignment properties can be correctly set
228   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
229   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::HORIZONTAL_ALIGNMENT ), "BEGIN", TEST_LOCATION );
230   label.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "TOP" );
231   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::VERTICAL_ALIGNMENT ), "TOP", TEST_LOCATION );
232
233   // Check that shadow parameters can be correctly set
234   label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 3.0f, 3.0f ) );
235   DALI_TEST_EQUALS( label.GetProperty<Vector2>( TextLabel::Property::SHADOW_OFFSET ), Vector2( 3.0f, 3.0f ), TEST_LOCATION );
236   label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLUE );
237   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::SHADOW_COLOR ), Color::BLUE, TEST_LOCATION );
238
239   // Check that underline parameters can be correctly set
240   label.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
241   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::UNDERLINE_ENABLED ), true, TEST_LOCATION );
242   label.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::RED );
243   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::UNDERLINE_COLOR ), Color::RED, TEST_LOCATION );
244   label.SetProperty( TextLabel::Property::UNDERLINE_HEIGHT, 1.0f );
245   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::UNDERLINE_HEIGHT ), 1.0f, TEST_LOCATION );
246
247   // Check that text color can be properly set
248   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::BLUE );
249   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ), Color::BLUE, TEST_LOCATION );
250
251   // Toggle multi-line
252   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
253   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::MULTI_LINE ), true, TEST_LOCATION );
254   END_TEST;
255 }
256
257 int UtcDaliToolkitTextlabelBasicRenderP(void)
258 {
259   ToolkitTestApplication application;
260   tet_infoline(" UtcDaliToolkitTextLabelBasicRenderP");
261   TextLabel label = TextLabel::New("Test Text");
262   DALI_TEST_CHECK( label );
263
264   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "BEGIN" );
265   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
266
267   try
268   {
269     // Render some text with the basic backend
270     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_BASIC );
271     application.SendNotification();
272     application.Render();
273   }
274   catch( ... )
275   {
276     tet_result(TET_FAIL);
277   }
278   END_TEST;
279 }
280
281 int UtcDaliToolkitTextlabelAtlasRenderP(void)
282 {
283   ToolkitTestApplication application;
284   tet_infoline(" UtcDaliToolkitTextLabelAtlasRenderP");
285   TextLabel label = TextLabel::New("Test Text");
286   DALI_TEST_CHECK( label );
287
288   // Turn on all the effects
289   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
290   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
291   label.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
292   label.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::RED );
293   label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 1.0f, 1.0f ) );
294   label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLUE );
295   try
296   {
297     // Render some text with the shared atlas backend
298     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
299     application.SendNotification();
300     application.Render();
301   }
302   catch( ... )
303   {
304     tet_result(TET_FAIL);
305   }
306   END_TEST;
307 }
308