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