31b147bcb5b7773c264d64a65c59b35552c4bc2b
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-TextLabel.cpp
1 /*
2  * Copyright (c) 2017 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 <unistd.h>
21
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali-toolkit/dali-toolkit.h>
24
25 using namespace Dali;
26 using namespace Toolkit;
27
28 void dali_textlabel_startup(void)
29 {
30   test_return_value = TET_UNDEF;
31 }
32
33 void dali_textlabel_cleanup(void)
34 {
35   test_return_value = TET_PASS;
36 }
37
38 namespace
39 {
40
41 const char* const PROPERTY_NAME_RENDERING_BACKEND = "renderingBackend";
42 const char* const PROPERTY_NAME_TEXT = "text";
43 const char* const PROPERTY_NAME_FONT_FAMILY = "fontFamily";
44 const char* const PROPERTY_NAME_FONT_STYLE = "fontStyle";
45 const char* const PROPERTY_NAME_POINT_SIZE = "pointSize";
46 const char* const PROPERTY_NAME_MULTI_LINE =  "multiLine";
47 const char* const PROPERTY_NAME_HORIZONTAL_ALIGNMENT = "horizontalAlignment";
48 const char* const PROPERTY_NAME_VERTICAL_ALIGNMENT = "verticalAlignment";
49 const char* const PROPERTY_NAME_TEXT_COLOR = "textColor";
50 const char* const PROPERTY_NAME_SHADOW_OFFSET = "shadowOffset";
51 const char* const PROPERTY_NAME_SHADOW_COLOR = "shadowColor";
52 const char* const PROPERTY_NAME_UNDERLINE_ENABLED = "underlineEnabled";
53 const char* const PROPERTY_NAME_UNDERLINE_COLOR = "underlineColor";
54 const char* const PROPERTY_NAME_UNDERLINE_HEIGHT = "underlineHeight";
55 const char* const PROPERTY_NAME_ENABLE_MARKUP = "enableMarkup";
56 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL = "enableAutoScroll";
57 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL_SPEED = "autoScrollSpeed";
58 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL_LOOPS = "autoScrollLoopCount";
59 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL_GAP = "autoScrollGap";
60
61 const char* const PROPERTY_NAME_LINE_SPACING = "lineSpacing";
62 const char* const PROPERTY_NAME_UNDERLINE = "underline";
63 const char* const PROPERTY_NAME_SHADOW = "shadow";
64 const char* const PROPERTY_NAME_EMBOSS = "emboss";
65 const char* const PROPERTY_NAME_OUTLINE = "outline";
66
67 const char* const PROPERTY_NAME_PIXEL_SIZE = "pixelSize";
68 const char* const PROPERTY_NAME_ELLIPSIS = "ellipsis";
69 const char* const PROPERTY_NAME_AUTO_SCROLL_LOOP_DELAY = "autoScrollLoopDelay";
70
71 const int DEFAULT_RENDERING_BACKEND = Dali::Toolkit::Text::DEFAULT_RENDERING_BACKEND;
72 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
73 const unsigned int EMOJI_FONT_SIZE = 3840u; // 60 * 64
74
75 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
76 {
77   if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
78   {
79     for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
80     {
81       const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
82
83       Property::Value* valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
84       if( NULL != valueSet )
85       {
86         if( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() )
87         {
88           tet_printf( "  Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
89           return false;
90         }
91       }
92       else
93       {
94         tet_printf( "  The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
95         return false;
96       }
97     }
98   }
99
100   return true;
101 }
102
103 } // namespace
104
105 int UtcDaliToolkitTextLabelConstructorP(void)
106 {
107   ToolkitTestApplication application;
108   tet_infoline(" UtcDaliToolkitTextLabelConstructorP");
109   TextLabel textLabel;
110   DALI_TEST_CHECK( !textLabel );
111   END_TEST;
112 }
113
114 int UtcDaliToolkitTextLabelNewP(void)
115 {
116   ToolkitTestApplication application;
117   tet_infoline(" UtcDaliToolkitTextLabelNewP");
118   TextLabel textLabel = TextLabel::New( "Test Text" );
119   DALI_TEST_CHECK( textLabel );
120   END_TEST;
121 }
122
123 int UtcDaliToolkitTextLabelDownCastP(void)
124 {
125   ToolkitTestApplication application;
126   tet_infoline(" UtcDaliToolkitTextLabelDownCastP");
127   TextLabel textLabel1 = TextLabel::New();
128   BaseHandle object( textLabel1 );
129
130   TextLabel textLabel2 = TextLabel::DownCast( object );
131   DALI_TEST_CHECK( textLabel2 );
132
133   TextLabel textLabel3 = DownCast< TextLabel >( object );
134   DALI_TEST_CHECK( textLabel3 );
135   END_TEST;
136 }
137
138 int UtcDaliToolkitTextLabelDownCastN(void)
139 {
140   ToolkitTestApplication application;
141   tet_infoline(" UtcDaliToolkitTextLabelDownCastN");
142   BaseHandle uninitializedObject;
143   TextLabel textLabel1 = TextLabel::DownCast( uninitializedObject );
144   DALI_TEST_CHECK( !textLabel1 );
145
146   TextLabel textLabel2 = DownCast< TextLabel >( uninitializedObject );
147   DALI_TEST_CHECK( !textLabel2 );
148   END_TEST;
149 }
150
151 int UtcDaliToolkitTextLabelCopyConstructorP(void)
152 {
153   ToolkitTestApplication application;
154   tet_infoline(" UtcDaliToolkitTextLabelCopyConstructorP");
155   TextLabel textLabel = TextLabel::New();
156   textLabel.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
157
158   TextLabel copy( textLabel );
159   DALI_TEST_CHECK( copy );
160   DALI_TEST_CHECK( copy.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) == textLabel.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) );
161   END_TEST;
162 }
163
164 int UtcDaliToolkitTextLabelAssignmentOperatorP(void)
165 {
166   ToolkitTestApplication application;
167   tet_infoline(" UtcDaliToolkitTextLabelAssingmentOperatorP");
168   TextLabel textLabel = TextLabel::New();
169   textLabel.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
170
171   TextLabel copy = textLabel;
172   DALI_TEST_CHECK( copy );
173   DALI_TEST_CHECK( copy.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) == textLabel.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ) );
174   END_TEST;
175 }
176
177 // Positive test case for a method
178 int UtcDaliToolkitTextLabelGetPropertyP(void)
179 {
180   ToolkitTestApplication application;
181   tet_infoline(" UtcDaliToolkitTextLabelGetPropertyP");
182   TextLabel label = TextLabel::New("Test Text");
183   DALI_TEST_CHECK( label );
184
185   // Check Property Indices are correct
186   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_RENDERING_BACKEND ) == TextLabel::Property::RENDERING_BACKEND );
187   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_TEXT ) == TextLabel::Property::TEXT );
188   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_FONT_FAMILY ) == TextLabel::Property::FONT_FAMILY );
189   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_FONT_STYLE ) == TextLabel::Property::FONT_STYLE );
190   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_POINT_SIZE ) == TextLabel::Property::POINT_SIZE );
191   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_MULTI_LINE ) == TextLabel::Property::MULTI_LINE );
192   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_HORIZONTAL_ALIGNMENT ) == TextLabel::Property::HORIZONTAL_ALIGNMENT );
193   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_VERTICAL_ALIGNMENT ) == TextLabel::Property::VERTICAL_ALIGNMENT );
194   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_TEXT_COLOR ) == TextLabel::Property::TEXT_COLOR );
195   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_SHADOW_OFFSET ) == TextLabel::Property::SHADOW_OFFSET );
196   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_SHADOW_COLOR ) == TextLabel::Property::SHADOW_COLOR );
197   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_UNDERLINE_ENABLED ) == TextLabel::Property::UNDERLINE_ENABLED );
198   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_UNDERLINE_COLOR ) == TextLabel::Property::UNDERLINE_COLOR );
199   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_UNDERLINE_HEIGHT) == TextLabel::Property::UNDERLINE_HEIGHT );
200   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_ENABLE_MARKUP) == TextLabel::Property::ENABLE_MARKUP );
201   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_ENABLE_AUTO_SCROLL ) == TextLabel::Property::ENABLE_AUTO_SCROLL );
202   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_ENABLE_AUTO_SCROLL_SPEED ) == TextLabel::Property::AUTO_SCROLL_SPEED );
203   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_ENABLE_AUTO_SCROLL_LOOPS ) == TextLabel::Property::AUTO_SCROLL_LOOP_COUNT );
204   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_ENABLE_AUTO_SCROLL_GAP ) == TextLabel::Property::AUTO_SCROLL_GAP );
205   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_LINE_SPACING ) == TextLabel::Property::LINE_SPACING );
206   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_UNDERLINE ) == TextLabel::Property::UNDERLINE );
207   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_SHADOW ) == TextLabel::Property::SHADOW );
208   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_EMBOSS ) == TextLabel::Property::EMBOSS );
209   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_OUTLINE ) == TextLabel::Property::OUTLINE );
210   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_PIXEL_SIZE ) == TextLabel::Property::PIXEL_SIZE );
211   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_ELLIPSIS ) == TextLabel::Property::ELLIPSIS );
212   DALI_TEST_CHECK( label.GetPropertyIndex( PROPERTY_NAME_AUTO_SCROLL_LOOP_DELAY ) == TextLabel::Property::AUTO_SCROLL_LOOP_DELAY );
213
214   END_TEST;
215 }
216
217 int UtcDaliToolkitTextLabelSetPropertyP(void)
218 {
219   ToolkitTestApplication application;
220   tet_infoline(" UtcDaliToolkitTextLabelSetPropertyP");
221   TextLabel label = TextLabel::New();
222   DALI_TEST_CHECK( label );
223
224   Stage::GetCurrent().Add( label );
225
226   // Note - we can't check the defaults since the stylesheets are platform-specific
227   label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
228   DALI_TEST_EQUALS( (Text::RenderingType)label.GetProperty<int>( TextLabel::Property::RENDERING_BACKEND ), Text::RENDERING_SHARED_ATLAS, TEST_LOCATION );
229
230   // Check that text can be correctly reset
231   label.SetProperty( TextLabel::Property::TEXT, "Setting Text" );
232   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::TEXT ), std::string("Setting Text"), TEST_LOCATION );
233
234   // Check font properties.
235   label.SetProperty( TextLabel::Property::FONT_FAMILY, "Setting font family" );
236   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::FONT_FAMILY ), std::string("Setting font family"), TEST_LOCATION );
237
238   Property::Map fontStyleMapSet;
239   Property::Map fontStyleMapGet;
240
241   fontStyleMapSet.Insert( "weight", "bold" );
242   fontStyleMapSet.Insert( "width", "condensed" );
243   fontStyleMapSet.Insert( "slant", "italic" );
244   label.SetProperty( TextLabel::Property::FONT_STYLE, fontStyleMapSet );
245
246   fontStyleMapGet = label.GetProperty<Property::Map>( TextLabel::Property::FONT_STYLE );
247   DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
248   DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
249
250   // Check the old font style format.
251   fontStyleMapSet.Clear();
252   fontStyleMapSet.Insert( "weight", "thin" );
253   fontStyleMapSet.Insert( "width", "expanded" );
254   fontStyleMapSet.Insert( "slant", "oblique" );
255   const std::string strFontStyle = "{\"weight\":\"thin\",\"width\":\"expanded\",\"slant\":\"oblique\"}";
256
257   label.SetProperty( TextLabel::Property::FONT_STYLE, "{\"weight\":\"thin\",\"width\":\"expanded\",\"slant\":\"oblique\"}" );
258   std::string getFontStyle = label.GetProperty<std::string>( TextLabel::Property::FONT_STYLE );
259   DALI_TEST_EQUALS( getFontStyle, strFontStyle, TEST_LOCATION );
260
261   label.SetProperty( TextLabel::Property::POINT_SIZE, 10.f );
262   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::POINT_SIZE ), 10.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
263
264   // Reset font style.
265   fontStyleMapSet.Clear();
266   fontStyleMapSet.Insert( "weight", "normal" );
267   fontStyleMapSet.Insert( "slant", "oblique" );
268
269   label.SetProperty( TextLabel::Property::FONT_STYLE, fontStyleMapSet );
270   fontStyleMapGet = label.GetProperty<Property::Map>( TextLabel::Property::FONT_STYLE );
271   DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
272   DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
273
274   fontStyleMapSet.Clear();
275   fontStyleMapSet.Insert( "slant", "roman" );
276
277   label.SetProperty( TextLabel::Property::FONT_STYLE, fontStyleMapSet );
278   fontStyleMapGet = label.GetProperty<Property::Map>( TextLabel::Property::FONT_STYLE );
279   DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
280
281   // Replace 'roman' for 'normal'.
282   Property::Value* slantValue = fontStyleMapGet.Find( "slant" );
283   if( NULL != slantValue )
284   {
285     if( "normal" == slantValue->Get<std::string>() )
286     {
287       fontStyleMapGet["slant"] = "roman";
288     }
289   }
290   DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
291
292   fontStyleMapSet.Clear();
293
294   label.SetProperty( TextLabel::Property::FONT_STYLE, fontStyleMapSet );
295   fontStyleMapGet = label.GetProperty<Property::Map>( TextLabel::Property::FONT_STYLE );
296   DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
297   DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
298
299   // Toggle multi-line
300   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
301   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::MULTI_LINE ), true, TEST_LOCATION );
302
303   // Check that the Alignment properties can be correctly set
304   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
305   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::HORIZONTAL_ALIGNMENT ), "CENTER", TEST_LOCATION );
306   label.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
307   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::VERTICAL_ALIGNMENT ), "CENTER", TEST_LOCATION );
308
309   // Check that text color can be properly set
310   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::BLUE );
311   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::TEXT_COLOR ), Color::BLUE, TEST_LOCATION );
312   // The underline color is changed as well.
313   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::UNDERLINE_COLOR ), Color::BLUE, TEST_LOCATION );
314
315   Property::Map underlineMapSet;
316   Property::Map underlineMapGet;
317
318   underlineMapSet.Insert( "enable", "false" );
319   underlineMapSet.Insert( "color", "blue" );
320   underlineMapSet.Insert( "height", "0" );
321
322   underlineMapGet = label.GetProperty<Property::Map>( TextLabel::Property::UNDERLINE );
323   DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
324   DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
325
326   // Check that shadow parameters can be correctly set
327   label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 3.0f, 3.0f ) );
328   DALI_TEST_EQUALS( label.GetProperty<Vector2>( TextLabel::Property::SHADOW_OFFSET ), Vector2( 3.0f, 3.0f ), TEST_LOCATION );
329   label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLUE );
330   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::SHADOW_COLOR ), Color::BLUE, TEST_LOCATION );
331
332   // Check that underline parameters can be correctly set
333   label.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
334   DALI_TEST_EQUALS( label.GetProperty<bool>( TextLabel::Property::UNDERLINE_ENABLED ), true, TEST_LOCATION );
335   label.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::RED );
336   DALI_TEST_EQUALS( label.GetProperty<Vector4>( TextLabel::Property::UNDERLINE_COLOR ), Color::RED, TEST_LOCATION );
337   label.SetProperty( TextLabel::Property::UNDERLINE_HEIGHT, 1.0f );
338   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::UNDERLINE_HEIGHT ), 1.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
339
340   TextLabel label2 = TextLabel::New( "New text" );
341   DALI_TEST_CHECK( label2 );
342   DALI_TEST_EQUALS( label2.GetProperty<std::string>( TextLabel::Property::TEXT ), std::string("New text"), TEST_LOCATION );
343
344   // Check the enable markup property.
345   DALI_TEST_CHECK( !label.GetProperty<bool>( TextLabel::Property::ENABLE_MARKUP ) );
346   label.SetProperty( TextLabel::Property::ENABLE_MARKUP, true );
347   DALI_TEST_CHECK( label.GetProperty<bool>( TextLabel::Property::ENABLE_MARKUP ) );
348
349   // Check the text property when markup is enabled
350   label.SetProperty( TextLabel::Property::TEXT, "<color value='white'>Markup</color><color value='cyan'>Text</color>" );
351   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::TEXT ), std::string("MarkupText"), TEST_LOCATION );
352
353   application.SendNotification();
354   application.Render();
355
356   // Check autoscroll properties
357   const int SCROLL_SPEED = 80;
358   const int SCROLL_LOOPS = 4;
359   const float SCROLL_GAP = 50.0f;
360   const float SCROLL_LOOP_DELAY = 0.3f;
361   const std::string STOP_IMMEDIATE = std::string( "IMMEDIATE" );
362   const std::string STOP_FINISH_LOOP = std::string( "FINISH_LOOP" );
363
364   label.SetProperty( TextLabel::Property::MULTI_LINE, false ); // Autoscroll only supported in single line
365   DALI_TEST_CHECK( !label.GetProperty<bool>( TextLabel::Property::ENABLE_AUTO_SCROLL ) );
366   label.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
367   DALI_TEST_CHECK( label.GetProperty<bool>( TextLabel::Property::ENABLE_AUTO_SCROLL ) );
368   label.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, SCROLL_SPEED );
369   DALI_TEST_EQUALS( SCROLL_SPEED, label.GetProperty<int>( TextLabel::Property::AUTO_SCROLL_SPEED ), TEST_LOCATION );
370   label.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, SCROLL_LOOPS );
371   DALI_TEST_EQUALS( SCROLL_LOOPS, label.GetProperty<int>( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT ), TEST_LOCATION );
372   label.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, SCROLL_GAP );
373   DALI_TEST_EQUALS( SCROLL_GAP, label.GetProperty<float>( TextLabel::Property::AUTO_SCROLL_GAP ), TEST_LOCATION );
374   label.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_DELAY, SCROLL_LOOP_DELAY );
375   DALI_TEST_EQUALS( SCROLL_LOOP_DELAY, label.GetProperty<float>( TextLabel::Property::AUTO_SCROLL_LOOP_DELAY ), TEST_LOCATION );
376
377   //Check autoscroll stop type property
378   label.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
379   DALI_TEST_EQUALS( STOP_IMMEDIATE, label.GetProperty<std::string>( TextLabel::Property::AUTO_SCROLL_STOP_MODE ), TEST_LOCATION );
380
381   label.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
382   DALI_TEST_EQUALS( STOP_FINISH_LOOP, label.GetProperty<std::string>( TextLabel::Property::AUTO_SCROLL_STOP_MODE ), TEST_LOCATION );
383
384
385   // Check the line spacing property
386   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::LINE_SPACING ), 0.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
387   label.SetProperty( TextLabel::Property::LINE_SPACING, 10.f );
388   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::LINE_SPACING ), 10.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
389
390   // Check the underline property
391
392   underlineMapSet.Clear();
393   underlineMapSet.Insert( "enable", "true" );
394   underlineMapSet.Insert( "color", "red" );
395   underlineMapSet.Insert( "height", "1" );
396
397   label.SetProperty( TextLabel::Property::UNDERLINE, underlineMapSet );
398
399   application.SendNotification();
400   application.Render();
401
402   underlineMapGet = label.GetProperty<Property::Map>( TextLabel::Property::UNDERLINE );
403   DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
404   DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
405
406   underlineMapSet.Clear();
407
408   Property::Map underlineDisabledMapGet;
409   underlineDisabledMapGet.Insert( "enable", "false" );
410   underlineDisabledMapGet.Insert( "color", "red" );
411   underlineDisabledMapGet.Insert( "height", "1" );
412
413   label.SetProperty( TextLabel::Property::UNDERLINE, underlineMapSet );
414   underlineMapGet = label.GetProperty<Property::Map>( TextLabel::Property::UNDERLINE );
415   DALI_TEST_EQUALS( underlineMapGet.Count(), underlineDisabledMapGet.Count(), TEST_LOCATION );
416   DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineDisabledMapGet ), true, TEST_LOCATION );
417
418   // Check the shadow property
419
420   Property::Map shadowMapSet;
421   Property::Map shadowMapGet;
422
423   shadowMapSet.Insert( "color", Color::GREEN );
424   shadowMapSet.Insert( "offset", Vector2(2.0f, 2.0f) );
425   shadowMapSet.Insert( "blurRadius", 5.0f );
426
427   label.SetProperty( TextLabel::Property::SHADOW, shadowMapSet );
428
429   shadowMapGet = label.GetProperty<Property::Map>( TextLabel::Property::SHADOW );
430   DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
431   DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
432
433   shadowMapSet.Clear();
434   Property::Map shadowDisabledMapGet;
435   shadowDisabledMapGet.Insert( "color", Color::GREEN );
436   shadowDisabledMapGet.Insert( "offset", Vector2(0.0f, 0.0f) );
437   shadowDisabledMapGet.Insert( "blurRadius", 5.0f );
438
439   label.SetProperty( TextLabel::Property::SHADOW, shadowMapSet );
440
441   shadowMapGet = label.GetProperty<Property::Map>( TextLabel::Property::SHADOW );
442   DALI_TEST_EQUALS( shadowMapGet.Count(), shadowDisabledMapGet.Count(), TEST_LOCATION );
443   DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowDisabledMapGet ), true, TEST_LOCATION );
444
445   // Check the emboss property
446   label.SetProperty( TextLabel::Property::EMBOSS, "Emboss properties" );
447   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::EMBOSS ), std::string("Emboss properties"), TEST_LOCATION );
448
449   // Check the outline property
450
451   // Test string type first
452   // This is purely to maintain backward compatibility, but we don't support string as the outline property type.
453   label.SetProperty( TextLabel::Property::OUTLINE, "Outline properties" );
454   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::OUTLINE ), std::string("Outline properties"), TEST_LOCATION );
455
456   // Then test the property map type
457   Property::Map outlineMapSet;
458   Property::Map outlineMapGet;
459
460   outlineMapSet["color"] = Color::RED;
461   outlineMapSet["width"] = 2.0f;
462   label.SetProperty( TextLabel::Property::OUTLINE, outlineMapSet );
463
464   outlineMapSet["color"] = "red";
465   outlineMapSet["width"] = "2";
466   outlineMapGet = label.GetProperty<Property::Map>( TextLabel::Property::OUTLINE );
467   DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
468   DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
469
470   // Check the pixel size of font
471   label.SetProperty( TextLabel::Property::PIXEL_SIZE, 20.f );
472   DALI_TEST_EQUALS( label.GetProperty<float>( TextLabel::Property::PIXEL_SIZE ), 20.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
473
474   // Check the ellipsis property
475   DALI_TEST_CHECK( !label.GetProperty<bool>( TextLabel::Property::ELLIPSIS ) );
476   label.SetProperty( TextLabel::Property::ELLIPSIS, true );
477   DALI_TEST_CHECK( label.GetProperty<bool>( TextLabel::Property::ELLIPSIS ) );
478
479   // Check the layout direction property
480   label.SetProperty( Actor::Property::LAYOUT_DIRECTION, LayoutDirection::RIGHT_TO_LEFT );
481   DALI_TEST_EQUALS( label.GetProperty< int >( Actor::Property::LAYOUT_DIRECTION ), static_cast< int >( LayoutDirection::RIGHT_TO_LEFT ), TEST_LOCATION );
482
483   application.SendNotification();
484   application.Render();
485
486   END_TEST;
487 }
488
489 int UtcDaliToolkitTextlabelAtlasRenderP(void)
490 {
491   ToolkitTestApplication application;
492   tet_infoline(" UtcDaliToolkitTextLabelAtlasRenderP");
493   TextLabel label = TextLabel::New("Test Text");
494   DALI_TEST_CHECK( label );
495
496   // Avoid a crash when core load gl resources.
497   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
498
499   Stage::GetCurrent().Add( label );
500
501   // Turn on all the effects
502   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
503   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
504   label.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
505   label.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::RED );
506   label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 1.0f, 1.0f ) );
507   label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLUE );
508
509   try
510   {
511     // Render some text with the shared atlas backend
512     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
513     application.SendNotification();
514     application.Render();
515   }
516   catch( ... )
517   {
518     tet_result(TET_FAIL);
519   }
520
521   try
522   {
523     // Render some text with the shared atlas backend
524     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_VECTOR_BASED );
525     application.SendNotification();
526     application.Render();
527   }
528   catch( ... )
529   {
530     tet_result(TET_FAIL);
531   }
532   END_TEST;
533 }
534
535 int UtcDaliToolkitTextLabelLanguagesP(void)
536 {
537   ToolkitTestApplication application;
538   tet_infoline(" UtcDaliToolkitTextLabelLanguagesP");
539   TextLabel label = TextLabel::New();
540   DALI_TEST_CHECK( label );
541
542   Stage::GetCurrent().Add( label );
543
544   const std::string scripts( " привет мир, γειά σου Κόσμε, Hello world, مرحبا بالعالم, שלום עולם, "
545                              "բարեւ աշխարհը, მსოფლიოში, 안녕하세요, 你好世界, ひらがな, カタカナ, "
546                              "ওহে বিশ্ব, မင်္ဂလာပါကမ္ဘာလောက, हैलो वर्ल्ड, હેલો વર્લ્ડ, ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਦੁਨਿਆ, ಹಲೋ ವರ್ಲ್ಡ್, "
547                              "ഹലോ വേൾഡ്, ଓଡ଼ିଆ, හෙලෝ වර්ල්ඩ්, ஹலோ உலகம், హలో వరల్డ్, "
548                              "ສະບາຍດີໂລກ, สวัสดีโลก, ជំរាបសួរពិភពលោក, "
549                              "\xF0\x9F\x98\x81 \xF0\x9F\x98\x82 \xF0\x9F\x98\x83 \xF0\x9F\x98\x84." ); // these characters on the last line are emojis.
550
551   label.SetProperty( TextLabel::Property::TEXT, scripts );
552   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::TEXT ), scripts, TEST_LOCATION );
553
554   application.SendNotification();
555   application.Render();
556
557   END_TEST;
558 }
559
560 int UtcDaliToolkitTextLabelEmojisP(void)
561 {
562   ToolkitTestApplication application;
563   tet_infoline(" UtcDaliToolkitTextLabelLanguagesP");
564   TextLabel label = TextLabel::New();
565   DALI_TEST_CHECK( label );
566
567   Stage::GetCurrent().Add( label );
568
569   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
570
571   char* pathNamePtr = get_current_dir_name();
572   const std::string pathName( pathNamePtr );
573   free( pathNamePtr );
574
575   TextAbstraction::FontDescription fontDescription;
576   fontDescription.path = pathName + DEFAULT_FONT_DIR + "/tizen/BreezeColorEmoji.ttf";
577   fontDescription.family = "BreezeColorEmoji";
578   fontDescription.width = TextAbstraction::FontWidth::NONE;
579   fontDescription.weight = TextAbstraction::FontWeight::NORMAL;
580   fontDescription.slant = TextAbstraction::FontSlant::NONE;
581
582   fontClient.GetFontId( fontDescription, EMOJI_FONT_SIZE );
583
584   const std::string emojis = "<font family='BreezeColorEmoji' size='60'>\xF0\x9F\x98\x81 \xF0\x9F\x98\x82 \xF0\x9F\x98\x83 \xF0\x9F\x98\x84</font>";
585   label.SetProperty( TextLabel::Property::ENABLE_MARKUP, true );
586   label.SetProperty( TextLabel::Property::TEXT, emojis );
587
588   Property::Map shadowMap;
589   shadowMap.Insert( "color", "green" );
590   shadowMap.Insert( "offset", "2 2" );
591   label.SetProperty( TextLabel::Property::SHADOW, shadowMap );
592
593   application.SendNotification();
594   application.Render();
595
596   END_TEST;
597 }
598
599 int UtcDaliToolkitTextlabelScrollingP(void)
600 {
601   ToolkitTestApplication application;
602   tet_infoline(" UtcDaliToolkitTextLabelScrollingP");
603   TextLabel labelImmediate = TextLabel::New("Some text to scroll");
604   TextLabel labelFinished = TextLabel::New("مرحبا بالعالم");
605
606   DALI_TEST_CHECK( labelImmediate );
607   DALI_TEST_CHECK( labelFinished );
608   // Avoid a crash when core load gl resources.
609   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
610   Stage::GetCurrent().Add( labelImmediate );
611   // Turn on all the effects
612   labelImmediate.SetProperty( TextLabel::Property::MULTI_LINE, false );
613   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
614   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
615   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
616   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
617
618   Stage::GetCurrent().Add( labelFinished );
619   // Turn on all the effects
620   labelFinished.SetProperty( TextLabel::Property::MULTI_LINE, false );
621   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
622   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
623   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
624   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
625
626
627
628   try
629   {
630     // Render some text with the shared atlas backend
631     labelImmediate.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
632     labelFinished.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
633     application.SendNotification();
634     application.Render();
635
636     labelImmediate.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
637     labelFinished.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
638     application.SendNotification();
639     application.Render();
640
641   }
642   catch( ... )
643   {
644     tet_result(TET_FAIL);
645   }
646
647   END_TEST;
648 }
649
650 int UtcDaliToolkitTextlabelScrollingCenterAlignP(void)
651 {
652   ToolkitTestApplication application;
653   TextLabel labelShort = TextLabel::New("Some text to scroll");
654   TextLabel labelLong = TextLabel::New("Some text to scroll that is greater than the width of the text. The quick brown fox jumps over the lazy dog. Hello World, we meet again!");
655
656   DALI_TEST_CHECK( labelShort );
657   DALI_TEST_CHECK( labelLong );
658   // Avoid a crash when core load gl resources.
659   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
660   Stage::GetCurrent().Add( labelShort );
661   // Turn on all the effects
662   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
663   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
664   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
665   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
666   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
667   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
668
669   Stage::GetCurrent().Add( labelLong );
670   // Turn on all the effects
671   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
672   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
673   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
674   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
675   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
676   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
677
678   try
679   {
680     // Render some text with the shared atlas backend
681     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
682     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
683     application.SendNotification();
684     application.Render();
685
686     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
687     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
688     application.SendNotification();
689     application.Render();
690
691   }
692   catch( ... )
693   {
694     tet_result(TET_FAIL);
695   }
696
697   END_TEST;
698 }
699
700 int UtcDaliToolkitTextlabelScrollingCenterAlignRTLP(void)
701 {
702   ToolkitTestApplication application;
703   TextLabel labelShort = TextLabel::New("مرحبا بالعالم");
704   TextLabel labelLong = TextLabel::New("لكن لا بد أن أوضح لك أن كل هذه الأفكار المغلوطة حول استنكار  النشوة وتمجيد الألم نشأت بالفعل، وسأعرض لك التفاصيل لتكتشف حقيقة وأساس تلك السعادة البشرية، فلا أحد يرفض أو يكره أو يتجنب الشعور بالسعادة، ولكن بفضل هؤلاء الأشخاص الذين لا يدركون بأن السعادة لا بد أن نستشعرها بصورة أكثر عقلانية ومنطقية فيعرضهم هذا لمواجهة الظروف الأليمة، وأكرر بأنه لا يوجد من يرغب في الحب ونيل المنال ويتلذذ بالآلام، الألم هو الألم ولكن نتيجة لظروف ما قد تكمن السعاده فيما نتحمله من كد وأسي");
705
706   DALI_TEST_CHECK( labelShort );
707   DALI_TEST_CHECK( labelLong );
708   // Avoid a crash when core load gl resources.
709   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
710   Stage::GetCurrent().Add( labelShort );
711   // Turn on all the effects
712   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
713   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
714   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
715   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
716   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
717   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
718
719   Stage::GetCurrent().Add( labelLong );
720   // Turn on all the effects
721   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
722   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
723   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
724   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
725   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
726   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
727
728   try
729   {
730     // Render some text with the shared atlas backend
731     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
732     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
733     application.SendNotification();
734     application.Render();
735
736     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
737     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
738     application.SendNotification();
739     application.Render();
740
741   }
742   catch( ... )
743   {
744     tet_result(TET_FAIL);
745   }
746
747   END_TEST;
748 }
749
750 int UtcDaliToolkitTextlabelScrollingEndAlignP(void)
751 {
752   ToolkitTestApplication application;
753   TextLabel labelShort = TextLabel::New("Some text to scroll");
754   TextLabel labelLong = TextLabel::New("Some text to scroll that is greater than the width of the text. The quick brown fox jumps over the lazy dog. Hello World, we meet again!");
755
756   DALI_TEST_CHECK( labelShort );
757   DALI_TEST_CHECK( labelLong );
758   // Avoid a crash when core load gl resources.
759   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
760   Stage::GetCurrent().Add( labelShort );
761   // Turn on all the effects
762   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
763   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
764   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
765   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
766   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
767   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
768
769   Stage::GetCurrent().Add( labelLong );
770   // Turn on all the effects
771   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
772   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
773   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
774   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
775   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
776   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
777
778   try
779   {
780     // Render some text with the shared atlas backend
781     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
782     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
783     application.SendNotification();
784     application.Render();
785
786     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
787     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
788     application.SendNotification();
789     application.Render();
790
791   }
792   catch( ... )
793   {
794     tet_result(TET_FAIL);
795   }
796
797   END_TEST;
798 }
799
800 int UtcDaliToolkitTextlabelScrollingEndAlignRTLP(void)
801 {
802   ToolkitTestApplication application;
803   TextLabel labelShort = TextLabel::New("مرحبا بالعالم");
804   TextLabel labelLong = TextLabel::New("لكن لا بد أن أوضح لك أن كل هذه الأفكار المغلوطة حول استنكار  النشوة وتمجيد الألم نشأت بالفعل، وسأعرض لك التفاصيل لتكتشف حقيقة وأساس تلك السعادة البشرية، فلا أحد يرفض أو يكره أو يتجنب الشعور بالسعادة، ولكن بفضل هؤلاء الأشخاص الذين لا يدركون بأن السعادة لا بد أن نستشعرها بصورة أكثر عقلانية ومنطقية فيعرضهم هذا لمواجهة الظروف الأليمة، وأكرر بأنه لا يوجد من يرغب في الحب ونيل المنال ويتلذذ بالآلام، الألم هو الألم ولكن نتيجة لظروف ما قد تكمن السعاده فيما نتحمله من كد وأسي");
805
806   DALI_TEST_CHECK( labelShort );
807   DALI_TEST_CHECK( labelLong );
808   // Avoid a crash when core load gl resources.
809   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
810   Stage::GetCurrent().Add( labelShort );
811   // Turn on all the effects
812   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
813   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
814   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
815   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
816   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
817   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
818
819   Stage::GetCurrent().Add( labelLong );
820   // Turn on all the effects
821   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
822   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
823   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
824   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
825   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
826   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
827
828   try
829   {
830     // Render some text with the shared atlas backend
831     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
832     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
833     application.SendNotification();
834     application.Render();
835
836     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
837     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
838     application.SendNotification();
839     application.Render();
840
841   }
842   catch( ... )
843   {
844     tet_result(TET_FAIL);
845   }
846
847   END_TEST;
848 }
849
850 int UtcDaliToolkitTextlabelScrollingInterruptedP(void)
851 {
852   ToolkitTestApplication application;
853   tet_infoline(" UtcDaliToolkitTextlabelScrollingInterruptedP");
854   TextLabel label = TextLabel::New("Some text to scroll");
855   DALI_TEST_CHECK( label );
856   // Avoid a crash when core load gl resources.
857   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
858   Stage::GetCurrent().Add( label );
859   label.SetSize( 360.0f, 20.f );
860   // Turn on all the effects
861   label.SetProperty( TextLabel::Property::MULTI_LINE, false );
862   label.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
863   label.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
864   label.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
865
866   // Render the text.
867   application.SendNotification();
868   application.Render();
869
870   unsigned int actorCount1 = label.GetChildCount();
871   tet_printf("Initial actor count is(%d)\n", actorCount1 );
872
873   try
874   {
875     // Render some text with the shared atlas backend
876     label.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
877     application.SendNotification();
878     application.Render(2000);
879
880     unsigned int actorCount1 = label.GetChildCount();
881     tet_printf("Actor count after scrolling is(%d)\n", actorCount1 );
882
883     label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
884
885     // Render the text.
886     application.SendNotification();
887     application.Render();
888
889     unsigned int actorCount2 = label.GetChildCount();
890     tet_printf("After changing color the actor count is(%d)\n", actorCount2 );
891
892     DALI_TEST_EQUALS( actorCount1, actorCount2, TEST_LOCATION );
893
894   }
895   catch( ... )
896   {
897     tet_result(TET_FAIL);
898   }
899
900   END_TEST;
901 }
902
903 int UtcDaliToolkitTextlabelScrollingN(void)
904 {
905   ToolkitTestApplication application;
906   tet_infoline(" UtcDaliToolkitTextlabelScrollingN");
907
908   TextLabel label = TextLabel::New("Some text to scroll");
909   DALI_TEST_CHECK( label );
910
911   Stage::GetCurrent().Add( label );
912
913   // Avoid a crash when core load gl resources.
914   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
915
916   // The text scrolling works only on single line text.
917   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
918
919   // Turn on all the effects.
920   label.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
921   label.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
922   label.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
923
924   // Enable the auto scrolling effect.
925   label.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
926
927   // The auto scrolling shouldn't be enabled.
928   const bool enabled = label.GetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL ).Get<bool>();
929   DALI_TEST_CHECK( !enabled );
930
931   END_TEST;
932 }
933
934 int UtcDaliToolkitTextlabelEllipsis(void)
935 {
936   ToolkitTestApplication application;
937   tet_infoline(" UtcDaliToolkitTextlabelEllipsis");
938
939   TextLabel label = TextLabel::New("Hello world");
940   DALI_TEST_CHECK( label );
941
942   // Avoid a crash when core load gl resources.
943   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
944
945   Stage::GetCurrent().Add( label );
946
947   // Turn on all the effects
948   label.SetAnchorPoint( AnchorPoint::CENTER );
949   label.SetParentOrigin( ParentOrigin::CENTER );
950   label.SetSize( 360.0f, 10.f );
951
952   try
953   {
954     // Render the text.
955     application.SendNotification();
956     application.Render();
957   }
958   catch( ... )
959   {
960     tet_result(TET_FAIL);
961   }
962
963   END_TEST;
964 }
965
966 int UtcDaliToolkitTextlabelTextWrapMode(void)
967 {
968   ToolkitTestApplication application;
969   tet_infoline(" UtcDaliToolkitTextlabelTextWarpMode");
970
971   int lineCount =0 ;
972
973   TextLabel label = TextLabel::New();
974   label.SetSize( 300.0f, 300.f );
975   label.SetProperty( TextLabel::Property::TEXT, "Hello world Hello world" );
976   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
977
978
979
980   //label.SetProperty( TextLabel::Property::POINT_SIZE, 18 );
981   Stage::GetCurrent().Add( label );
982
983   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, "WORD" );
984   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::WORD ), TEST_LOCATION );
985
986   application.SendNotification();
987   application.Render();
988
989   lineCount =  label.GetProperty<int>( TextLabel::Property::LINE_COUNT );
990   DALI_TEST_EQUALS( lineCount, 4, TEST_LOCATION );
991
992   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, "CHARACTER" );
993   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::CHARACTER ), TEST_LOCATION );
994
995   application.SendNotification();
996   application.Render();
997
998   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, Text::LineWrap::WORD );
999   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::WORD ), TEST_LOCATION );
1000
1001   application.SendNotification();
1002   application.Render();
1003
1004   lineCount =  label.GetProperty<int>( TextLabel::Property::LINE_COUNT );
1005   DALI_TEST_EQUALS( lineCount, 4, TEST_LOCATION );
1006
1007   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, Text::LineWrap::CHARACTER );
1008   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::CHARACTER ), TEST_LOCATION );
1009
1010   application.SendNotification();
1011   application.Render();
1012
1013   lineCount =  label.GetProperty<int>( TextLabel::Property::LINE_COUNT );
1014   DALI_TEST_EQUALS( lineCount, 3, TEST_LOCATION );
1015
1016   tet_infoline( "Ensure invalid string does not change wrapping mode" );
1017   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, "InvalidWrapMode" );
1018   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::CHARACTER ), TEST_LOCATION );
1019
1020   END_TEST;
1021 }
1022
1023 int UtcDaliToolkitTextLabelColorComponents(void)
1024 {
1025   ToolkitTestApplication application;
1026
1027   TextLabel label = TextLabel::New();
1028   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
1029   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_RED ),   1.0f, TEST_LOCATION );
1030   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_GREEN ), 0.0f, TEST_LOCATION );
1031   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_BLUE ),  0.0f, TEST_LOCATION );
1032   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 1.0f, TEST_LOCATION );
1033
1034   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::GREEN );
1035   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_RED ),   0.0f, TEST_LOCATION );
1036   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_GREEN ), 1.0f, TEST_LOCATION );
1037   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_BLUE ),  0.0f, TEST_LOCATION );
1038   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 1.0f, TEST_LOCATION );
1039
1040   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::BLUE );
1041   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_RED ),   0.0f, TEST_LOCATION );
1042   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_GREEN ), 0.0f, TEST_LOCATION );
1043   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_BLUE ),  1.0f, TEST_LOCATION );
1044   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 1.0f, TEST_LOCATION );
1045
1046   label.SetProperty( TextLabel::Property::TEXT_COLOR_ALPHA, 0.6f );
1047   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 0.6f, TEST_LOCATION );
1048   DALI_TEST_EQUALS( label.GetProperty< Vector4 >( TextLabel::Property::TEXT_COLOR ), Vector4( 0.0f, 0.0f, 1.0f, 0.6f ), TEST_LOCATION );
1049   DALI_TEST_EQUALS( label.GetProperty< Vector4 >( TextLabel::Property::UNUSED_PROPERTY_TEXT_COLOR ), Vector4( 0.0f, 0.0f, 1.0f, 0.6f ), TEST_LOCATION );
1050
1051   END_TEST;
1052 }
1053
1054 int UtcDaliToolkitTextlabelTextStyle01(void)
1055 {
1056   ToolkitTestApplication application;
1057   tet_infoline(" UtcDaliToolkitTextlabelTextStyle Setting Outline after Shadow");
1058
1059   TextLabel label = TextLabel::New();
1060   label.SetSize( 300.0f, 300.f );
1061   label.SetProperty( TextLabel::Property::TEXT, "Hello world Hello world" );
1062   label.SetProperty( TextLabel::Property::POINT_SIZE, 12 );
1063   Stage::GetCurrent().Add( label );
1064
1065   Property::Map outlineMapSet;
1066   Property::Map outlineMapGet;
1067
1068   outlineMapSet["color"] = Color::BLUE;
1069   outlineMapSet["width"] = 2.0f;
1070   label.SetProperty( TextLabel::Property::OUTLINE, outlineMapSet );
1071
1072   application.SendNotification();
1073   application.Render();
1074
1075   Property::Map shadowMapSet;
1076   shadowMapSet.Insert( "color", "green" );
1077   shadowMapSet.Insert( "offset", "2 2" );
1078   shadowMapSet.Insert( "blurRadius", "3" );
1079   label.SetProperty( TextLabel::Property::SHADOW, shadowMapSet );
1080
1081   outlineMapSet["color"] = Color::RED;
1082   outlineMapSet["width"] = 0.0f;
1083   label.SetProperty( TextLabel::Property::OUTLINE, outlineMapSet );
1084
1085   application.SendNotification();
1086   application.Render();
1087
1088   outlineMapGet = label.GetProperty<Property::Map>( TextLabel::Property::OUTLINE );
1089
1090   Property::Value* colorValue = outlineMapGet.Find("color");
1091
1092   bool colorMatched( false );
1093
1094   if ( colorValue )
1095   {
1096      Property::Type valueType = colorValue->GetType();
1097
1098      if ( Property::STRING == valueType )
1099      {
1100        std::string stringValue;
1101        colorValue->Get( stringValue );
1102        if (  stringValue == "red" )
1103        {
1104          colorMatched = true;
1105        }
1106      }
1107      else if ( Property::VECTOR4 == valueType )
1108      {
1109        Vector4 colorVector4;
1110        colorValue->Get( colorVector4 );
1111        if (  colorVector4 == Color::RED )
1112        {
1113          colorMatched = true;
1114        }
1115      }
1116   }
1117
1118   DALI_TEST_EQUALS( colorMatched, true, TEST_LOCATION );
1119
1120   END_TEST;
1121 }