Merge "propagate unhandled key( DALI_KEY_SEARCH )" 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
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   END_TEST;
480 }
481
482 int UtcDaliToolkitTextlabelAtlasRenderP(void)
483 {
484   ToolkitTestApplication application;
485   tet_infoline(" UtcDaliToolkitTextLabelAtlasRenderP");
486   TextLabel label = TextLabel::New("Test Text");
487   DALI_TEST_CHECK( label );
488
489   // Avoid a crash when core load gl resources.
490   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
491
492   Stage::GetCurrent().Add( label );
493
494   // Turn on all the effects
495   label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
496   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
497   label.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
498   label.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::RED );
499   label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 1.0f, 1.0f ) );
500   label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLUE );
501
502   try
503   {
504     // Render some text with the shared atlas backend
505     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_SHARED_ATLAS );
506     application.SendNotification();
507     application.Render();
508   }
509   catch( ... )
510   {
511     tet_result(TET_FAIL);
512   }
513
514   try
515   {
516     // Render some text with the shared atlas backend
517     label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_VECTOR_BASED );
518     application.SendNotification();
519     application.Render();
520   }
521   catch( ... )
522   {
523     tet_result(TET_FAIL);
524   }
525   END_TEST;
526 }
527
528 int UtcDaliToolkitTextLabelLanguagesP(void)
529 {
530   ToolkitTestApplication application;
531   tet_infoline(" UtcDaliToolkitTextLabelLanguagesP");
532   TextLabel label = TextLabel::New();
533   DALI_TEST_CHECK( label );
534
535   Stage::GetCurrent().Add( label );
536
537   const std::string scripts( " привет мир, γειά σου Κόσμε, Hello world, مرحبا بالعالم, שלום עולם, "
538                              "բարեւ աշխարհը, მსოფლიოში, 안녕하세요, 你好世界, ひらがな, カタカナ, "
539                              "ওহে বিশ্ব, မင်္ဂလာပါကမ္ဘာလောက, हैलो वर्ल्ड, હેલો વર્લ્ડ, ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਦੁਨਿਆ, ಹಲೋ ವರ್ಲ್ಡ್, "
540                              "ഹലോ വേൾഡ്, ଓଡ଼ିଆ, හෙලෝ වර්ල්ඩ්, ஹலோ உலகம், హలో వరల్డ్, "
541                              "ສະບາຍດີໂລກ, สวัสดีโลก, ជំរាបសួរពិភពលោក, "
542                              "\xF0\x9F\x98\x81 \xF0\x9F\x98\x82 \xF0\x9F\x98\x83 \xF0\x9F\x98\x84." ); // these characters on the last line are emojis.
543
544   label.SetProperty( TextLabel::Property::TEXT, scripts );
545   DALI_TEST_EQUALS( label.GetProperty<std::string>( TextLabel::Property::TEXT ), scripts, TEST_LOCATION );
546
547   application.SendNotification();
548   application.Render();
549
550   END_TEST;
551 }
552
553 int UtcDaliToolkitTextLabelEmojisP(void)
554 {
555   ToolkitTestApplication application;
556   tet_infoline(" UtcDaliToolkitTextLabelLanguagesP");
557   TextLabel label = TextLabel::New();
558   DALI_TEST_CHECK( label );
559
560   Stage::GetCurrent().Add( label );
561
562   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
563
564   char* pathNamePtr = get_current_dir_name();
565   const std::string pathName( pathNamePtr );
566   free( pathNamePtr );
567
568   TextAbstraction::FontDescription fontDescription;
569   fontDescription.path = pathName + DEFAULT_FONT_DIR + "/tizen/BreezeColorEmoji.ttf";
570   fontDescription.family = "BreezeColorEmoji";
571   fontDescription.width = TextAbstraction::FontWidth::NONE;
572   fontDescription.weight = TextAbstraction::FontWeight::NORMAL;
573   fontDescription.slant = TextAbstraction::FontSlant::NONE;
574
575   fontClient.GetFontId( fontDescription, EMOJI_FONT_SIZE );
576
577   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>";
578   label.SetProperty( TextLabel::Property::ENABLE_MARKUP, true );
579   label.SetProperty( TextLabel::Property::TEXT, emojis );
580
581   Property::Map shadowMap;
582   shadowMap.Insert( "color", "green" );
583   shadowMap.Insert( "offset", "2 2" );
584   label.SetProperty( TextLabel::Property::SHADOW, shadowMap );
585
586   application.SendNotification();
587   application.Render();
588
589   END_TEST;
590 }
591
592 int UtcDaliToolkitTextlabelScrollingP(void)
593 {
594   ToolkitTestApplication application;
595   tet_infoline(" UtcDaliToolkitTextLabelScrollingP");
596   TextLabel labelImmediate = TextLabel::New("Some text to scroll");
597   TextLabel labelFinished = TextLabel::New("مرحبا بالعالم");
598
599   DALI_TEST_CHECK( labelImmediate );
600   DALI_TEST_CHECK( labelFinished );
601   // Avoid a crash when core load gl resources.
602   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
603   Stage::GetCurrent().Add( labelImmediate );
604   // Turn on all the effects
605   labelImmediate.SetProperty( TextLabel::Property::MULTI_LINE, false );
606   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
607   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
608   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
609   labelImmediate.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
610
611   Stage::GetCurrent().Add( labelFinished );
612   // Turn on all the effects
613   labelFinished.SetProperty( TextLabel::Property::MULTI_LINE, false );
614   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
615   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
616   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
617   labelFinished.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
618
619
620
621   try
622   {
623     // Render some text with the shared atlas backend
624     labelImmediate.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
625     labelFinished.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
626     application.SendNotification();
627     application.Render();
628
629     labelImmediate.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
630     labelFinished.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
631     application.SendNotification();
632     application.Render();
633
634   }
635   catch( ... )
636   {
637     tet_result(TET_FAIL);
638   }
639
640   END_TEST;
641 }
642
643 int UtcDaliToolkitTextlabelScrollingCenterAlignP(void)
644 {
645   ToolkitTestApplication application;
646   TextLabel labelShort = TextLabel::New("Some text to scroll");
647   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!");
648
649   DALI_TEST_CHECK( labelShort );
650   DALI_TEST_CHECK( labelLong );
651   // Avoid a crash when core load gl resources.
652   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
653   Stage::GetCurrent().Add( labelShort );
654   // Turn on all the effects
655   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
656   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
657   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
658   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
659   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
660   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
661
662   Stage::GetCurrent().Add( labelLong );
663   // Turn on all the effects
664   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
665   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
666   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
667   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
668   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
669   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
670
671   try
672   {
673     // Render some text with the shared atlas backend
674     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
675     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
676     application.SendNotification();
677     application.Render();
678
679     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
680     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
681     application.SendNotification();
682     application.Render();
683
684   }
685   catch( ... )
686   {
687     tet_result(TET_FAIL);
688   }
689
690   END_TEST;
691 }
692
693 int UtcDaliToolkitTextlabelScrollingCenterAlignRTLP(void)
694 {
695   ToolkitTestApplication application;
696   TextLabel labelShort = TextLabel::New("مرحبا بالعالم");
697   TextLabel labelLong = TextLabel::New("لكن لا بد أن أوضح لك أن كل هذه الأفكار المغلوطة حول استنكار  النشوة وتمجيد الألم نشأت بالفعل، وسأعرض لك التفاصيل لتكتشف حقيقة وأساس تلك السعادة البشرية، فلا أحد يرفض أو يكره أو يتجنب الشعور بالسعادة، ولكن بفضل هؤلاء الأشخاص الذين لا يدركون بأن السعادة لا بد أن نستشعرها بصورة أكثر عقلانية ومنطقية فيعرضهم هذا لمواجهة الظروف الأليمة، وأكرر بأنه لا يوجد من يرغب في الحب ونيل المنال ويتلذذ بالآلام، الألم هو الألم ولكن نتيجة لظروف ما قد تكمن السعاده فيما نتحمله من كد وأسي");
698
699   DALI_TEST_CHECK( labelShort );
700   DALI_TEST_CHECK( labelLong );
701   // Avoid a crash when core load gl resources.
702   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
703   Stage::GetCurrent().Add( labelShort );
704   // Turn on all the effects
705   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
706   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
707   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
708   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
709   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
710   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
711
712   Stage::GetCurrent().Add( labelLong );
713   // Turn on all the effects
714   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
715   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
716   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
717   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
718   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
719   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
720
721   try
722   {
723     // Render some text with the shared atlas backend
724     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
725     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
726     application.SendNotification();
727     application.Render();
728
729     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
730     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
731     application.SendNotification();
732     application.Render();
733
734   }
735   catch( ... )
736   {
737     tet_result(TET_FAIL);
738   }
739
740   END_TEST;
741 }
742
743 int UtcDaliToolkitTextlabelScrollingEndAlignP(void)
744 {
745   ToolkitTestApplication application;
746   TextLabel labelShort = TextLabel::New("Some text to scroll");
747   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!");
748
749   DALI_TEST_CHECK( labelShort );
750   DALI_TEST_CHECK( labelLong );
751   // Avoid a crash when core load gl resources.
752   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
753   Stage::GetCurrent().Add( labelShort );
754   // Turn on all the effects
755   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
756   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
757   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
758   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
759   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
760   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
761
762   Stage::GetCurrent().Add( labelLong );
763   // Turn on all the effects
764   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
765   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
766   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
767   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
768   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
769   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
770
771   try
772   {
773     // Render some text with the shared atlas backend
774     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
775     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
776     application.SendNotification();
777     application.Render();
778
779     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
780     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
781     application.SendNotification();
782     application.Render();
783
784   }
785   catch( ... )
786   {
787     tet_result(TET_FAIL);
788   }
789
790   END_TEST;
791 }
792
793 int UtcDaliToolkitTextlabelScrollingEndAlignRTLP(void)
794 {
795   ToolkitTestApplication application;
796   TextLabel labelShort = TextLabel::New("مرحبا بالعالم");
797   TextLabel labelLong = TextLabel::New("لكن لا بد أن أوضح لك أن كل هذه الأفكار المغلوطة حول استنكار  النشوة وتمجيد الألم نشأت بالفعل، وسأعرض لك التفاصيل لتكتشف حقيقة وأساس تلك السعادة البشرية، فلا أحد يرفض أو يكره أو يتجنب الشعور بالسعادة، ولكن بفضل هؤلاء الأشخاص الذين لا يدركون بأن السعادة لا بد أن نستشعرها بصورة أكثر عقلانية ومنطقية فيعرضهم هذا لمواجهة الظروف الأليمة، وأكرر بأنه لا يوجد من يرغب في الحب ونيل المنال ويتلذذ بالآلام، الألم هو الألم ولكن نتيجة لظروف ما قد تكمن السعاده فيما نتحمله من كد وأسي");
798
799   DALI_TEST_CHECK( labelShort );
800   DALI_TEST_CHECK( labelLong );
801   // Avoid a crash when core load gl resources.
802   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
803   Stage::GetCurrent().Add( labelShort );
804   // Turn on all the effects
805   labelShort.SetProperty( TextLabel::Property::MULTI_LINE, false );
806   labelShort.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
807   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
808   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
809   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
810   labelShort.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE );
811
812   Stage::GetCurrent().Add( labelLong );
813   // Turn on all the effects
814   labelLong.SetProperty( TextLabel::Property::MULTI_LINE, false );
815   labelLong.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "END" );
816   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
817   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
818   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
819   labelLong.SetProperty( TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP );
820
821   try
822   {
823     // Render some text with the shared atlas backend
824     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
825     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
826     application.SendNotification();
827     application.Render();
828
829     labelShort.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
830     labelLong.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, false );
831     application.SendNotification();
832     application.Render();
833
834   }
835   catch( ... )
836   {
837     tet_result(TET_FAIL);
838   }
839
840   END_TEST;
841 }
842
843 int UtcDaliToolkitTextlabelScrollingInterruptedP(void)
844 {
845   ToolkitTestApplication application;
846   tet_infoline(" UtcDaliToolkitTextlabelScrollingInterruptedP");
847   TextLabel label = TextLabel::New("Some text to scroll");
848   DALI_TEST_CHECK( label );
849   // Avoid a crash when core load gl resources.
850   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
851   Stage::GetCurrent().Add( label );
852   label.SetSize( 360.0f, 20.f );
853   // Turn on all the effects
854   label.SetProperty( TextLabel::Property::MULTI_LINE, false );
855   label.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
856   label.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
857   label.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
858
859   // Render the text.
860   application.SendNotification();
861   application.Render();
862
863   unsigned int actorCount1 = label.GetChildCount();
864   tet_printf("Initial actor count is(%d)\n", actorCount1 );
865
866   try
867   {
868     // Render some text with the shared atlas backend
869     label.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
870     application.SendNotification();
871     application.Render(2000);
872
873     unsigned int actorCount1 = label.GetChildCount();
874     tet_printf("Actor count after scrolling is(%d)\n", actorCount1 );
875
876     label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
877
878     // Render the text.
879     application.SendNotification();
880     application.Render();
881
882     unsigned int actorCount2 = label.GetChildCount();
883     tet_printf("After changing color the actor count is(%d)\n", actorCount2 );
884
885     DALI_TEST_EQUALS( actorCount1, actorCount2, TEST_LOCATION );
886
887   }
888   catch( ... )
889   {
890     tet_result(TET_FAIL);
891   }
892
893   END_TEST;
894 }
895
896 int UtcDaliToolkitTextlabelScrollingN(void)
897 {
898   ToolkitTestApplication application;
899   tet_infoline(" UtcDaliToolkitTextlabelScrollingN");
900
901   TextLabel label = TextLabel::New("Some text to scroll");
902   DALI_TEST_CHECK( label );
903
904   Stage::GetCurrent().Add( label );
905
906   // Avoid a crash when core load gl resources.
907   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
908
909   // The text scrolling works only on single line text.
910   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
911
912   // Turn on all the effects.
913   label.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
914   label.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
915   label.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
916
917   // Enable the auto scrolling effect.
918   label.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
919
920   // The auto scrolling shouldn't be enabled.
921   const bool enabled = label.GetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL ).Get<bool>();
922   DALI_TEST_CHECK( !enabled );
923
924   END_TEST;
925 }
926
927 int UtcDaliToolkitTextlabelEllipsis(void)
928 {
929   ToolkitTestApplication application;
930   tet_infoline(" UtcDaliToolkitTextlabelEllipsis");
931
932   TextLabel label = TextLabel::New("Hello world");
933   DALI_TEST_CHECK( label );
934
935   // Avoid a crash when core load gl resources.
936   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
937
938   Stage::GetCurrent().Add( label );
939
940   // Turn on all the effects
941   label.SetAnchorPoint( AnchorPoint::CENTER );
942   label.SetParentOrigin( ParentOrigin::CENTER );
943   label.SetSize( 360.0f, 10.f );
944
945   try
946   {
947     // Render the text.
948     application.SendNotification();
949     application.Render();
950   }
951   catch( ... )
952   {
953     tet_result(TET_FAIL);
954   }
955
956   END_TEST;
957 }
958
959 int UtcDaliToolkitTextlabelTextWrapMode(void)
960 {
961   ToolkitTestApplication application;
962   tet_infoline(" UtcDaliToolkitTextlabelTextWarpMode");
963
964   int lineCount =0 ;
965
966   TextLabel label = TextLabel::New();
967   label.SetSize( 300.0f, 300.f );
968   label.SetProperty( TextLabel::Property::TEXT, "Hello world Hello world" );
969   label.SetProperty( TextLabel::Property::MULTI_LINE, true );
970
971
972
973   //label.SetProperty( TextLabel::Property::POINT_SIZE, 18 );
974   Stage::GetCurrent().Add( label );
975
976   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, "WORD" );
977   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::WORD ), TEST_LOCATION );
978
979   application.SendNotification();
980   application.Render();
981
982   lineCount =  label.GetProperty<int>( TextLabel::Property::LINE_COUNT );
983   DALI_TEST_EQUALS( lineCount, 4, TEST_LOCATION );
984
985   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, "CHARACTER" );
986   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::CHARACTER ), TEST_LOCATION );
987
988   application.SendNotification();
989   application.Render();
990
991   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, Text::LineWrap::WORD );
992   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::WORD ), TEST_LOCATION );
993
994   application.SendNotification();
995   application.Render();
996
997   lineCount =  label.GetProperty<int>( TextLabel::Property::LINE_COUNT );
998   DALI_TEST_EQUALS( lineCount, 4, TEST_LOCATION );
999
1000   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, Text::LineWrap::CHARACTER );
1001   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::CHARACTER ), TEST_LOCATION );
1002
1003   application.SendNotification();
1004   application.Render();
1005
1006   lineCount =  label.GetProperty<int>( TextLabel::Property::LINE_COUNT );
1007   DALI_TEST_EQUALS( lineCount, 3, TEST_LOCATION );
1008
1009   tet_infoline( "Ensure invalid string does not change wrapping mode" );
1010   label.SetProperty( TextLabel::Property::LINE_WRAP_MODE, "InvalidWrapMode" );
1011   DALI_TEST_EQUALS( label.GetProperty< int >( TextLabel::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::CHARACTER ), TEST_LOCATION );
1012
1013   END_TEST;
1014 }
1015
1016 int UtcDaliToolkitTextLabelColorComponents(void)
1017 {
1018   ToolkitTestApplication application;
1019
1020   TextLabel label = TextLabel::New();
1021   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
1022   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_RED ),   1.0f, TEST_LOCATION );
1023   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_GREEN ), 0.0f, TEST_LOCATION );
1024   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_BLUE ),  0.0f, TEST_LOCATION );
1025   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 1.0f, TEST_LOCATION );
1026
1027   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::GREEN );
1028   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_RED ),   0.0f, TEST_LOCATION );
1029   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_GREEN ), 1.0f, TEST_LOCATION );
1030   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_BLUE ),  0.0f, TEST_LOCATION );
1031   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 1.0f, TEST_LOCATION );
1032
1033   label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::BLUE );
1034   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_RED ),   0.0f, TEST_LOCATION );
1035   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_GREEN ), 0.0f, TEST_LOCATION );
1036   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_BLUE ),  1.0f, TEST_LOCATION );
1037   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 1.0f, TEST_LOCATION );
1038
1039   label.SetProperty( TextLabel::Property::TEXT_COLOR_ALPHA, 0.6f );
1040   DALI_TEST_EQUALS( label.GetProperty< float >( TextLabel::Property::TEXT_COLOR_ALPHA ), 0.6f, TEST_LOCATION );
1041   DALI_TEST_EQUALS( label.GetProperty< Vector4 >( TextLabel::Property::TEXT_COLOR ), Vector4( 0.0f, 0.0f, 1.0f, 0.6f ), TEST_LOCATION );
1042   DALI_TEST_EQUALS( label.GetProperty< Vector4 >( TextLabel::Property::UNUSED_PROPERTY_TEXT_COLOR ), Vector4( 0.0f, 0.0f, 1.0f, 0.6f ), TEST_LOCATION );
1043
1044   END_TEST;
1045 }
1046
1047 int UtcDaliToolkitTextlabelTextStyle01(void)
1048 {
1049   ToolkitTestApplication application;
1050   tet_infoline(" UtcDaliToolkitTextlabelTextStyle Setting Outline after Shadow");
1051
1052   TextLabel label = TextLabel::New();
1053   label.SetSize( 300.0f, 300.f );
1054   label.SetProperty( TextLabel::Property::TEXT, "Hello world Hello world" );
1055   label.SetProperty( TextLabel::Property::POINT_SIZE, 12 );
1056   Stage::GetCurrent().Add( label );
1057
1058   Property::Map outlineMapSet;
1059   Property::Map outlineMapGet;
1060
1061   outlineMapSet["color"] = Color::BLUE;
1062   outlineMapSet["width"] = 2.0f;
1063   label.SetProperty( TextLabel::Property::OUTLINE, outlineMapSet );
1064
1065   application.SendNotification();
1066   application.Render();
1067
1068   Property::Map shadowMapSet;
1069   shadowMapSet.Insert( "color", "green" );
1070   shadowMapSet.Insert( "offset", "2 2" );
1071   shadowMapSet.Insert( "blurRadius", "3" );
1072   label.SetProperty( TextLabel::Property::SHADOW, shadowMapSet );
1073
1074   outlineMapSet["color"] = Color::RED;
1075   outlineMapSet["width"] = 0.0f;
1076   label.SetProperty( TextLabel::Property::OUTLINE, outlineMapSet );
1077
1078   application.SendNotification();
1079   application.Render();
1080
1081   outlineMapGet = label.GetProperty<Property::Map>( TextLabel::Property::OUTLINE );
1082
1083   Property::Value* colorValue = outlineMapGet.Find("color");
1084
1085   bool colorMatched( false );
1086
1087   if ( colorValue )
1088   {
1089      Property::Type valueType = colorValue->GetType();
1090
1091      if ( Property::STRING == valueType )
1092      {
1093        std::string stringValue;
1094        colorValue->Get( stringValue );
1095        if (  stringValue == "red" )
1096        {
1097          colorMatched = true;
1098        }
1099      }
1100      else if ( Property::VECTOR4 == valueType )
1101      {
1102        Vector4 colorVector4;
1103        colorValue->Get( colorVector4 );
1104        if (  colorVector4 == Color::RED )
1105        {
1106          colorMatched = true;
1107        }
1108      }
1109   }
1110
1111   DALI_TEST_EQUALS( colorMatched, true, TEST_LOCATION );
1112
1113   END_TEST;
1114 }