2 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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 #include <dali-toolkit/devel-api/controls/text-controls/text-style-properties-devel.h>
26 #include <dali-toolkit/devel-api/text/bitmap-font.h>
27 #include <dali-toolkit/devel-api/text/rendering-backend.h>
28 #include <dali-toolkit/devel-api/text/text-enumerations-devel.h>
29 #include <dali-toolkit/devel-api/text/text-utils-devel.h>
30 #include <dali/devel-api/adaptor-framework/image-loading.h>
31 #include <dali/devel-api/text-abstraction/bitmap-font.h>
32 #include <dali/devel-api/text-abstraction/font-client.h>
33 #include "test-text-geometry-utils.h"
36 using namespace Toolkit;
38 void dali_textlabel_startup(void)
40 test_return_value = TET_UNDEF;
43 void dali_textlabel_cleanup(void)
45 test_return_value = TET_PASS;
50 const char* const PROPERTY_NAME_RENDERING_BACKEND = "renderingBackend";
51 const char* const PROPERTY_NAME_TEXT = "text";
52 const char* const PROPERTY_NAME_FONT_FAMILY = "fontFamily";
53 const char* const PROPERTY_NAME_FONT_STYLE = "fontStyle";
54 const char* const PROPERTY_NAME_POINT_SIZE = "pointSize";
55 const char* const PROPERTY_NAME_MULTI_LINE = "multiLine";
56 const char* const PROPERTY_NAME_HORIZONTAL_ALIGNMENT = "horizontalAlignment";
57 const char* const PROPERTY_NAME_VERTICAL_ALIGNMENT = "verticalAlignment";
58 const char* const PROPERTY_NAME_TEXT_COLOR = "textColor";
59 const char* const PROPERTY_NAME_ENABLE_MARKUP = "enableMarkup";
60 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL = "enableAutoScroll";
61 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL_SPEED = "autoScrollSpeed";
62 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL_LOOPS = "autoScrollLoopCount";
63 const char* const PROPERTY_NAME_ENABLE_AUTO_SCROLL_GAP = "autoScrollGap";
65 const char* const PROPERTY_NAME_LINE_SPACING = "lineSpacing";
66 const char* const PROPERTY_NAME_UNDERLINE = "underline";
67 const char* const PROPERTY_NAME_SHADOW = "shadow";
68 const char* const PROPERTY_NAME_EMBOSS = "emboss";
69 const char* const PROPERTY_NAME_OUTLINE = "outline";
70 const char* const PROPERTY_NAME_BACKGROUND = "textBackground";
71 const char* const PROPERTY_NAME_STRIKETHROUGH = "strikethrough";
73 const char* const PROPERTY_NAME_PIXEL_SIZE = "pixelSize";
74 const char* const PROPERTY_NAME_ELLIPSIS = "ellipsis";
75 const char* const PROPERTY_NAME_AUTO_SCROLL_LOOP_DELAY = "autoScrollLoopDelay";
76 const char* const PROPERTY_NAME_FONT_SIZE_SCALE = "fontSizeScale";
77 const char* const PROPERTY_NAME_ENABLE_FONT_SIZE_SCALE = "enableFontSizeScale";
79 const char* const PROPERTY_NAME_ELLIPSIS_POSITION = "ellipsisPosition";
81 const std::string DEFAULT_FONT_DIR("/resources/fonts");
82 const unsigned int EMOJI_FONT_SIZE = 3840u; // 60 * 64
84 static bool gAnchorClickedCallBackCalled;
85 static bool gAnchorClickedCallBackNotCalled;
87 static bool gTextFitChangedCallBackCalled;
89 struct CallbackFunctor
91 CallbackFunctor(bool* callbackFlag)
92 : mCallbackFlag(callbackFlag)
98 *mCallbackFlag = true;
103 static void TestAnchorClickedCallback(TextLabel control, const char* href, unsigned int hrefLength)
105 tet_infoline(" TestAnchorClickedCallback");
107 gAnchorClickedCallBackNotCalled = false;
109 if(!strcmp(href, "https://www.tizen.org") && hrefLength == strlen(href))
111 gAnchorClickedCallBackCalled = true;
115 static void TestTextFitChangedCallback(TextLabel control)
117 tet_infoline(" TestTextFitChangedCallback");
118 gTextFitChangedCallBackCalled = true;
121 bool DaliTestCheckMaps(const Property::Map& mapGet, const Property::Map& mapSet, const std::vector<std::string>& indexConversionTable = std::vector<std::string>())
123 const Property::Map::SizeType size = mapGet.Count();
125 if(size == mapSet.Count())
127 for(unsigned int index = 0u; index < size; ++index)
129 const KeyValuePair& valueGet = mapGet.GetKeyValue(index);
131 // Find the keys of the 'get' map
132 Property::Index indexKey = valueGet.first.indexKey;
133 std::string stringKey = valueGet.first.stringKey;
135 if(!indexConversionTable.empty())
137 if(stringKey.empty())
139 stringKey = indexConversionTable[indexKey];
142 if((indexKey == Property::INVALID_INDEX) && !stringKey.empty())
144 Property::Index index = 0u;
145 for(auto key : indexConversionTable)
157 const Property::Value* const valueSet = mapSet.Find(indexKey, stringKey);
159 if(nullptr != valueSet)
161 if((valueSet->GetType() == Dali::Property::STRING) && (valueGet.second.Get<std::string>() != valueSet->Get<std::string>()))
163 tet_printf("Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str());
166 else if((valueSet->GetType() == Dali::Property::BOOLEAN) && (valueGet.second.Get<bool>() != valueSet->Get<bool>()))
168 tet_printf("Value got : [%d], expected : [%d]", valueGet.second.Get<bool>(), valueSet->Get<bool>());
171 else if((valueSet->GetType() == Dali::Property::INTEGER) && (valueGet.second.Get<int>() != valueSet->Get<int>()))
173 tet_printf("Value got : [%d], expected : [%d]", valueGet.second.Get<int>(), valueSet->Get<int>());
176 else if((valueSet->GetType() == Dali::Property::FLOAT) && (valueGet.second.Get<float>() != valueSet->Get<float>()))
178 tet_printf("Value got : [%f], expected : [%f]", valueGet.second.Get<float>(), valueSet->Get<float>());
181 else if((valueSet->GetType() == Dali::Property::VECTOR2) && (valueGet.second.Get<Vector2>() != valueSet->Get<Vector2>()))
183 Vector2 vector2Get = valueGet.second.Get<Vector2>();
184 Vector2 vector2Set = valueSet->Get<Vector2>();
185 tet_printf("Value got : [%f, %f], expected : [%f, %f]", vector2Get.x, vector2Get.y, vector2Set.x, vector2Set.y);
188 else if((valueSet->GetType() == Dali::Property::VECTOR4) && (valueGet.second.Get<Vector4>() != valueSet->Get<Vector4>()))
190 Vector4 vector4Get = valueGet.second.Get<Vector4>();
191 Vector4 vector4Set = valueSet->Get<Vector4>();
192 tet_printf("Value got : [%f, %f, %f, %f], expected : [%f, %f, %f, %f]", vector4Get.r, vector4Get.g, vector4Get.b, vector4Get.a, vector4Set.r, vector4Set.g, vector4Set.b, vector4Set.a);
198 if(valueGet.first.type == Property::Key::INDEX)
200 tet_printf(" The key %d doesn't exist.", valueGet.first.indexKey);
204 tet_printf(" The key %s doesn't exist.", valueGet.first.stringKey.c_str());
216 int UtcDaliToolkitTextLabelConstructorP(void)
218 ToolkitTestApplication application;
219 tet_infoline(" UtcDaliToolkitTextLabelConstructorP");
221 DALI_TEST_CHECK(!textLabel);
225 int UtcDaliToolkitTextLabelNewP(void)
227 ToolkitTestApplication application;
228 tet_infoline(" UtcDaliToolkitTextLabelNewP");
229 TextLabel textLabel = TextLabel::New("Test Text");
230 DALI_TEST_CHECK(textLabel);
234 int UtcDaliToolkitTextLabelDownCastP(void)
236 ToolkitTestApplication application;
237 tet_infoline(" UtcDaliToolkitTextLabelDownCastP");
238 TextLabel textLabel1 = TextLabel::New();
239 BaseHandle object(textLabel1);
241 TextLabel textLabel2 = TextLabel::DownCast(object);
242 DALI_TEST_CHECK(textLabel2);
244 TextLabel textLabel3 = DownCast<TextLabel>(object);
245 DALI_TEST_CHECK(textLabel3);
249 int UtcDaliToolkitTextLabelDownCastN(void)
251 ToolkitTestApplication application;
252 tet_infoline(" UtcDaliToolkitTextLabelDownCastN");
253 BaseHandle uninitializedObject;
254 TextLabel textLabel1 = TextLabel::DownCast(uninitializedObject);
255 DALI_TEST_CHECK(!textLabel1);
257 TextLabel textLabel2 = DownCast<TextLabel>(uninitializedObject);
258 DALI_TEST_CHECK(!textLabel2);
262 int UtcDaliToolkitTextLabelCopyConstructorP(void)
264 ToolkitTestApplication application;
265 tet_infoline(" UtcDaliToolkitTextLabelCopyConstructorP");
266 TextLabel textLabel = TextLabel::New();
267 textLabel.SetProperty(TextLabel::Property::TEXT_COLOR, Color::RED);
269 TextLabel copy(textLabel);
270 DALI_TEST_CHECK(copy);
271 DALI_TEST_CHECK(copy.GetProperty<Vector4>(TextLabel::Property::TEXT_COLOR) == textLabel.GetProperty<Vector4>(TextLabel::Property::TEXT_COLOR));
275 int UtcDaliTextLabelMoveConstructor(void)
277 ToolkitTestApplication application;
279 TextLabel textLabel = TextLabel::New();
280 textLabel.SetProperty(TextLabel::Property::TEXT, "Test");
281 DALI_TEST_CHECK(textLabel.GetProperty<std::string>(TextLabel::Property::TEXT) == "Test");
283 TextLabel moved = std::move(textLabel);
284 DALI_TEST_CHECK(moved);
285 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
286 DALI_TEST_CHECK(moved.GetProperty<std::string>(TextLabel::Property::TEXT) == "Test");
287 DALI_TEST_CHECK(!textLabel);
292 int UtcDaliToolkitTextLabelAssignmentOperatorP(void)
294 ToolkitTestApplication application;
295 tet_infoline(" UtcDaliToolkitTextLabelAssingmentOperatorP");
296 TextLabel textLabel = TextLabel::New();
297 textLabel.SetProperty(TextLabel::Property::TEXT_COLOR, Color::RED);
299 TextLabel copy = textLabel;
300 DALI_TEST_CHECK(copy);
301 DALI_TEST_CHECK(copy.GetProperty<Vector4>(TextLabel::Property::TEXT_COLOR) == textLabel.GetProperty<Vector4>(TextLabel::Property::TEXT_COLOR));
305 int UtcDaliTextLabelMoveAssignment(void)
307 ToolkitTestApplication application;
309 TextLabel textLabel = TextLabel::New();
310 textLabel.SetProperty(TextLabel::Property::TEXT, "Test");
311 DALI_TEST_CHECK(textLabel.GetProperty<std::string>(TextLabel::Property::TEXT) == "Test");
314 moved = std::move(textLabel);
315 DALI_TEST_CHECK(moved);
316 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
317 DALI_TEST_CHECK(moved.GetProperty<std::string>(TextLabel::Property::TEXT) == "Test");
318 DALI_TEST_CHECK(!textLabel);
323 // Positive test case for a method
324 int UtcDaliToolkitTextLabelGetPropertyP(void)
326 ToolkitTestApplication application;
327 tet_infoline(" UtcDaliToolkitTextLabelGetPropertyP");
328 TextLabel label = TextLabel::New("Test Text");
329 DALI_TEST_CHECK(label);
331 // Check Property Indices are correct
332 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_RENDERING_BACKEND) == DevelTextLabel::Property::RENDERING_BACKEND);
333 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_TEXT) == TextLabel::Property::TEXT);
334 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_FONT_FAMILY) == TextLabel::Property::FONT_FAMILY);
335 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_FONT_STYLE) == TextLabel::Property::FONT_STYLE);
336 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_POINT_SIZE) == TextLabel::Property::POINT_SIZE);
337 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_MULTI_LINE) == TextLabel::Property::MULTI_LINE);
338 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_HORIZONTAL_ALIGNMENT) == TextLabel::Property::HORIZONTAL_ALIGNMENT);
339 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_VERTICAL_ALIGNMENT) == TextLabel::Property::VERTICAL_ALIGNMENT);
340 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_TEXT_COLOR) == TextLabel::Property::TEXT_COLOR);
341 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ENABLE_MARKUP) == TextLabel::Property::ENABLE_MARKUP);
342 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ENABLE_AUTO_SCROLL) == TextLabel::Property::ENABLE_AUTO_SCROLL);
343 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ENABLE_AUTO_SCROLL_SPEED) == TextLabel::Property::AUTO_SCROLL_SPEED);
344 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ENABLE_AUTO_SCROLL_LOOPS) == TextLabel::Property::AUTO_SCROLL_LOOP_COUNT);
345 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ENABLE_AUTO_SCROLL_GAP) == TextLabel::Property::AUTO_SCROLL_GAP);
346 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_LINE_SPACING) == TextLabel::Property::LINE_SPACING);
347 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_UNDERLINE) == TextLabel::Property::UNDERLINE);
348 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_SHADOW) == TextLabel::Property::SHADOW);
349 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_EMBOSS) == TextLabel::Property::EMBOSS);
350 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_OUTLINE) == TextLabel::Property::OUTLINE);
351 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_BACKGROUND) == DevelTextLabel::Property::BACKGROUND);
352 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_PIXEL_SIZE) == TextLabel::Property::PIXEL_SIZE);
353 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ELLIPSIS) == TextLabel::Property::ELLIPSIS);
354 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_AUTO_SCROLL_LOOP_DELAY) == TextLabel::Property::AUTO_SCROLL_LOOP_DELAY);
355 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_FONT_SIZE_SCALE) == DevelTextLabel::Property::FONT_SIZE_SCALE);
356 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ENABLE_FONT_SIZE_SCALE) == DevelTextLabel::Property::ENABLE_FONT_SIZE_SCALE);
357 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_ELLIPSIS_POSITION) == DevelTextLabel::Property::ELLIPSIS_POSITION);
358 DALI_TEST_CHECK(label.GetPropertyIndex(PROPERTY_NAME_STRIKETHROUGH) == DevelTextLabel::Property::STRIKETHROUGH);
363 int UtcDaliToolkitTextLabelSetPropertyP(void)
365 ToolkitTestApplication application;
366 tet_infoline(" UtcDaliToolkitTextLabelSetPropertyP");
367 TextLabel label = TextLabel::New();
368 DALI_TEST_CHECK(label);
370 application.GetScene().Add(label);
372 // Note - we can't check the defaults since the stylesheets are platform-specific
373 label.SetProperty(DevelTextLabel::Property::RENDERING_BACKEND, DevelText::RENDERING_SHARED_ATLAS);
374 DALI_TEST_EQUALS((DevelText::RenderingType)label.GetProperty<int>(DevelTextLabel::Property::RENDERING_BACKEND), DevelText::RENDERING_SHARED_ATLAS, TEST_LOCATION);
376 // Check that text can be correctly reset
377 label.SetProperty(TextLabel::Property::TEXT, "Setting Text");
378 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::TEXT), std::string("Setting Text"), TEST_LOCATION);
380 // Check font properties.
381 label.SetProperty(TextLabel::Property::FONT_FAMILY, "Setting font family");
382 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::FONT_FAMILY), std::string("Setting font family"), TEST_LOCATION);
384 Property::Map fontStyleMapSet;
385 Property::Map fontStyleMapGet;
387 fontStyleMapSet.Insert("weight", "bold");
388 fontStyleMapSet.Insert("width", "condensed");
389 fontStyleMapSet.Insert("slant", "italic");
390 label.SetProperty(TextLabel::Property::FONT_STYLE, fontStyleMapSet);
392 fontStyleMapGet = label.GetProperty<Property::Map>(TextLabel::Property::FONT_STYLE);
393 DALI_TEST_EQUALS(fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION);
394 DALI_TEST_EQUALS(DaliTestCheckMaps(fontStyleMapGet, fontStyleMapSet), true, TEST_LOCATION);
396 // Check the old font style format.
397 fontStyleMapSet.Clear();
398 fontStyleMapSet.Insert("weight", "thin");
399 fontStyleMapSet.Insert("width", "expanded");
400 fontStyleMapSet.Insert("slant", "oblique");
401 const std::string strFontStyle = "{\"weight\":\"thin\",\"width\":\"expanded\",\"slant\":\"oblique\"}";
403 label.SetProperty(TextLabel::Property::FONT_STYLE, "{\"weight\":\"thin\",\"width\":\"expanded\",\"slant\":\"oblique\"}");
404 std::string getFontStyle = label.GetProperty<std::string>(TextLabel::Property::FONT_STYLE);
405 DALI_TEST_EQUALS(getFontStyle, strFontStyle, TEST_LOCATION);
407 label.SetProperty(TextLabel::Property::POINT_SIZE, 10.f);
408 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::POINT_SIZE), 10.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
410 label.SetProperty(DevelTextLabel::Property::FONT_SIZE_SCALE, 2.5f);
411 DALI_TEST_EQUALS(label.GetProperty<float>(DevelTextLabel::Property::FONT_SIZE_SCALE), 2.5f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
412 label.SetProperty(DevelTextLabel::Property::FONT_SIZE_SCALE, 1.0f);
414 label.SetProperty(DevelTextLabel::Property::ENABLE_FONT_SIZE_SCALE, false);
415 DALI_TEST_EQUALS(label.GetProperty<bool>(DevelTextLabel::Property::ENABLE_FONT_SIZE_SCALE), false, TEST_LOCATION);
416 label.SetProperty(DevelTextLabel::Property::ENABLE_FONT_SIZE_SCALE, true);
419 fontStyleMapSet.Clear();
420 fontStyleMapSet.Insert("weight", "normal");
421 fontStyleMapSet.Insert("slant", "oblique");
423 label.SetProperty(TextLabel::Property::FONT_STYLE, fontStyleMapSet);
424 fontStyleMapGet = label.GetProperty<Property::Map>(TextLabel::Property::FONT_STYLE);
425 DALI_TEST_EQUALS(fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION);
426 DALI_TEST_EQUALS(DaliTestCheckMaps(fontStyleMapGet, fontStyleMapSet), true, TEST_LOCATION);
428 fontStyleMapSet.Clear();
429 fontStyleMapSet.Insert("slant", "roman");
431 label.SetProperty(TextLabel::Property::FONT_STYLE, fontStyleMapSet);
432 fontStyleMapGet = label.GetProperty<Property::Map>(TextLabel::Property::FONT_STYLE);
433 DALI_TEST_EQUALS(fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION);
435 // Replace 'roman' for 'normal'.
436 Property::Value* slantValue = fontStyleMapGet.Find("slant");
437 if(NULL != slantValue)
439 if("normal" == slantValue->Get<std::string>())
441 fontStyleMapGet["slant"] = "roman";
444 DALI_TEST_EQUALS(DaliTestCheckMaps(fontStyleMapGet, fontStyleMapSet), true, TEST_LOCATION);
446 fontStyleMapSet.Clear();
448 label.SetProperty(TextLabel::Property::FONT_STYLE, fontStyleMapSet);
449 fontStyleMapGet = label.GetProperty<Property::Map>(TextLabel::Property::FONT_STYLE);
450 DALI_TEST_EQUALS(fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION);
451 DALI_TEST_EQUALS(DaliTestCheckMaps(fontStyleMapGet, fontStyleMapSet), true, TEST_LOCATION);
454 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
455 DALI_TEST_EQUALS(label.GetProperty<bool>(TextLabel::Property::MULTI_LINE), true, TEST_LOCATION);
457 // Check that the Alignment properties can be correctly set
458 label.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER");
459 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::HORIZONTAL_ALIGNMENT), "CENTER", TEST_LOCATION);
460 label.SetProperty(TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER");
461 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::VERTICAL_ALIGNMENT), "CENTER", TEST_LOCATION);
463 // Check that text color can be properly set
464 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::BLUE);
465 DALI_TEST_EQUALS(label.GetProperty<Vector4>(TextLabel::Property::TEXT_COLOR), Color::BLUE, TEST_LOCATION);
467 Property::Map strikethroughMapSet;
468 Property::Map strikethroughMapGet;
470 strikethroughMapSet.Insert("enable", false);
471 strikethroughMapSet.Insert("color", Color::BLUE);
472 strikethroughMapSet.Insert("height", 2.0f);
474 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
476 strikethroughMapGet = label.GetProperty<Property::Map>(DevelTextLabel::Property::STRIKETHROUGH);
477 DALI_TEST_EQUALS(strikethroughMapGet.Count(), strikethroughMapSet.Count(), TEST_LOCATION);
478 DALI_TEST_EQUALS(DaliTestCheckMaps(strikethroughMapGet, strikethroughMapSet), true, TEST_LOCATION);
480 Property::Map underlineMapSet;
481 Property::Map underlineMapGet;
483 underlineMapSet.Insert("enable", false);
484 underlineMapSet.Insert("color", Color::BLUE);
485 underlineMapSet.Insert("height", 0);
486 underlineMapSet.Insert("type", Text::Underline::SOLID);
487 underlineMapSet.Insert("dashWidth", 2);
488 underlineMapSet.Insert("dashGap", 1);
490 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
492 application.SendNotification();
493 application.Render();
495 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
496 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
497 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet), true, TEST_LOCATION);
500 underlineMapSet.Clear();
501 underlineMapGet.Clear();
503 underlineMapSet.Insert("enable", false);
504 underlineMapSet.Insert("color", Color::BLUE);
505 underlineMapSet.Insert("height", 0);
506 underlineMapSet.Insert("type", Text::Underline::DASHED);
507 underlineMapSet.Insert("dashWidth", 2);
508 underlineMapSet.Insert("dashGap", 1);
510 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
512 application.SendNotification();
513 application.Render();
515 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
516 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
517 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet), true, TEST_LOCATION);
520 underlineMapSet.Clear();
521 underlineMapGet.Clear();
523 underlineMapSet.Insert("enable", false);
524 underlineMapSet.Insert("color", Color::BLUE);
525 underlineMapSet.Insert("height", 0);
526 underlineMapSet.Insert("type", Text::Underline::DOUBLE);
527 underlineMapSet.Insert("dashWidth", 2);
528 underlineMapSet.Insert("dashGap", 1);
530 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
532 application.SendNotification();
533 application.Render();
535 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
536 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
537 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet), true, TEST_LOCATION);
539 TextLabel label2 = TextLabel::New("New text");
540 DALI_TEST_CHECK(label2);
541 DALI_TEST_EQUALS(label2.GetProperty<std::string>(TextLabel::Property::TEXT), std::string("New text"), TEST_LOCATION);
543 // Check the enable markup property.
544 DALI_TEST_CHECK(!label.GetProperty<bool>(TextLabel::Property::ENABLE_MARKUP));
545 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
546 DALI_TEST_CHECK(label.GetProperty<bool>(TextLabel::Property::ENABLE_MARKUP));
548 // Check the text property when markup is enabled
549 label.SetProperty(TextLabel::Property::TEXT, "<color value='white'>Markup</color><color value='cyan'>Text</color>");
550 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::TEXT), std::string("MarkupText"), TEST_LOCATION);
552 // Check for incomplete marks.
553 label.SetProperty(TextLabel::Property::TEXT, "<color='white'><i>Markup</i><b>Text</b></color>");
554 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::TEXT), std::string("MarkupText"), TEST_LOCATION);
557 application.SendNotification();
558 application.Render();
562 tet_result(TET_FAIL);
565 // Check autoscroll properties
566 const int SCROLL_SPEED = 80;
567 const int SCROLL_LOOPS = 4;
568 const float SCROLL_GAP = 50.0f;
569 const float SCROLL_LOOP_DELAY = 0.3f;
570 const std::string STOP_IMMEDIATE = std::string("IMMEDIATE");
571 const std::string STOP_FINISH_LOOP = std::string("FINISH_LOOP");
573 label.SetProperty(TextLabel::Property::MULTI_LINE, false); // Autoscroll only supported in single line
574 DALI_TEST_CHECK(!label.GetProperty<bool>(TextLabel::Property::ENABLE_AUTO_SCROLL));
575 label.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
576 DALI_TEST_CHECK(label.GetProperty<bool>(TextLabel::Property::ENABLE_AUTO_SCROLL));
577 label.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, SCROLL_SPEED);
578 DALI_TEST_EQUALS(SCROLL_SPEED, label.GetProperty<int>(TextLabel::Property::AUTO_SCROLL_SPEED), TEST_LOCATION);
579 label.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, SCROLL_LOOPS);
580 DALI_TEST_EQUALS(SCROLL_LOOPS, label.GetProperty<int>(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT), TEST_LOCATION);
581 label.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, SCROLL_GAP);
582 DALI_TEST_EQUALS(SCROLL_GAP, label.GetProperty<float>(TextLabel::Property::AUTO_SCROLL_GAP), TEST_LOCATION);
583 label.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_DELAY, SCROLL_LOOP_DELAY);
584 DALI_TEST_EQUALS(SCROLL_LOOP_DELAY, label.GetProperty<float>(TextLabel::Property::AUTO_SCROLL_LOOP_DELAY), TEST_LOCATION);
586 //Check autoscroll stop type property
587 label.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE);
588 DALI_TEST_EQUALS(STOP_IMMEDIATE, label.GetProperty<std::string>(TextLabel::Property::AUTO_SCROLL_STOP_MODE), TEST_LOCATION);
590 label.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP);
591 DALI_TEST_EQUALS(STOP_FINISH_LOOP, label.GetProperty<std::string>(TextLabel::Property::AUTO_SCROLL_STOP_MODE), TEST_LOCATION);
593 // test natural size with multi-line and line spacing
595 TextLabel label3 = TextLabel::New("Some text here\nend there\nend here");
596 Vector3 oneLineNaturalSize = label3.GetNaturalSize();
597 label3.SetProperty(TextLabel::Property::MULTI_LINE, true);
598 label3.SetProperty(TextLabel::Property::LINE_SPACING, 0);
599 Vector3 multiLineNaturalSize = label3.GetNaturalSize();
601 // The width of the text when multi-line is enabled will be smaller (lines separated on '\n')
602 // The height of the text when multi-line is enabled will be larger
603 DALI_TEST_CHECK(oneLineNaturalSize.width > multiLineNaturalSize.width);
604 DALI_TEST_CHECK(oneLineNaturalSize.height < multiLineNaturalSize.height);
606 // Change line spacing, meaning height will increase by 3 times the amount specified as we have three lines
607 // Everything else will remain the same
608 int lineSpacing = 20;
609 label3.SetProperty(TextLabel::Property::LINE_SPACING, lineSpacing);
610 Vector3 expectedAfterLineSpacingApplied(multiLineNaturalSize);
611 expectedAfterLineSpacingApplied.height += 3 * lineSpacing;
612 DALI_TEST_EQUALS(expectedAfterLineSpacingApplied, label3.GetNaturalSize(), TEST_LOCATION);
615 // single line, line spacing must not affect natural size of the text, only add the spacing to the height
617 TextLabel label3 = TextLabel::New("Some text here end there end here");
618 label3.SetProperty(TextLabel::Property::MULTI_LINE, false);
619 label3.SetProperty(TextLabel::Property::LINE_SPACING, 0);
620 Vector3 textNaturalSize = label3.GetNaturalSize();
621 int lineSpacing = 20;
622 label3.SetProperty(TextLabel::Property::LINE_SPACING, lineSpacing);
623 Vector3 expectedNaturalSizeWithLineSpacing(textNaturalSize);
624 expectedNaturalSizeWithLineSpacing.height += lineSpacing;
625 DALI_TEST_EQUALS(expectedNaturalSizeWithLineSpacing, label3.GetNaturalSize(), TEST_LOCATION);
627 // Check the line spacing property
628 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::LINE_SPACING), 0.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
629 label.SetProperty(TextLabel::Property::LINE_SPACING, 10.f);
630 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::LINE_SPACING), 10.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
632 // Check the strikethrough property
633 strikethroughMapSet.Clear();
634 strikethroughMapSet.Insert("enable", true);
635 strikethroughMapSet.Insert("color", Color::RED);
636 strikethroughMapSet.Insert("height", 2.0f);
638 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
640 application.SendNotification();
641 application.Render();
643 strikethroughMapGet = label.GetProperty<Property::Map>(DevelTextLabel::Property::STRIKETHROUGH);
644 DALI_TEST_EQUALS(strikethroughMapGet.Count(), strikethroughMapSet.Count(), TEST_LOCATION);
645 DALI_TEST_EQUALS(DaliTestCheckMaps(strikethroughMapGet, strikethroughMapSet), true, TEST_LOCATION);
647 strikethroughMapSet.Clear();
648 strikethroughMapSet.Insert(Toolkit::DevelText::Strikethrough::Property::ENABLE, true);
649 strikethroughMapSet.Insert(Toolkit::DevelText::Strikethrough::Property::COLOR, Color::RED);
650 strikethroughMapSet.Insert(Toolkit::DevelText::Strikethrough::Property::HEIGHT, 2.0f);
652 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
654 application.SendNotification();
655 application.Render();
657 strikethroughMapGet = label.GetProperty<Property::Map>(DevelTextLabel::Property::STRIKETHROUGH);
658 DALI_TEST_EQUALS(strikethroughMapGet.Count(), strikethroughMapSet.Count(), TEST_LOCATION);
659 std::vector<std::string> strikethroughIndicesConversionTable = {"enable", "color", "height"};
660 DALI_TEST_EQUALS(DaliTestCheckMaps(strikethroughMapGet, strikethroughMapSet, strikethroughIndicesConversionTable), true, TEST_LOCATION);
662 strikethroughMapSet.Clear();
664 Property::Map strikethroughDisabledMapGet;
665 strikethroughDisabledMapGet.Insert("enable", false);
666 strikethroughDisabledMapGet.Insert("color", Color::RED);
667 strikethroughDisabledMapGet.Insert("height", 2.0f);
669 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
671 application.SendNotification();
672 application.Render();
674 strikethroughMapGet = label.GetProperty<Property::Map>(DevelTextLabel::Property::STRIKETHROUGH);
675 DALI_TEST_EQUALS(strikethroughMapGet.Count(), strikethroughDisabledMapGet.Count(), TEST_LOCATION);
676 DALI_TEST_EQUALS(DaliTestCheckMaps(strikethroughMapGet, strikethroughDisabledMapGet), true, TEST_LOCATION);
678 // Check the underline property
679 underlineMapSet.Clear();
680 underlineMapSet.Insert("enable", true);
681 underlineMapSet.Insert("color", Color::RED);
682 underlineMapSet.Insert("height", 1);
683 underlineMapSet.Insert("type", Text::Underline::SOLID);
684 underlineMapSet.Insert("dashWidth", 2);
685 underlineMapSet.Insert("dashGap", 1);
687 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
689 application.SendNotification();
690 application.Render();
692 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
693 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
694 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet), true, TEST_LOCATION);
696 underlineMapSet.Clear();
697 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::ENABLE, true);
698 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::COLOR, Color::GREEN);
699 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::HEIGHT, 2);
700 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::TYPE, Text::Underline::DASHED);
701 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::DASH_WIDTH, 2);
702 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::DASH_GAP, 1);
704 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
706 application.SendNotification();
707 application.Render();
709 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
710 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
711 std::vector<std::string> underlineIndicesConversionTable = {"enable", "color", "height", "type", "dashWidth", "dashGap"};
712 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet, underlineIndicesConversionTable), true, TEST_LOCATION);
714 underlineMapSet.Clear();
716 Property::Map underlineDisabledMapGet;
717 underlineDisabledMapGet.Insert("enable", false);
718 underlineDisabledMapGet.Insert("color", Color::GREEN);
719 underlineDisabledMapGet.Insert("height", 2);
720 underlineDisabledMapGet.Insert("type", Text::Underline::SOLID);
721 underlineDisabledMapGet.Insert("dashWidth", 2);
722 underlineDisabledMapGet.Insert("dashGap", 1);
724 label.SetProperty(TextLabel::Property::UNDERLINE, underlineDisabledMapGet);
726 application.SendNotification();
727 application.Render();
729 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
730 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineDisabledMapGet.Count(), TEST_LOCATION);
731 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineDisabledMapGet), true, TEST_LOCATION);
733 // Check the dashed underline property
734 underlineMapSet.Clear();
735 underlineMapSet.Insert("enable", true);
736 underlineMapSet.Insert("color", Color::RED);
737 underlineMapSet.Insert("height", 1);
738 underlineMapSet.Insert("type", Text::Underline::DASHED);
739 underlineMapSet.Insert("dashWidth", 2);
740 underlineMapSet.Insert("dashGap", 1);
742 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
744 application.SendNotification();
745 application.Render();
747 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
748 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
749 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet), true, TEST_LOCATION);
751 underlineMapSet.Clear();
752 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::ENABLE, true);
753 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::COLOR, Color::GREEN);
754 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::HEIGHT, 2);
755 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::TYPE, Text::Underline::DASHED);
756 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::DASH_WIDTH, 2);
757 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::DASH_GAP, 1);
759 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
761 application.SendNotification();
762 application.Render();
764 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
765 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
766 underlineIndicesConversionTable = {"enable", "color", "height", "type", "dashWidth", "dashGap"};
767 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet, underlineIndicesConversionTable), true, TEST_LOCATION);
769 underlineMapSet.Clear();
771 underlineDisabledMapGet.Clear();
772 underlineDisabledMapGet.Insert("enable", false);
773 underlineDisabledMapGet.Insert("color", Color::GREEN);
774 underlineDisabledMapGet.Insert("height", 2);
775 underlineDisabledMapGet.Insert("type", Text::Underline::DASHED);
776 underlineDisabledMapGet.Insert("dashWidth", 2);
777 underlineDisabledMapGet.Insert("dashGap", 1);
779 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
781 application.SendNotification();
782 application.Render();
784 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
785 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineDisabledMapGet.Count(), TEST_LOCATION);
786 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineDisabledMapGet), true, TEST_LOCATION);
788 // Check the double underline property
789 underlineMapSet.Clear();
790 underlineMapSet.Insert("enable", true);
791 underlineMapSet.Insert("color", Color::RED);
792 underlineMapSet.Insert("height", 1);
793 underlineMapSet.Insert("type", Text::Underline::DOUBLE);
794 underlineMapSet.Insert("dashWidth", 2);
795 underlineMapSet.Insert("dashGap", 1);
797 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
799 application.SendNotification();
800 application.Render();
802 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
803 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
804 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet), true, TEST_LOCATION);
806 underlineMapSet.Clear();
807 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::ENABLE, true);
808 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::COLOR, Color::GREEN);
809 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::HEIGHT, 2);
810 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::TYPE, Text::Underline::DOUBLE);
811 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::DASH_WIDTH, 2);
812 underlineMapSet.Insert(Toolkit::DevelText::Underline::Property::DASH_GAP, 1);
814 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
816 application.SendNotification();
817 application.Render();
819 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
820 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
821 underlineIndicesConversionTable = {"enable", "color", "height", "type", "dashWidth", "dashGap"};
822 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet, underlineIndicesConversionTable), true, TEST_LOCATION);
824 underlineMapSet.Clear();
826 underlineDisabledMapGet.Clear();
827 underlineDisabledMapGet.Insert("enable", false);
828 underlineDisabledMapGet.Insert("color", Color::GREEN);
829 underlineDisabledMapGet.Insert("height", 2);
830 underlineDisabledMapGet.Insert("type", Text::Underline::DOUBLE);
831 underlineDisabledMapGet.Insert("dashWidth", 2);
832 underlineDisabledMapGet.Insert("dashGap", 1);
834 label.SetProperty(TextLabel::Property::UNDERLINE, underlineDisabledMapGet);
836 application.SendNotification();
837 application.Render();
839 underlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::UNDERLINE);
840 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineDisabledMapGet.Count(), TEST_LOCATION);
841 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineDisabledMapGet), true, TEST_LOCATION);
843 // Check the shadow property
845 Property::Map shadowMapSet;
846 Property::Map shadowMapGet;
848 shadowMapSet.Insert("color", Color::GREEN);
849 shadowMapSet.Insert("offset", Vector2(2.0f, 2.0f));
850 shadowMapSet.Insert("blurRadius", 5.0f);
852 label.SetProperty(TextLabel::Property::SHADOW, shadowMapSet);
854 shadowMapGet = label.GetProperty<Property::Map>(TextLabel::Property::SHADOW);
855 DALI_TEST_EQUALS(shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION);
856 DALI_TEST_EQUALS(DaliTestCheckMaps(shadowMapGet, shadowMapSet), true, TEST_LOCATION);
858 shadowMapSet.Clear();
860 shadowMapSet.Insert(Toolkit::DevelText::Shadow::Property::COLOR, Color::BLUE);
861 shadowMapSet.Insert(Toolkit::DevelText::Shadow::Property::OFFSET, "3.0 3.0");
862 shadowMapSet.Insert(Toolkit::DevelText::Shadow::Property::BLUR_RADIUS, 3.0f);
864 label.SetProperty(TextLabel::Property::SHADOW, shadowMapSet);
866 // Replace the offset (string) by a vector2
867 shadowMapSet.Clear();
868 shadowMapSet.Insert(Toolkit::DevelText::Shadow::Property::COLOR, Color::BLUE);
869 shadowMapSet.Insert(Toolkit::DevelText::Shadow::Property::OFFSET, Vector2(3.0, 3.0));
870 shadowMapSet.Insert(Toolkit::DevelText::Shadow::Property::BLUR_RADIUS, 3.0f);
872 shadowMapGet = label.GetProperty<Property::Map>(TextLabel::Property::SHADOW);
873 DALI_TEST_EQUALS(shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION);
874 std::vector<std::string> shadowIndicesConversionTable = {"color", "offset", "blurRadius"};
875 DALI_TEST_EQUALS(DaliTestCheckMaps(shadowMapGet, shadowMapSet, shadowIndicesConversionTable), true, TEST_LOCATION);
877 shadowMapSet.Clear();
878 Property::Map shadowDisabledMapGet;
879 shadowDisabledMapGet.Insert("color", Color::BLUE);
880 shadowDisabledMapGet.Insert("offset", Vector2(0.0f, 0.0f));
881 shadowDisabledMapGet.Insert("blurRadius", 3.0f);
883 label.SetProperty(TextLabel::Property::SHADOW, shadowMapSet);
885 shadowMapGet = label.GetProperty<Property::Map>(TextLabel::Property::SHADOW);
886 DALI_TEST_EQUALS(shadowMapGet.Count(), shadowDisabledMapGet.Count(), TEST_LOCATION);
887 DALI_TEST_EQUALS(DaliTestCheckMaps(shadowMapGet, shadowDisabledMapGet), true, TEST_LOCATION);
889 // Check the emboss property
890 label.SetProperty(TextLabel::Property::EMBOSS, "Emboss properties");
891 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::EMBOSS), std::string("Emboss properties"), TEST_LOCATION);
893 // Check the outline property
895 // Test string type first
896 // This is purely to maintain backward compatibility, but we don't support string as the outline property type.
897 label.SetProperty(TextLabel::Property::OUTLINE, "Outline properties");
898 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::OUTLINE), std::string("Outline properties"), TEST_LOCATION);
900 // Then test the property map type
901 Property::Map outlineMapSet;
902 Property::Map outlineMapGet;
904 outlineMapSet["color"] = Color::RED;
905 outlineMapSet["width"] = 2.0f;
906 label.SetProperty(TextLabel::Property::OUTLINE, outlineMapSet);
908 outlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::OUTLINE);
909 DALI_TEST_EQUALS(outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION);
910 DALI_TEST_EQUALS(DaliTestCheckMaps(outlineMapGet, outlineMapSet), true, TEST_LOCATION);
912 outlineMapSet.Clear();
913 outlineMapSet[Toolkit::DevelText::Outline::Property::COLOR] = Color::BLUE;
914 outlineMapSet[Toolkit::DevelText::Outline::Property::WIDTH] = 3.0f;
915 label.SetProperty(TextLabel::Property::OUTLINE, outlineMapSet);
917 outlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::OUTLINE);
918 DALI_TEST_EQUALS(outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION);
919 std::vector<std::string> outlineIndicesConversionTable = {"color", "width"};
920 DALI_TEST_EQUALS(DaliTestCheckMaps(outlineMapGet, outlineMapSet, outlineIndicesConversionTable), true, TEST_LOCATION);
922 // Check the background property
923 Property::Map backgroundMapSet;
924 Property::Map backgroundMapGet;
926 backgroundMapSet["enable"] = true;
927 backgroundMapSet["color"] = Color::RED;
928 label.SetProperty(DevelTextLabel::Property::BACKGROUND, backgroundMapSet);
930 backgroundMapGet = label.GetProperty<Property::Map>(DevelTextLabel::Property::BACKGROUND);
931 DALI_TEST_EQUALS(backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION);
932 DALI_TEST_EQUALS(DaliTestCheckMaps(backgroundMapGet, backgroundMapSet), true, TEST_LOCATION);
934 backgroundMapSet.Clear();
935 backgroundMapSet[Toolkit::DevelText::Background::Property::ENABLE] = true;
936 backgroundMapSet[Toolkit::DevelText::Background::Property::COLOR] = Color::GREEN;
937 label.SetProperty(DevelTextLabel::Property::BACKGROUND, backgroundMapSet);
939 backgroundMapGet = label.GetProperty<Property::Map>(DevelTextLabel::Property::BACKGROUND);
940 DALI_TEST_EQUALS(backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION);
941 std::vector<std::string> backgroundIndicesConversionTable = {"enable", "color"};
942 DALI_TEST_EQUALS(DaliTestCheckMaps(backgroundMapGet, backgroundMapSet, backgroundIndicesConversionTable), true, TEST_LOCATION);
944 // Check the pixel size of font
945 label.SetProperty(TextLabel::Property::PIXEL_SIZE, 20.f);
946 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::PIXEL_SIZE), 20.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
948 // Check the ellipsis property
949 DALI_TEST_CHECK(label.GetProperty<bool>(TextLabel::Property::ELLIPSIS));
950 label.SetProperty(TextLabel::Property::ELLIPSIS, false);
951 DALI_TEST_CHECK(!label.GetProperty<bool>(TextLabel::Property::ELLIPSIS));
953 // Check the layout direction property
954 label.SetProperty(Actor::Property::LAYOUT_DIRECTION, LayoutDirection::RIGHT_TO_LEFT);
955 DALI_TEST_EQUALS(label.GetProperty<int>(Actor::Property::LAYOUT_DIRECTION), static_cast<int>(LayoutDirection::RIGHT_TO_LEFT), TEST_LOCATION);
957 // Check the line size property
958 DALI_TEST_EQUALS(label.GetProperty<float>(DevelTextLabel::Property::MIN_LINE_SIZE), 0.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
959 label.SetProperty(DevelTextLabel::Property::MIN_LINE_SIZE, 50.f);
960 DALI_TEST_EQUALS(label.GetProperty<float>(DevelTextLabel::Property::MIN_LINE_SIZE), 50.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
962 application.SendNotification();
963 application.Render();
968 int UtcDaliToolkitTextlabelAtlasRenderP(void)
970 ToolkitTestApplication application;
971 tet_infoline(" UtcDaliToolkitTextLabelAtlasRenderP");
972 TextLabel label = TextLabel::New("Test Text");
973 DALI_TEST_CHECK(label);
975 // Avoid a crash when core load gl resources.
976 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
978 application.GetScene().Add(label);
980 // Turn on all the effects
981 label.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER");
982 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
984 Property::Map underlineMap;
985 underlineMap.Insert("enable", true);
986 underlineMap.Insert("color", Color::RED);
987 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMap);
989 Property::Map shadowMap;
990 shadowMap.Insert("color", Color::BLUE);
991 shadowMap.Insert("offset", Vector2(1.0f, 1.0f));
992 label.SetProperty(TextLabel::Property::SHADOW, shadowMap);
994 Property::Map strikethroughMap;
995 strikethroughMap.Insert("enable", true);
996 strikethroughMap.Insert("color", Color::GREEN);
997 strikethroughMap.Insert("height", 2.0f);
998 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMap);
1002 // Render some text with the shared atlas backend
1003 label.SetProperty(DevelTextLabel::Property::RENDERING_BACKEND, DevelText::RENDERING_SHARED_ATLAS);
1004 application.SendNotification();
1005 application.Render();
1009 tet_result(TET_FAIL);
1014 // Render some text with the shared atlas backend
1015 label.SetProperty(DevelTextLabel::Property::RENDERING_BACKEND, DevelText::RENDERING_VECTOR_BASED);
1016 application.SendNotification();
1017 application.Render();
1021 tet_result(TET_FAIL);
1026 int UtcDaliToolkitTextLabelLanguagesP(void)
1028 ToolkitTestApplication application;
1029 tet_infoline(" UtcDaliToolkitTextLabelLanguagesP");
1030 TextLabel label = TextLabel::New();
1031 DALI_TEST_CHECK(label);
1033 application.GetScene().Add(label);
1035 const std::string scripts(
1036 " привет мир, γειά σου Κόσμε, Hello world, مرحبا بالعالم, שלום עולם, "
1037 "բարեւ աշխարհը, მსოფლიოში, 안녕하세요, 你好世界, ひらがな, カタカナ, "
1038 "ওহে বিশ্ব, မင်္ဂလာပါကမ္ဘာလောက, हैलो वर्ल्ड, હેલો વર્લ્ડ, ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਦੁਨਿਆ, ಹಲೋ ವರ್ಲ್ಡ್, "
1039 "ഹലോ വേൾഡ്, ଓଡ଼ିଆ, හෙලෝ වර්ල්ඩ්, ஹலோ உலகம், హలో వరల్డ్, "
1040 "ສະບາຍດີໂລກ, สวัสดีโลก, ជំរាបសួរពិភពលោក, "
1041 "\xF0\x9F\x98\x81 \xF0\x9F\x98\x82 \xF0\x9F\x98\x83 \xF0\x9F\x98\x84."); // these characters on the last line are emojis.
1043 label.SetProperty(TextLabel::Property::TEXT, scripts);
1044 DALI_TEST_EQUALS(label.GetProperty<std::string>(TextLabel::Property::TEXT), scripts, TEST_LOCATION);
1046 application.SendNotification();
1047 application.Render();
1052 int UtcDaliToolkitTextLabelEmojisP(void)
1054 ToolkitTestApplication application;
1055 tet_infoline(" UtcDaliToolkitTextLabelLanguagesP");
1056 TextLabel label = TextLabel::New();
1057 DALI_TEST_CHECK(label);
1059 application.GetScene().Add(label);
1061 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
1063 char* pathNamePtr = get_current_dir_name();
1064 const std::string pathName(pathNamePtr);
1067 TextAbstraction::FontDescription fontDescription;
1068 fontDescription.path = pathName + DEFAULT_FONT_DIR + "/tizen/BreezeColorEmoji.ttf";
1069 fontDescription.family = "BreezeColorEmoji";
1070 fontDescription.width = TextAbstraction::FontWidth::NONE;
1071 fontDescription.weight = TextAbstraction::FontWeight::NORMAL;
1072 fontDescription.slant = TextAbstraction::FontSlant::NONE;
1074 fontClient.GetFontId(fontDescription, EMOJI_FONT_SIZE);
1076 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>";
1077 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
1078 label.SetProperty(TextLabel::Property::TEXT, emojis);
1080 Property::Map shadowMap;
1081 shadowMap.Insert("color", "green");
1082 shadowMap.Insert("offset", "2 2");
1083 label.SetProperty(TextLabel::Property::SHADOW, shadowMap);
1085 application.SendNotification();
1086 application.Render();
1088 // EMOJI + ZWJ + EMOJI case for coverage.
1089 const std::string emojiWithZWJ = "👩‍🔬";
1090 label.SetProperty(TextLabel::Property::TEXT, emojiWithZWJ);
1092 application.SendNotification();
1093 application.Render();
1095 // EMOJI Sequences case for coverage.
1096 std::string emojiSequences =
1097 "Text VS15 ☪︎\n" //text presentation sequence and selector
1098 "Color VS16 ☪️\n" //emoji presentation sequence and selector
1099 "Default ☪ \n" //default presentation
1100 "FamilyManWomanGirlBoy 👨‍👩‍👧‍👦\n" // emoji multi zwj sequence
1101 "WomanScientist 👩‍🔬\n" // emoji zwj sequence
1102 "WomanScientistLightSkinTone👩🏻‍🔬 \n" //emoji modifier sequence: skin tone & JWZ
1103 "LeftRightArrowText↔︎\n" //text presentation sequence and selector
1104 "LeftRightArrowEmoji↔️\n" //emoji presentation sequence and selector
1105 "SouthKoreaFlag🇰🇷\n" //emoji flag sequence
1106 "JordanFlag🇯🇴\n" // emoji flag sequence
1107 "EnglandFlag🏴󠁧󠁢󠁥󠁮󠁧󠁿\n" //emoji tag sequence like England flag
1108 "Runner 🏃‍➡️ \n"
1109 "VictoryHandMediumLightSkinTone:✌️🏼\n" //emoji modifier sequence: skin tone
1110 "RainbowFlag:🏳️‍🌈 \n" //emoji zwj sequence: Rainbow Flag
1111 "keycap# #️⃣ \n" // fully-qualified emoji keycap sequence
1112 "keycap#_text #⃣ \n" // unqualified emoji keycap sequence
1113 "keycap3 3️⃣ \n" // fully-qualified emoji keycap sequence
1114 "keycap3_text 3⃣ \n" // unqualified emoji keycap sequence
1115 "two adjacent glyphs ☪️️️☪️\n" //This line should be rendered as two adjacent glyphs
1116 "Digit 8️ 8︎ 8\n" // should be rendered according to selector
1117 "Surfing Medium Skin Female: 🏄🏼‍♀️"; // Person Surfing + Medium Skin Tone +? Zero Width Joiner + Female Sign
1119 label.SetProperty(TextLabel::Property::TEXT, emojiSequences);
1120 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
1121 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
1122 label.SetProperty(TextLabel::Property::ELLIPSIS, false);
1124 application.SendNotification();
1125 application.Render();
1129 int UtcDaliToolkitTextlabelScrollingP(void)
1131 ToolkitTestApplication application;
1132 tet_infoline(" UtcDaliToolkitTextLabelScrollingP");
1133 TextLabel labelImmediate = TextLabel::New("Some text to scroll");
1134 TextLabel labelFinished = TextLabel::New("مرحبا بالعالم");
1136 DALI_TEST_CHECK(labelImmediate);
1137 DALI_TEST_CHECK(labelFinished);
1138 // Avoid a crash when core load gl resources.
1139 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1140 application.GetScene().Add(labelImmediate);
1141 // Turn on all the effects
1142 labelImmediate.SetProperty(TextLabel::Property::MULTI_LINE, false);
1143 labelImmediate.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1144 labelImmediate.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1145 labelImmediate.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1146 labelImmediate.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE);
1148 application.GetScene().Add(labelFinished);
1149 // Turn on all the effects
1150 labelFinished.SetProperty(TextLabel::Property::MULTI_LINE, false);
1151 labelFinished.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1152 labelFinished.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1153 labelFinished.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1154 labelFinished.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP);
1158 // Render some text with the shared atlas backend
1159 labelImmediate.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1160 labelFinished.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1162 labelImmediate.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1163 labelFinished.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1165 labelImmediate.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1166 labelFinished.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1167 application.SendNotification();
1168 application.Render();
1170 labelImmediate.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1171 labelFinished.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1172 application.SendNotification();
1173 application.Render();
1177 tet_result(TET_FAIL);
1183 int UtcDaliToolkitTextlabelScrollingCenterAlignP(void)
1185 ToolkitTestApplication application;
1186 TextLabel labelShort = TextLabel::New("Some text to scroll");
1187 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!");
1189 DALI_TEST_CHECK(labelShort);
1190 DALI_TEST_CHECK(labelLong);
1191 // Avoid a crash when core load gl resources.
1192 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1193 application.GetScene().Add(labelShort);
1194 // Turn on all the effects
1195 labelShort.SetProperty(TextLabel::Property::MULTI_LINE, false);
1196 labelShort.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER");
1197 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1198 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1199 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1200 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE);
1202 application.GetScene().Add(labelLong);
1203 // Turn on all the effects
1204 labelLong.SetProperty(TextLabel::Property::MULTI_LINE, false);
1205 labelLong.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER");
1206 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1207 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1208 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1209 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP);
1213 // Render some text with the shared atlas backend
1214 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1215 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1216 application.SendNotification();
1217 application.Render();
1219 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1220 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1221 application.SendNotification();
1222 application.Render();
1226 tet_result(TET_FAIL);
1232 int UtcDaliToolkitTextlabelScrollingCenterAlignRTLP(void)
1234 ToolkitTestApplication application;
1235 TextLabel labelShort = TextLabel::New("مرحبا بالعالم");
1236 TextLabel labelLong = TextLabel::New("لكن لا بد أن أوضح لك أن كل هذه الأفكار المغلوطة حول استنكار النشوة وتمجيد الألم نشأت بالفعل، وسأعرض لك التفاصيل لتكتشف حقيقة وأساس تلك السعادة البشرية، فلا أحد يرفض أو يكره أو يتجنب الشعور بالسعادة، ولكن بفضل هؤلاء الأشخاص الذين لا يدركون بأن السعادة لا بد أن نستشعرها بصورة أكثر عقلانية ومنطقية فيعرضهم هذا لمواجهة الظروف الأليمة، وأكرر بأنه لا يوجد من يرغب في الحب ونيل المنال ويتلذذ بالآلام، الألم هو الألم ولكن نتيجة لظروف ما قد تكمن السعاده فيما نتحمله من كد وأسي");
1238 DALI_TEST_CHECK(labelShort);
1239 DALI_TEST_CHECK(labelLong);
1240 // Avoid a crash when core load gl resources.
1241 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1242 application.GetScene().Add(labelShort);
1243 // Turn on all the effects
1244 labelShort.SetProperty(TextLabel::Property::MULTI_LINE, false);
1245 labelShort.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER");
1246 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1247 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1248 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1249 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE);
1251 application.GetScene().Add(labelLong);
1252 // Turn on all the effects
1253 labelLong.SetProperty(TextLabel::Property::MULTI_LINE, false);
1254 labelLong.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER");
1255 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1256 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1257 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1258 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP);
1262 // Render some text with the shared atlas backend
1263 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1264 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1265 application.SendNotification();
1266 application.Render();
1268 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1269 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1270 application.SendNotification();
1271 application.Render();
1275 tet_result(TET_FAIL);
1281 int UtcDaliToolkitTextlabelScrollingEndAlignP(void)
1283 ToolkitTestApplication application;
1284 TextLabel labelShort = TextLabel::New("Some text to scroll");
1285 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!");
1287 DALI_TEST_CHECK(labelShort);
1288 DALI_TEST_CHECK(labelLong);
1289 // Avoid a crash when core load gl resources.
1290 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1291 application.GetScene().Add(labelShort);
1292 // Turn on all the effects
1293 labelShort.SetProperty(TextLabel::Property::MULTI_LINE, false);
1294 labelShort.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "END");
1295 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1296 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1297 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1298 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE);
1300 application.GetScene().Add(labelLong);
1301 // Turn on all the effects
1302 labelLong.SetProperty(TextLabel::Property::MULTI_LINE, false);
1303 labelLong.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "END");
1304 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1305 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1306 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1307 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP);
1311 // Render some text with the shared atlas backend
1312 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1313 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1314 application.SendNotification();
1315 application.Render();
1317 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1318 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1319 application.SendNotification();
1320 application.Render();
1324 tet_result(TET_FAIL);
1330 int UtcDaliToolkitTextlabelScrollingEndAlignRTLP(void)
1332 ToolkitTestApplication application;
1333 TextLabel labelShort = TextLabel::New("مرحبا بالعالم");
1334 TextLabel labelLong = TextLabel::New("لكن لا بد أن أوضح لك أن كل هذه الأفكار المغلوطة حول استنكار النشوة وتمجيد الألم نشأت بالفعل، وسأعرض لك التفاصيل لتكتشف حقيقة وأساس تلك السعادة البشرية، فلا أحد يرفض أو يكره أو يتجنب الشعور بالسعادة، ولكن بفضل هؤلاء الأشخاص الذين لا يدركون بأن السعادة لا بد أن نستشعرها بصورة أكثر عقلانية ومنطقية فيعرضهم هذا لمواجهة الظروف الأليمة، وأكرر بأنه لا يوجد من يرغب في الحب ونيل المنال ويتلذذ بالآلام، الألم هو الألم ولكن نتيجة لظروف ما قد تكمن السعاده فيما نتحمله من كد وأسي");
1336 DALI_TEST_CHECK(labelShort);
1337 DALI_TEST_CHECK(labelLong);
1338 // Avoid a crash when core load gl resources.
1339 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1340 application.GetScene().Add(labelShort);
1341 // Turn on all the effects
1342 labelShort.SetProperty(TextLabel::Property::MULTI_LINE, false);
1343 labelShort.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "END");
1344 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1345 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1346 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1347 labelShort.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE);
1349 application.GetScene().Add(labelLong);
1350 // Turn on all the effects
1351 labelLong.SetProperty(TextLabel::Property::MULTI_LINE, false);
1352 labelLong.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, "END");
1353 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1354 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1355 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1356 labelLong.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::FINISH_LOOP);
1360 // Render some text with the shared atlas backend
1361 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1362 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1363 application.SendNotification();
1364 application.Render();
1366 labelShort.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1367 labelLong.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1368 application.SendNotification();
1369 application.Render();
1373 tet_result(TET_FAIL);
1379 int UtcDaliToolkitTextlabelScrollingInterruptedP(void)
1381 ToolkitTestApplication application;
1382 tet_infoline(" UtcDaliToolkitTextlabelScrollingInterruptedP");
1383 TextLabel label = TextLabel::New("Some text to scroll");
1384 DALI_TEST_CHECK(label);
1385 // Avoid a crash when core load gl resources.
1386 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1387 application.GetScene().Add(label);
1388 label.SetProperty(Actor::Property::SIZE, Vector2(360.0f, 20.f));
1389 // Turn on all the effects
1390 label.SetProperty(TextLabel::Property::MULTI_LINE, false);
1391 label.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1392 label.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1393 label.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1396 application.SendNotification();
1397 application.Render();
1399 unsigned int actorCount1 = label.GetChildCount();
1400 tet_printf("Initial actor count is(%d)\n", actorCount1);
1404 // Render some text with the shared atlas backend
1405 label.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1406 application.SendNotification();
1407 application.Render(2000);
1409 unsigned int actorCount1 = label.GetChildCount();
1410 tet_printf("Actor count after scrolling is(%d)\n", actorCount1);
1412 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::RED);
1415 application.SendNotification();
1416 application.Render();
1418 unsigned int actorCount2 = label.GetChildCount();
1419 tet_printf("After changing color the actor count is(%d)\n", actorCount2);
1421 DALI_TEST_EQUALS(actorCount1, actorCount2, TEST_LOCATION);
1425 tet_result(TET_FAIL);
1431 int UtcDaliToolkitTextlabelScrollingN(void)
1433 ToolkitTestApplication application;
1434 tet_infoline(" UtcDaliToolkitTextlabelScrollingN");
1436 TextLabel label = TextLabel::New("Some text to scroll");
1437 DALI_TEST_CHECK(label);
1439 application.GetScene().Add(label);
1441 // Avoid a crash when core load gl resources.
1442 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1444 // The text scrolling works only on single line text.
1445 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
1447 // Turn on all the effects.
1448 label.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1449 label.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1450 label.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1452 // Enable the auto scrolling effect.
1453 label.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1455 // The auto scrolling shouldn't be enabled.
1456 const bool enabled = label.GetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL).Get<bool>();
1457 DALI_TEST_CHECK(!enabled);
1462 int UtcDaliToolkitTextlabelScrollingWithEllipsis(void)
1464 ToolkitTestApplication application;
1465 tet_infoline(" UtcDaliToolkitTextlabelScrollingWithEllipsis");
1467 TextLabel label = TextLabel::New("Some text to scroll");
1468 DALI_TEST_CHECK(label);
1470 application.GetScene().Add(label);
1472 // Avoid a crash when core load gl resources.
1473 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1475 // Turn on all the effects.
1476 label.SetProperty(TextLabel::Property::AUTO_SCROLL_GAP, 50.0f);
1477 label.SetProperty(TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3);
1478 label.SetProperty(TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f);
1482 // Enable the auto scrolling effect.
1483 label.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, true);
1484 label.SetProperty(TextLabel::Property::AUTO_SCROLL_STOP_MODE, TextLabel::AutoScrollStopMode::IMMEDIATE);
1486 // Disable the ellipsis
1487 label.SetProperty(TextLabel::Property::ELLIPSIS, false);
1490 application.SendNotification();
1491 application.Render();
1493 // Stop auto scrolling
1494 label.SetProperty(TextLabel::Property::ENABLE_AUTO_SCROLL, false);
1496 // Check the ellipsis property
1497 DALI_TEST_CHECK(!label.GetProperty<bool>(TextLabel::Property::ELLIPSIS));
1501 tet_result(TET_FAIL);
1507 int UtcDaliToolkitTextlabelEllipsis(void)
1509 ToolkitTestApplication application;
1510 tet_infoline(" UtcDaliToolkitTextlabelEllipsis");
1512 TextLabel label = TextLabel::New("Hello world");
1513 DALI_TEST_CHECK(label);
1515 // Avoid a crash when core load gl resources.
1516 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1518 application.GetScene().Add(label);
1520 // Turn on all the effects
1521 label.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
1522 label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1523 label.SetProperty(Actor::Property::SIZE, Vector2(360.0f, 10.f));
1528 application.SendNotification();
1529 application.Render();
1533 tet_result(TET_FAIL);
1536 label.SetProperty(TextLabel::Property::TEXT, "Hello world ");
1537 label.SetProperty(DevelTextLabel::Property::IGNORE_SPACES_AFTER_TEXT, false);
1538 label.SetProperty(Actor::Property::SIZE, Vector2(400.0f, 10.f));
1543 application.SendNotification();
1544 application.Render();
1548 tet_result(TET_FAIL);
1551 label.SetProperty(TextLabel::Property::TEXT, "Hello world");
1552 label.SetProperty(DevelTextLabel::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION, true);
1553 label.SetProperty(Actor::Property::SIZE, Vector2(400.0f, 10.f));
1558 application.SendNotification();
1559 application.Render();
1563 tet_result(TET_FAIL);
1569 int UtcDaliToolkitTextlabelTextWrapMode(void)
1571 ToolkitTestApplication application;
1572 tet_infoline(" UtcDaliToolkitTextlabelTextWarpMode");
1576 TextLabel label = TextLabel::New();
1577 label.SetProperty(Actor::Property::SIZE, Vector2(300.0f, 300.f));
1578 label.SetProperty(TextLabel::Property::TEXT, "Hello world Hello world");
1579 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
1581 //label.SetProperty( TextLabel::Property::POINT_SIZE, 18 );
1582 application.GetScene().Add(label);
1584 label.SetProperty(TextLabel::Property::LINE_WRAP_MODE, "WORD");
1585 DALI_TEST_EQUALS(label.GetProperty<int>(TextLabel::Property::LINE_WRAP_MODE), static_cast<int>(Text::LineWrap::WORD), TEST_LOCATION);
1587 application.SendNotification();
1588 application.Render();
1590 lineCount = label.GetProperty<int>(TextLabel::Property::LINE_COUNT);
1591 DALI_TEST_EQUALS(lineCount, 2, TEST_LOCATION);
1593 label.SetProperty(TextLabel::Property::LINE_WRAP_MODE, "CHARACTER");
1594 DALI_TEST_EQUALS(label.GetProperty<int>(TextLabel::Property::LINE_WRAP_MODE), static_cast<int>(Text::LineWrap::CHARACTER), TEST_LOCATION);
1596 application.SendNotification();
1597 application.Render();
1599 label.SetProperty(TextLabel::Property::LINE_WRAP_MODE, Text::LineWrap::WORD);
1600 DALI_TEST_EQUALS(label.GetProperty<int>(TextLabel::Property::LINE_WRAP_MODE), static_cast<int>(Text::LineWrap::WORD), TEST_LOCATION);
1602 application.SendNotification();
1603 application.Render();
1605 lineCount = label.GetProperty<int>(TextLabel::Property::LINE_COUNT);
1606 DALI_TEST_EQUALS(lineCount, 2, TEST_LOCATION);
1608 label.SetProperty(TextLabel::Property::LINE_WRAP_MODE, Text::LineWrap::CHARACTER);
1609 DALI_TEST_EQUALS(label.GetProperty<int>(TextLabel::Property::LINE_WRAP_MODE), static_cast<int>(Text::LineWrap::CHARACTER), TEST_LOCATION);
1611 application.SendNotification();
1612 application.Render();
1614 lineCount = label.GetProperty<int>(TextLabel::Property::LINE_COUNT);
1615 DALI_TEST_EQUALS(lineCount, 2, TEST_LOCATION);
1617 tet_infoline("Ensure invalid string does not change wrapping mode");
1618 label.SetProperty(TextLabel::Property::LINE_WRAP_MODE, "InvalidWrapMode");
1619 DALI_TEST_EQUALS(label.GetProperty<int>(TextLabel::Property::LINE_WRAP_MODE), static_cast<int>(Text::LineWrap::CHARACTER), TEST_LOCATION);
1624 int UtcDaliToolkitTextLabelColorComponents(void)
1626 ToolkitTestApplication application;
1628 TextLabel label = TextLabel::New();
1629 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::RED);
1630 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_RED), 1.0f, TEST_LOCATION);
1631 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_GREEN), 0.0f, TEST_LOCATION);
1632 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_BLUE), 0.0f, TEST_LOCATION);
1633 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_ALPHA), 1.0f, TEST_LOCATION);
1635 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::GREEN);
1636 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_RED), 0.0f, TEST_LOCATION);
1637 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_GREEN), 1.0f, TEST_LOCATION);
1638 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_BLUE), 0.0f, TEST_LOCATION);
1639 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_ALPHA), 1.0f, TEST_LOCATION);
1641 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::BLUE);
1642 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_RED), 0.0f, TEST_LOCATION);
1643 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_GREEN), 0.0f, TEST_LOCATION);
1644 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_BLUE), 1.0f, TEST_LOCATION);
1645 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_ALPHA), 1.0f, TEST_LOCATION);
1647 label.SetProperty(TextLabel::Property::TEXT_COLOR_ALPHA, 0.6f);
1648 DALI_TEST_EQUALS(label.GetProperty<float>(TextLabel::Property::TEXT_COLOR_ALPHA), 0.6f, TEST_LOCATION);
1649 DALI_TEST_EQUALS(label.GetProperty<Vector4>(TextLabel::Property::TEXT_COLOR), Vector4(0.0f, 0.0f, 1.0f, 0.6f), TEST_LOCATION);
1651 // Test a transparent text - Rendering should be skipped.
1652 label.SetProperty(TextLabel::Property::TEXT, "Hello world Hello world");
1653 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::BLUE);
1655 application.GetScene().Add(label);
1657 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1658 drawTrace.Enable(true);
1660 application.SendNotification();
1661 application.Render();
1663 DALI_TEST_EQUALS(drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION); // Should be rendered
1665 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::TRANSPARENT);
1669 application.SendNotification();
1670 application.Render();
1672 DALI_TEST_EQUALS(drawTrace.FindMethod("DrawArrays"), false, TEST_LOCATION); // Rendering should be skipped
1674 label.SetProperty(TextLabel::Property::TEXT_COLOR, Color::RED);
1678 application.SendNotification();
1679 application.Render();
1681 DALI_TEST_EQUALS(drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION); // Should be rendered again
1686 int UtcDaliToolkitTextlabelTextStyle01(void)
1688 ToolkitTestApplication application;
1689 tet_infoline(" UtcDaliToolkitTextlabelTextStyle Setting Outline after Shadow");
1691 TextLabel label = TextLabel::New();
1692 label.SetProperty(Actor::Property::SIZE, Vector2(300.0f, 300.f));
1693 label.SetProperty(TextLabel::Property::TEXT, "Hello world Hello world");
1694 label.SetProperty(TextLabel::Property::POINT_SIZE, 12);
1695 application.GetScene().Add(label);
1697 Property::Map outlineMapSet;
1698 Property::Map outlineMapGet;
1700 outlineMapSet["color"] = Color::BLUE;
1701 outlineMapSet["width"] = 2.0f;
1702 label.SetProperty(TextLabel::Property::OUTLINE, outlineMapSet);
1704 application.SendNotification();
1705 application.Render();
1707 Property::Map shadowMapSet;
1708 shadowMapSet.Insert("color", "green");
1709 shadowMapSet.Insert("offset", "2 2");
1710 shadowMapSet.Insert("blurRadius", "3");
1711 label.SetProperty(TextLabel::Property::SHADOW, shadowMapSet);
1713 outlineMapSet["color"] = Color::RED;
1714 outlineMapSet["width"] = 0.0f;
1715 label.SetProperty(TextLabel::Property::OUTLINE, outlineMapSet);
1717 application.SendNotification();
1718 application.Render();
1720 outlineMapGet = label.GetProperty<Property::Map>(TextLabel::Property::OUTLINE);
1722 Property::Value* colorValue = outlineMapGet.Find("color");
1724 bool colorMatched(false);
1728 Property::Type valueType = colorValue->GetType();
1730 if(Property::STRING == valueType)
1732 std::string stringValue;
1733 colorValue->Get(stringValue);
1734 if(stringValue == "red")
1736 colorMatched = true;
1739 else if(Property::VECTOR4 == valueType)
1741 Vector4 colorVector4;
1742 colorValue->Get(colorVector4);
1743 if(colorVector4 == Color::RED)
1745 colorMatched = true;
1750 DALI_TEST_EQUALS(colorMatched, true, TEST_LOCATION);
1755 int UtcDaliToolkitTextlabelMultiline(void)
1757 ToolkitTestApplication application;
1758 tet_infoline(" UtcDaliToolkitTextlabelMultiline");
1760 TextLabel label = TextLabel::New();
1761 label.SetProperty(TextLabel::Property::TEXT, "Hello world Hello world Hello world Hello world Hello world Hello world");
1762 label.SetProperty(TextLabel::Property::POINT_SIZE, 20);
1763 label.SetProperty(TextLabel::Property::MULTI_LINE, false);
1764 application.GetScene().Add(label);
1766 application.SendNotification();
1767 application.Render();
1769 int lineCount = label.GetProperty<int>(TextLabel::Property::LINE_COUNT);
1770 DALI_TEST_EQUALS(lineCount, 1, TEST_LOCATION);
1772 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
1774 application.SendNotification();
1775 application.Render();
1777 lineCount = label.GetProperty<int>(TextLabel::Property::LINE_COUNT);
1778 DALI_TEST_EQUALS(true, (lineCount > 1), TEST_LOCATION);
1783 int UtcDaliToolkitTextlabelTextDirection(void)
1785 ToolkitTestApplication application;
1786 tet_infoline(" UtcDaliToolkitTextlabelTextDirection");
1788 TextLabel label = TextLabel::New();
1789 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::TEXT_DIRECTION), static_cast<int>(Toolkit::DevelText::TextDirection::LEFT_TO_RIGHT), TEST_LOCATION);
1791 label.SetProperty(TextLabel::Property::TEXT, "Hello world");
1792 label.SetProperty(TextLabel::Property::POINT_SIZE, 20);
1793 label.SetProperty(DevelTextLabel::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION, false);
1794 application.GetScene().Add(label);
1797 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::TEXT_DIRECTION), static_cast<int>(Toolkit::DevelText::TextDirection::LEFT_TO_RIGHT), TEST_LOCATION);
1800 label.SetProperty(TextLabel::Property::TEXT, "ﻡﺮﺤﺑﺍ ﺏﺎﻠﻋﺎﻠﻣ ﻡﺮﺤﺑﺍ");
1801 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::TEXT_DIRECTION), static_cast<int>(Toolkit::DevelText::TextDirection::RIGHT_TO_LEFT), TEST_LOCATION);
1803 // Test RTL text starting with weak character
1804 label.SetProperty(TextLabel::Property::TEXT, "()ﻡﺮﺤﺑﺍ ﺏﺎﻠﻋﺎﻠﻣ ﻡﺮﺤﺑﺍ");
1805 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::TEXT_DIRECTION), static_cast<int>(Toolkit::DevelText::TextDirection::RIGHT_TO_LEFT), TEST_LOCATION);
1807 // Test RTL text string with emoji and weak character
1808 label.SetProperty(TextLabel::Property::TEXT, "\xF0\x9F\x98\x81 () ﻡﺮﺤﺑﺍ ﺏﺎﻠﻋﺎﻠﻣ ﻡﺮﺤﺑﺍ");
1809 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::TEXT_DIRECTION), static_cast<int>(Toolkit::DevelText::TextDirection::RIGHT_TO_LEFT), TEST_LOCATION);
1814 int UtcDaliToolkitTextlabelVerticalLineAlignment(void)
1816 ToolkitTestApplication application;
1817 tet_infoline(" UtcDaliToolkitTextlabelVerticalLineAlignment");
1819 TextLabel label = TextLabel::New();
1821 label.SetProperty(DevelTextLabel::Property::VERTICAL_LINE_ALIGNMENT, DevelText::VerticalLineAlignment::TOP);
1822 label.SetProperty(TextLabel::Property::TEXT, "Hello world");
1823 label.SetProperty(TextLabel::Property::POINT_SIZE, 15);
1824 label.SetProperty(TextLabel::Property::LINE_SPACING, 12);
1825 application.GetScene().Add(label);
1826 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::VERTICAL_LINE_ALIGNMENT), static_cast<int>(Toolkit::DevelText::VerticalLineAlignment::TOP), TEST_LOCATION);
1828 label.SetProperty(DevelTextLabel::Property::VERTICAL_LINE_ALIGNMENT, DevelText::VerticalLineAlignment::MIDDLE);
1829 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::VERTICAL_LINE_ALIGNMENT), static_cast<int>(Toolkit::DevelText::VerticalLineAlignment::MIDDLE), TEST_LOCATION);
1831 label.SetProperty(DevelTextLabel::Property::VERTICAL_LINE_ALIGNMENT, DevelText::VerticalLineAlignment::BOTTOM);
1832 DALI_TEST_EQUALS(label.GetProperty<int>(DevelTextLabel::Property::VERTICAL_LINE_ALIGNMENT), static_cast<int>(Toolkit::DevelText::VerticalLineAlignment::BOTTOM), TEST_LOCATION);
1837 int UtcDaliToolkitTextLabelBitmapFont(void)
1839 ToolkitTestApplication application;
1840 tet_infoline(" UtcDaliToolkitTextLabelBitmapFont");
1842 DevelText::BitmapFontDescription fontDescription;
1843 fontDescription.name = "Digits";
1844 fontDescription.underlinePosition = 0.f;
1845 fontDescription.underlineThickness = 0.f;
1847 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0030.png", ":", 34.f, 0.f});
1848 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0031.png", "0", 34.f, 0.f});
1849 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0032.png", "1", 34.f, 0.f});
1850 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0033.png", "2", 34.f, 0.f});
1851 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0034.png", "3", 34.f, 0.f});
1852 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0035.png", "4", 34.f, 0.f});
1853 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0036.png", "5", 34.f, 0.f});
1854 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0037.png", "6", 34.f, 0.f});
1855 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0038.png", "7", 34.f, 0.f});
1856 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0039.png", "8", 34.f, 0.f});
1857 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u003a.png", "9", 34.f, 0.f});
1859 TextAbstraction::BitmapFont bitmapFont;
1860 DevelText::CreateBitmapFont(fontDescription, bitmapFont);
1862 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
1863 fontClient.GetFontId(bitmapFont);
1865 TextLabel label = TextLabel::New();
1867 label.SetProperty(TextLabel::Property::TEXT, "0123456789:");
1868 label.SetProperty(TextLabel::Property::FONT_FAMILY, "Digits");
1870 // The text has been laid out with the bitmap font if the natural size is the sum of all the width (322) and 34 height.
1871 DALI_TEST_EQUALS(label.GetNaturalSize(), Vector3(322.f, 34.f, 0.f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
1873 application.GetScene().Add(label);
1875 application.SendNotification();
1876 application.Render();
1878 // The text has been rendered if the height of the text-label is the height of the line.
1879 DALI_TEST_EQUALS(label.GetCurrentProperty<Vector3>(Actor::Property::SIZE).height, 34.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
1884 int ConvertPointToPixel(float point)
1886 unsigned int horizontalDpi = 0u;
1887 unsigned int verticalDpi = 0u;
1888 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
1889 fontClient.GetDpi(horizontalDpi, verticalDpi);
1891 return (point * 72.f) / static_cast<float>(horizontalDpi);
1894 int UtcDaliToolkitTextlabelTextFit(void)
1896 ToolkitTestApplication application;
1897 tet_infoline(" UtcDaliToolkitTextlabelTextFit");
1898 TextLabel label = TextLabel::New();
1899 Vector2 size(460.0f, 100.0f);
1900 label.SetProperty(Actor::Property::SIZE, size);
1901 label.SetProperty(TextLabel::Property::TEXT, "Hello world");
1903 // connect to the text git changed signal.
1904 ConnectionTracker* testTracker = new ConnectionTracker();
1905 DevelTextLabel::TextFitChangedSignal(label).Connect(&TestTextFitChangedCallback);
1906 bool textFitChangedSignal = false;
1907 label.ConnectSignal(testTracker, "textFitChanged", CallbackFunctor(&textFitChangedSignal));
1908 gTextFitChangedCallBackCalled = false;
1911 Property::Map textFitMapSet;
1912 textFitMapSet["enable"] = true;
1913 textFitMapSet["minSize"] = 10.f;
1914 textFitMapSet["maxSize"] = 100.f;
1915 textFitMapSet["stepSize"] = -1.f;
1916 textFitMapSet["fontSizeType"] = "pointSize";
1918 label.SetProperty(Toolkit::DevelTextLabel::Property::TEXT_FIT, textFitMapSet);
1919 label.SetProperty(TextLabel::Property::POINT_SIZE, 120.f);
1921 application.GetScene().Add(label);
1923 application.SendNotification();
1924 application.Render();
1926 const Vector3 EXPECTED_NATURAL_SIZE(450.0f, 96.0f, 0.0f);
1927 DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, label.GetNaturalSize(), TEST_LOCATION);
1929 DALI_TEST_CHECK(gTextFitChangedCallBackCalled);
1930 DALI_TEST_CHECK(textFitChangedSignal);
1933 textFitMapSet.Clear();
1934 textFitMapSet["enable"] = true;
1935 textFitMapSet["minSize"] = ConvertPointToPixel(10.f);
1936 textFitMapSet["maxSize"] = ConvertPointToPixel(100.f);
1937 textFitMapSet["stepSize"] = ConvertPointToPixel(1.f);
1938 textFitMapSet["fontSizeType"] = "pixelSize";
1940 label.SetProperty(Toolkit::DevelTextLabel::Property::TEXT_FIT, textFitMapSet);
1942 application.SendNotification();
1943 application.Render();
1945 DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, label.GetNaturalSize(), TEST_LOCATION);
1950 int UtcDaliToolkitTextlabelMaxTextureSet(void)
1952 ToolkitTestApplication application;
1953 tet_infoline(" UtcDaliToolkitTextlabelMaxTextureSet");
1955 DevelText::BitmapFontDescription fontDescription;
1956 fontDescription.name = "Digits";
1957 fontDescription.glyphs.push_back({TEST_RESOURCE_DIR "/fonts/bitmap/u0030.png", ":", 200.f, 0.f});
1959 TextAbstraction::BitmapFont bitmapFont;
1960 DevelText::CreateBitmapFont(fontDescription, bitmapFont);
1962 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
1963 fontClient.GetFontId(bitmapFont);
1965 TextLabel label = TextLabel::New();
1966 label.SetProperty(TextLabel::Property::FONT_FAMILY, "Digits");
1967 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
1968 label.SetProperty(TextLabel::Property::TEXT, ":This is a long sample text made to allow max texture size to be exceeded.");
1969 label.SetProperty(TextLabel::Property::POINT_SIZE, 200.f);
1970 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
1972 Property::Map underlineMapSet;
1973 underlineMapSet.Clear();
1974 underlineMapSet.Insert("enable", true);
1975 underlineMapSet.Insert("color", Color::RED);
1976 underlineMapSet.Insert("height", 1);
1977 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
1978 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
1980 Property::Map strikethroughMapSet;
1981 strikethroughMapSet.Clear();
1982 strikethroughMapSet.Insert("enable", true);
1983 strikethroughMapSet.Insert("color", Color::RED);
1984 strikethroughMapSet.Insert("height", 2.0f);
1985 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
1986 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
1988 application.GetScene().Add(label);
1990 application.SendNotification();
1991 application.Render();
1993 const int maxTextureSize = Dali::GetMaxTextureSize();
1994 // Whether the rendered text is greater than maxTextureSize
1995 DALI_TEST_CHECK(label.GetCurrentProperty<Vector3>(Actor::Property::SIZE).height > maxTextureSize);
1997 // Check if the number of renderers is greater than 1.
1998 DALI_TEST_CHECK(label.GetRendererCount() > 1u);
2001 underlineMapSet.Clear();
2002 underlineMapSet.Insert("enable", false);
2003 underlineMapSet.Insert("color", Color::BLUE);
2004 underlineMapSet.Insert("height", 0);
2005 underlineMapSet.Insert("type", Text::Underline::DASHED);
2006 underlineMapSet.Insert("dashWidth", 2);
2007 underlineMapSet.Insert("dashGap", 1);
2008 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
2009 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
2011 application.GetScene().Add(label);
2013 application.SendNotification();
2014 application.Render();
2016 // Whether the rendered text is greater than maxTextureSize
2017 DALI_TEST_CHECK(label.GetCurrentProperty<Vector3>(Actor::Property::SIZE).height > maxTextureSize);
2019 // Check if the number of renderers is greater than 1.
2020 DALI_TEST_CHECK(label.GetRendererCount() > 1u);
2023 underlineMapSet.Clear();
2024 underlineMapSet.Insert("enable", false);
2025 underlineMapSet.Insert("color", Color::BLUE);
2026 underlineMapSet.Insert("height", 0);
2027 underlineMapSet.Insert("type", Text::Underline::DOUBLE);
2028 underlineMapSet.Insert("dashWidth", 2);
2029 underlineMapSet.Insert("dashGap", 1);
2030 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
2031 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
2033 application.GetScene().Add(label);
2035 application.SendNotification();
2036 application.Render();
2038 // Whether the rendered text is greater than maxTextureSize
2039 DALI_TEST_CHECK(label.GetCurrentProperty<Vector3>(Actor::Property::SIZE).height > maxTextureSize);
2041 // Check if the number of renderers is greater than 1.
2042 DALI_TEST_CHECK(label.GetRendererCount() > 1u);
2047 int UtcDaliToolkitTextlabelStrikethroughExceedsWidthAndHeight(void)
2049 ToolkitTestApplication application;
2050 tet_infoline(" UtcDaliToolkitTextlabelStrikethroughExceedsWidthAndHeight");
2052 TextLabel label = TextLabel::New();
2053 label.SetProperty(TextLabel::Property::TEXT, "Test");
2054 label.SetProperty(TextLabel::Property::FONT_FAMILY, "DejaVu Sans");
2055 //Exeeding BufferWidth
2056 label.SetProperty(Actor::Property::SIZE, Vector2(200.f, 400.0f));
2057 label.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, HorizontalAlignment::RIGHT);
2058 label.SetProperty(TextLabel::Property::POINT_SIZE, 200.f);
2060 application.GetScene().Add(label);
2061 application.SendNotification();
2062 application.Render();
2064 Property::Map strikethroughMapSet;
2065 strikethroughMapSet.Clear();
2066 strikethroughMapSet.Insert("enable", true);
2067 strikethroughMapSet.Insert("color", Color::BLUE);
2068 strikethroughMapSet.Insert("height", 2.0f);
2069 label.SetProperty(TextLabel::Property::TEXT, "Test1");
2070 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
2071 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
2072 application.GetScene().Add(label);
2073 application.SendNotification();
2074 application.Render();
2075 // Check if the number of renderers is 1.
2076 DALI_TEST_EQUALS(1, label.GetRendererCount(), TEST_LOCATION);
2078 label = TextLabel::New();
2079 label.SetProperty(TextLabel::Property::TEXT, "Test");
2080 label.SetProperty(TextLabel::Property::FONT_FAMILY, "DejaVu Sans");
2082 //Exeeding BufferHeight
2083 label.SetProperty(Actor::Property::SIZE, Vector2(200.f, 100.0f));
2084 label.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, HorizontalAlignment::RIGHT);
2085 label.SetProperty(TextLabel::Property::POINT_SIZE, 200.f);
2087 application.GetScene().Add(label);
2088 application.SendNotification();
2089 application.Render();
2091 strikethroughMapSet.Clear();
2092 strikethroughMapSet.Insert("enable", true);
2093 strikethroughMapSet.Insert("color", Color::BLUE);
2094 strikethroughMapSet.Insert("height", 2.0f);
2095 label.SetProperty(TextLabel::Property::TEXT, "Test2");
2096 label.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
2097 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
2098 application.GetScene().Add(label);
2099 application.SendNotification();
2100 application.Render();
2101 // Check if the number of renderers is 1.
2102 DALI_TEST_EQUALS(1, label.GetRendererCount(), TEST_LOCATION);
2107 int UtcDaliToolkitTextlabelUnderlineExceedsWidth(void)
2109 ToolkitTestApplication application;
2110 tet_infoline(" UtcDaliToolkitTextlabelUnderlineExceedsWidth");
2112 TextLabel label = TextLabel::New();
2113 label.SetProperty(TextLabel::Property::TEXT, "Test");
2114 label.SetProperty(TextLabel::Property::FONT_FAMILY, "DejaVu Sans");
2115 //Exeeding BufferWidth
2116 label.SetProperty(Actor::Property::SIZE, Vector2(200.f, 400.0f));
2117 label.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, HorizontalAlignment::RIGHT);
2118 label.SetProperty(TextLabel::Property::POINT_SIZE, 200.f);
2120 application.GetScene().Add(label);
2121 application.SendNotification();
2122 application.Render();
2124 Property::Map underlineMapSet;
2127 underlineMapSet.Clear();
2128 underlineMapSet.Insert("enable", true);
2129 underlineMapSet.Insert("color", Color::BLUE);
2130 underlineMapSet.Insert("height", 1);
2131 underlineMapSet.Insert("type", Text::Underline::SOLID);
2132 underlineMapSet.Insert("dashWidth", 2);
2133 underlineMapSet.Insert("dashGap", 1);
2134 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
2135 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
2137 application.GetScene().Add(label);
2139 application.SendNotification();
2140 application.Render();
2142 // Check if the number of renderers is 1.
2143 DALI_TEST_EQUALS(1, label.GetRendererCount(), TEST_LOCATION);
2146 underlineMapSet.Clear();
2147 underlineMapSet.Insert("enable", true);
2148 underlineMapSet.Insert("color", Color::BLUE);
2149 underlineMapSet.Insert("height", 1);
2150 underlineMapSet.Insert("type", Text::Underline::DASHED);
2151 underlineMapSet.Insert("dashWidth", 2);
2152 underlineMapSet.Insert("dashGap", 1);
2153 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
2154 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
2156 application.GetScene().Add(label);
2158 application.SendNotification();
2159 application.Render();
2161 // Check if the number of renderers is 1.
2162 DALI_TEST_EQUALS(1, label.GetRendererCount(), TEST_LOCATION);
2165 underlineMapSet.Clear();
2166 underlineMapSet.Insert("enable", true);
2167 underlineMapSet.Insert("color", Color::BLUE);
2168 underlineMapSet.Insert("height", 1);
2169 underlineMapSet.Insert("type", Text::Underline::DOUBLE);
2170 underlineMapSet.Insert("dashWidth", 2);
2171 underlineMapSet.Insert("dashGap", 1);
2172 label.SetProperty(TextLabel::Property::UNDERLINE, underlineMapSet);
2173 label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLUE);
2175 application.GetScene().Add(label);
2177 application.SendNotification();
2178 application.Render();
2180 // Check if the number of renderers is 1.
2181 DALI_TEST_EQUALS(1, label.GetRendererCount(), TEST_LOCATION);
2186 int UtcDaliToolkitTextlabelLastCharacterIndex(void)
2188 ToolkitTestApplication application;
2189 tet_infoline(" UtcDaliToolkitTextlabelLastCharacterIndex");
2191 Vector2 size(300.0f, 100.0f);
2193 Dali::Toolkit::DevelText::RendererParameters textParameters;
2194 textParameters.text = "This is a sample text to get the last index.";
2195 textParameters.layout = "multiLine";
2196 textParameters.fontSize = 20.f;
2197 textParameters.textWidth = 300u;
2198 textParameters.textHeight = 100u;
2199 textParameters.ellipsisEnabled = true;
2200 Dali::Property::Array indexArray = Dali::Toolkit::DevelText::GetLastCharacterIndex(textParameters);
2202 DALI_TEST_CHECK(!indexArray.Empty());
2203 DALI_TEST_EQUALS(indexArray.GetElementAt(0).Get<int>(), 10, TEST_LOCATION);
2208 int UtcDaliToolkitTextlabelFontSizeScale(void)
2210 ToolkitTestApplication application;
2211 tet_infoline(" UtcDaliToolkitTextlabelFontSizeScale");
2213 TextLabel label = TextLabel::New();
2214 label.SetProperty(TextLabel::Property::POINT_SIZE, 30.f);
2215 label.SetProperty(TextLabel::Property::TEXT, "Test");
2216 Vector3 nonScaledSize = label.GetNaturalSize();
2218 TextLabel labelScaled = TextLabel::New();
2219 labelScaled.SetProperty(TextLabel::Property::POINT_SIZE, 15.f);
2220 labelScaled.SetProperty(Toolkit::DevelTextLabel::Property::FONT_SIZE_SCALE, 2.f);
2221 labelScaled.SetProperty(TextLabel::Property::TEXT, "Test");
2222 Vector3 scaledSize = labelScaled.GetNaturalSize();
2224 DALI_TEST_EQUALS(nonScaledSize, scaledSize, TEST_LOCATION);
2226 label.SetProperty(TextLabel::Property::PIXEL_SIZE, 30.f);
2227 label.SetProperty(TextLabel::Property::TEXT, "Test");
2228 nonScaledSize = label.GetNaturalSize();
2230 labelScaled.SetProperty(TextLabel::Property::PIXEL_SIZE, 15.f);
2231 labelScaled.SetProperty(Toolkit::DevelTextLabel::Property::FONT_SIZE_SCALE, 2.f);
2232 labelScaled.SetProperty(TextLabel::Property::TEXT, "Test");
2233 scaledSize = labelScaled.GetNaturalSize();
2235 DALI_TEST_EQUALS(nonScaledSize, scaledSize, TEST_LOCATION);
2240 // Positive test for the anchorClicked signal.
2241 int UtcDaliToolkitTextlabelAnchorClicked(void)
2243 ToolkitTestApplication application;
2244 tet_infoline(" UtcDaliToolkitTextlabelAnchorClicked");
2245 TextLabel label = TextLabel::New();
2246 DALI_TEST_CHECK(label);
2248 application.GetScene().Add(label);
2250 // connect to the anchor clicked signal.
2251 ConnectionTracker* testTracker = new ConnectionTracker();
2252 DevelTextLabel::AnchorClickedSignal(label).Connect(&TestAnchorClickedCallback);
2253 bool anchorClickedSignal = false;
2254 label.ConnectSignal(testTracker, "anchorClicked", CallbackFunctor(&anchorClickedSignal));
2256 gAnchorClickedCallBackCalled = false;
2257 label.SetProperty(TextLabel::Property::TEXT, "<a href='https://www.tizen.org'>TIZEN</a>");
2258 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2259 label.SetProperty(Actor::Property::SIZE, Vector2(100.f, 50.f));
2260 label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
2261 label.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2263 application.SendNotification();
2264 application.Render();
2266 // Create a tap event to touch the text label.
2267 TestGenerateTap(application, 5.0f, 25.0f, 100);
2268 application.SendNotification();
2269 application.Render();
2271 DALI_TEST_CHECK(gAnchorClickedCallBackCalled);
2272 DALI_TEST_CHECK(anchorClickedSignal);
2275 gAnchorClickedCallBackCalled = false;
2276 anchorClickedSignal = false;
2277 label.SetProperty(TextLabel::Property::TEXT, "");
2278 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, false);
2280 application.SendNotification();
2281 application.Render();
2284 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2285 label.SetProperty(TextLabel::Property::TEXT, "<a href='https://www.tizen.org'>TIZEN</a>");
2286 label.SetProperty(Actor::Property::SIZE, Vector2(100.f, 50.f));
2287 label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
2288 label.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2290 application.SendNotification();
2291 application.Render();
2293 // Create a tap event to touch the text label.
2294 TestGenerateTap(application, 5.0f, 25.0f, 200);
2295 application.SendNotification();
2296 application.Render();
2298 DALI_TEST_CHECK(gAnchorClickedCallBackCalled);
2299 DALI_TEST_CHECK(anchorClickedSignal);
2301 gAnchorClickedCallBackNotCalled = true;
2302 // Tap the outside of anchor, callback should not be called.
2303 TestGenerateTap(application, 150.f, 100.f, 300);
2304 application.SendNotification();
2305 application.Render();
2307 DALI_TEST_CHECK(gAnchorClickedCallBackNotCalled);
2312 int UtcDaliTextLabelAtlasLimitationIsEnabledForLargeFontPointSize(void)
2314 ToolkitTestApplication application;
2315 tet_infoline(" UtcDaliTextLabelAtlasLimitationIsEnabledForLargeFontPointSize ");
2317 //TextLabel is not using Atlas but this is to unify font-size on text-controllers
2319 // +2: First one to handle the equal case. Second one to handle odd to even case of GetNaturalSize
2320 const uint32_t lessThanWidth = TextAbstraction::FontClient::MAX_TEXT_ATLAS_WIDTH - TextAbstraction::FontClient::PADDING_TEXT_ATLAS_BLOCK + 2;
2321 const uint32_t lessThanHeight = TextAbstraction::FontClient::MAX_TEXT_ATLAS_HEIGHT - TextAbstraction::FontClient::PADDING_TEXT_ATLAS_BLOCK + 2;
2323 // Create a text editor
2324 TextLabel textLabel = TextLabel::New();
2325 //Set size to avoid automatic eliding
2326 textLabel.SetProperty(Actor::Property::SIZE, Vector2(1025, 1025));
2327 //Set very large font-size using point-size
2328 textLabel.SetProperty(TextLabel::Property::POINT_SIZE, 1000);
2329 //Specify font-family
2330 textLabel.SetProperty(TextLabel::Property::FONT_FAMILY, "DejaVu Sans");
2331 //Set text to check if appear or not
2332 textLabel.SetProperty(TextLabel::Property::TEXT, "A");
2334 application.GetScene().Add(textLabel);
2336 application.SendNotification();
2337 application.Render();
2338 //Use GetNaturalSize to verify that size of block does not exceed Atlas size
2339 Vector3 naturalSize = textLabel.GetNaturalSize();
2341 DALI_TEST_GREATER(lessThanWidth, static_cast<uint32_t>(naturalSize.width), TEST_LOCATION);
2342 DALI_TEST_GREATER(lessThanHeight, static_cast<uint32_t>(naturalSize.height), TEST_LOCATION);
2347 int UtcDaliTextLabelHyphenWrapMode(void)
2349 ToolkitTestApplication application;
2350 tet_infoline(" UtcDaliTextLabelHyphenWrapMode ");
2353 TextLabel label = TextLabel::New();
2354 label.SetProperty(Actor::Property::SIZE, Vector2(150.0f, 300.f));
2355 label.SetProperty(TextLabel::Property::POINT_SIZE, 12.f);
2356 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
2357 application.GetScene().Add(label);
2358 application.SendNotification();
2359 application.Render();
2361 label.SetProperty(TextLabel::Property::TEXT, "Hi Experimen");
2362 label.SetProperty(TextLabel::Property::LINE_WRAP_MODE, DevelText::LineWrap::HYPHENATION);
2363 DALI_TEST_EQUALS(label.GetProperty<int>(TextLabel::Property::LINE_WRAP_MODE), static_cast<int>(DevelText::LineWrap::HYPHENATION), TEST_LOCATION);
2365 application.SendNotification();
2366 application.Render();
2368 lineCount = label.GetProperty<int>(TextLabel::Property::LINE_COUNT);
2374 DALI_TEST_EQUALS(lineCount, 2, TEST_LOCATION);
2376 label.SetProperty(TextLabel::Property::TEXT, "Hi Experimen");
2377 label.SetProperty(TextLabel::Property::LINE_WRAP_MODE, DevelText::LineWrap::MIXED);
2378 DALI_TEST_EQUALS(label.GetProperty<int>(TextLabel::Property::LINE_WRAP_MODE), static_cast<int>(DevelText::LineWrap::MIXED), TEST_LOCATION);
2380 application.SendNotification();
2381 application.Render();
2383 lineCount = label.GetProperty<int>(TextLabel::Property::LINE_COUNT);
2390 DALI_TEST_EQUALS(lineCount, 3, TEST_LOCATION);
2395 int utcDaliTextLabelGetHeightForWidthChangeLineCountWhenTextChanged(void)
2397 ToolkitTestApplication application;
2399 tet_infoline(" utcDaliTextLabelGetHeightForWidthChangeLineCountWhenTextChanged ");
2401 int lineCountBefore = 0;
2402 int lineCountAfter = 0;
2404 // Create a text editor
2405 TextLabel textLabel = TextLabel::New();
2406 //Set very large font-size using point-size
2407 textLabel.SetProperty(TextLabel::Property::POINT_SIZE, 10);
2408 //Specify font-family
2409 textLabel.SetProperty(TextLabel::Property::FONT_FAMILY, "DejaVu Sans");
2411 textLabel.SetProperty(Actor::Property::SIZE, Vector2(200.f, 100.f));
2412 //Set text longer than width of textLabel
2413 textLabel.SetProperty(TextLabel::Property::TEXT, "Short text");
2414 //Set line wrap mode Character
2415 textLabel.SetProperty(TextLabel::Property::LINE_WRAP_MODE, "CHARACTER");
2416 textLabel.SetProperty(TextLabel::Property::MULTI_LINE, true);
2418 application.GetScene().Add(textLabel);
2420 application.SendNotification();
2421 application.Render();
2423 lineCountBefore = textLabel.GetProperty<int>(TextLabel::Property::LINE_COUNT);
2425 textLabel.SetProperty(TextLabel::Property::TEXT, "This is very loooooooooooooooooooooooooooooooooooong text for test");
2426 lineCountAfter = textLabel.GetProperty<int>(TextLabel::Property::LINE_COUNT);
2428 // When the text changed, the Line-count should be updated according to new text.
2429 // Because the GetHeightForWidth is called in Controller::GetLineCount(float width)
2430 DALI_TEST_EQUALS(lineCountBefore, 1, TEST_LOCATION);
2431 DALI_TEST_GREATER(lineCountAfter, 1, TEST_LOCATION);
2436 int utcDaliTextLabelGeometryRTL(void)
2438 ToolkitTestApplication application;
2439 tet_infoline(" utcDaliTextLabelGeometryRTL");
2441 TextLabel label = TextLabel::New();
2442 DALI_TEST_CHECK(label);
2444 application.GetScene().Add(label);
2446 label.SetProperty(TextLabel::Property::POINT_SIZE, 7.f);
2447 label.SetProperty(Actor::Property::SIZE, Vector2(150.f, 100.f));
2448 label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
2449 label.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2450 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2451 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
2452 label.SetProperty(TextLabel::Property::TEXT, "line1 \nline2\nline 3\nالاخيرالسطر");
2454 // Avoid a crash when core load gl resources.
2455 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2457 // Render and notify
2458 application.SendNotification();
2459 application.Render();
2461 unsigned int expectedCount = 4;
2462 unsigned int startIndex = 3;
2463 unsigned int endIndex = 24;
2465 Vector<Vector2> positionsList = DevelTextLabel::GetTextPosition(label, startIndex, endIndex);
2466 Vector<Vector2> sizeList = DevelTextLabel::GetTextSize(label, startIndex, endIndex);
2468 DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
2469 DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
2471 Vector<Vector2> expectedSizes;
2472 Vector<Vector2> expectedPositions;
2474 expectedPositions.PushBack(Vector2(24, 0));
2475 expectedSizes.PushBack(Vector2(33, 25));
2477 expectedPositions.PushBack(Vector2(-1, 25));
2478 expectedSizes.PushBack(Vector2(52, 25));
2480 expectedPositions.PushBack(Vector2(-1, 50));
2481 expectedSizes.PushBack(Vector2(59, 25));
2483 expectedPositions.PushBack(Vector2(73, 75));
2484 expectedSizes.PushBack(Vector2(37, 25));
2486 TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
2491 int utcDaliTextLabelGeometryGlyphMiddle(void)
2493 ToolkitTestApplication application;
2494 tet_infoline(" utcDaliTextLabelGeometryGlyphMiddle");
2496 TextLabel label = TextLabel::New();
2497 DALI_TEST_CHECK(label);
2499 application.GetScene().Add(label);
2501 label.SetProperty(TextLabel::Property::POINT_SIZE, 7.f);
2502 label.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
2503 label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
2504 label.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2505 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2506 label.SetProperty(TextLabel::Property::TEXT, "لا تحتوي على لا");
2508 // Avoid a crash when core load gl resources.
2509 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2511 // Render and notify
2512 application.SendNotification();
2513 application.Render();
2515 unsigned int expectedCount = 1;
2516 unsigned int startIndex = 1;
2517 unsigned int endIndex = 13;
2519 Vector<Vector2> positionsList = DevelTextLabel::GetTextPosition(label, startIndex, endIndex);
2520 Vector<Vector2> sizeList = DevelTextLabel::GetTextSize(label, startIndex, endIndex);
2522 DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
2523 DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
2525 Vector<Vector2> expectedSizes;
2526 Vector<Vector2> expectedPositions;
2528 expectedPositions.PushBack(Vector2(6, 0));
2529 expectedSizes.PushBack(Vector2(124, 25));
2531 TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
2536 int utcDaliTextLabelGeometryOneGlyph(void)
2538 ToolkitTestApplication application;
2539 tet_infoline(" utcDaliTextLabelGeometryOneGlyph ");
2541 TextLabel label = TextLabel::New();
2542 DALI_TEST_CHECK(label);
2544 application.GetScene().Add(label);
2546 label.SetProperty(TextLabel::Property::POINT_SIZE, 7.f);
2547 label.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
2548 label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
2549 label.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2550 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2551 label.SetProperty(TextLabel::Property::TEXT, "H");
2553 // Avoid a crash when core load gl resources.
2554 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2556 // Render and notify
2557 application.SendNotification();
2558 application.Render();
2560 unsigned int expectedCount = 1;
2561 unsigned int startIndex = 0;
2562 unsigned int endIndex = 0;
2564 Vector<Vector2> positionsList = DevelTextLabel::GetTextPosition(label, startIndex, endIndex);
2565 Vector<Vector2> sizeList = DevelTextLabel::GetTextSize(label, startIndex, endIndex);
2567 DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
2568 DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
2570 Vector<Vector2> expectedSizes;
2571 Vector<Vector2> expectedPositions;
2573 expectedPositions.PushBack(Vector2(-2, 0));
2574 expectedSizes.PushBack(Vector2(16, 25));
2576 TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
2581 int UtcDaliToolkitTextlabelEllipsisPositionProperty(void)
2583 ToolkitTestApplication application;
2584 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty ");
2585 TextLabel textLabel = TextLabel::New();
2587 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Default is END");
2588 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::END), TEST_LOCATION);
2590 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to START");
2591 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, DevelText::EllipsisPosition::START);
2592 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::START), TEST_LOCATION);
2594 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to MIDDLE");
2595 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, DevelText::EllipsisPosition::MIDDLE);
2596 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::MIDDLE), TEST_LOCATION);
2598 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to END");
2599 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, DevelText::EllipsisPosition::END);
2600 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::END), TEST_LOCATION);
2602 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to START using integer");
2603 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, 1);
2604 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::START), TEST_LOCATION);
2606 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to MIDDLE using integer");
2607 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, 2);
2608 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::MIDDLE), TEST_LOCATION);
2610 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to END using integer");
2611 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, 0);
2612 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::END), TEST_LOCATION);
2614 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to START using string - uppercase");
2615 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, "START");
2616 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::START), TEST_LOCATION);
2618 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to MIDDLE using string - uppercase");
2619 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, "MIDDLE");
2620 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::MIDDLE), TEST_LOCATION);
2622 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to END using string - uppercase");
2623 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, "END");
2624 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::END), TEST_LOCATION);
2626 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to START using string - lowercase");
2627 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, "start");
2628 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::START), TEST_LOCATION);
2630 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to MIDDLE using string - lowercase");
2631 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, "middle");
2632 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::MIDDLE), TEST_LOCATION);
2634 tet_infoline(" UtcDaliToolkitTextlabelEllipsisPositionProperty - Change to END using string - lowercase");
2635 textLabel.SetProperty(DevelTextLabel::Property::ELLIPSIS_POSITION, "end");
2636 DALI_TEST_EQUALS(textLabel.GetProperty<int>(DevelTextLabel::Property::ELLIPSIS_POSITION), static_cast<int>(Toolkit::DevelText::EllipsisPosition::END), TEST_LOCATION);
2641 int UtcDaliToolkitTextLabelStrikethroughGeneration(void)
2643 ToolkitTestApplication application;
2644 tet_infoline(" UtcDaliToolkitTextLabelStrikethroughGeneration");
2646 TextLabel textLabel = TextLabel::New();
2647 textLabel.SetProperty(TextLabel::Property::TEXT, "Test");
2648 textLabel.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 100.f));
2649 textLabel.SetProperty(TextLabel::Property::POINT_SIZE, 10);
2650 textLabel.SetProperty(TextLabel::Property::FONT_FAMILY, "DejaVu Sans");
2652 application.GetScene().Add(textLabel);
2653 application.SendNotification();
2654 application.Render();
2656 Property::Map strikethroughMapSet;
2657 Property::Map strikethroughMapGet;
2659 strikethroughMapSet.Insert("enable", true);
2660 strikethroughMapSet.Insert("color", Color::RED);
2661 strikethroughMapSet.Insert("height", 2.0f);
2663 // Check the strikethrough property
2664 textLabel.SetProperty(DevelTextLabel::Property::STRIKETHROUGH, strikethroughMapSet);
2665 strikethroughMapGet = textLabel.GetProperty<Property::Map>(DevelTextLabel::Property::STRIKETHROUGH);
2666 textLabel.SetProperty(TextLabel::Property::TEXT, "Test1");
2667 DALI_TEST_EQUALS(strikethroughMapGet.Count(), strikethroughMapSet.Count(), TEST_LOCATION);
2668 DALI_TEST_EQUALS(DaliTestCheckMaps(strikethroughMapGet, strikethroughMapSet), true, TEST_LOCATION);
2670 // Render and notify
2671 application.SendNotification();
2672 application.Render();
2674 strikethroughMapSet.Clear();
2675 strikethroughMapGet.Clear();
2680 int UtcDaliToolkitTextLabelMarkupRelativeLineHeight(void)
2682 ToolkitTestApplication application;
2683 tet_infoline(" UtcDaliToolkitTextLabelMarkupRelativeLineHeight");
2685 TextLabel label = TextLabel::New();
2686 label.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 300.f));
2687 label.SetProperty(TextLabel::Property::POINT_SIZE, 10);
2688 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
2689 label.SetProperty(TextLabel::Property::TEXT, "line 1\nline 2\nline 3\nline 4\nline 5");
2690 label.SetProperty(DevelTextLabel::Property::RELATIVE_LINE_SIZE, 1.0f);
2691 label.SetProperty(TextLabel::Property::ELLIPSIS, false);
2692 label.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2694 TextLabel labelSingleLineParagraph = TextLabel::New();
2695 labelSingleLineParagraph.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 300.f));
2696 labelSingleLineParagraph.SetProperty(TextLabel::Property::POINT_SIZE, 10);
2697 labelSingleLineParagraph.SetProperty(TextLabel::Property::MULTI_LINE, true);
2698 labelSingleLineParagraph.SetProperty(TextLabel::Property::TEXT, "<p>line 1</p><p rel-line-height=0.5>line 2</p>line 3<p rel-line-height=3>line 4</p>line 5");
2699 labelSingleLineParagraph.SetProperty(DevelTextLabel::Property::RELATIVE_LINE_SIZE, 1.0f);
2700 labelSingleLineParagraph.SetProperty(TextLabel::Property::ELLIPSIS, false);
2701 labelSingleLineParagraph.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2703 TextLabel labelMultiLineParagraph = TextLabel::New();
2704 labelMultiLineParagraph.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 300.f));
2705 labelMultiLineParagraph.SetProperty(TextLabel::Property::POINT_SIZE, 10);
2706 labelMultiLineParagraph.SetProperty(TextLabel::Property::MULTI_LINE, true);
2707 labelMultiLineParagraph.SetProperty(TextLabel::Property::TEXT, "<p>line 1</p><p rel-line-height=0.5>line\n2</p>line 3<p rel-line-height=3>line\n4</p>line 5");
2708 labelMultiLineParagraph.SetProperty(DevelTextLabel::Property::RELATIVE_LINE_SIZE, 1.0f);
2709 labelMultiLineParagraph.SetProperty(TextLabel::Property::ELLIPSIS, false);
2710 labelMultiLineParagraph.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2712 application.GetScene().Add(label);
2713 application.GetScene().Add(labelSingleLineParagraph);
2714 application.GetScene().Add(labelMultiLineParagraph);
2715 application.SendNotification();
2716 application.Render();
2718 Vector3 naturalSize = label.GetNaturalSize();
2719 Vector3 relativeSingleNaturalSize = labelSingleLineParagraph.GetNaturalSize();
2720 Vector3 relativeMultiNaturalSize = labelMultiLineParagraph.GetNaturalSize();
2722 float lineSize = naturalSize.y / 5.0f; //total size/number of lines
2724 //no effect of relative line size for paragraph with single line
2725 DALI_TEST_EQUALS(naturalSize.y, relativeSingleNaturalSize.y, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
2727 DALI_TEST_EQUALS(lineSize * 8.5f, relativeMultiNaturalSize.y, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
2732 int UtcDaliToolkitTextLabelRelativeLineHeight(void)
2734 ToolkitTestApplication application;
2735 tet_infoline(" UtcDaliToolkitTextLabelRelativeLineHeight");
2737 TextLabel label = TextLabel::New();
2738 label.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 300.f));
2739 label.SetProperty(TextLabel::Property::POINT_SIZE, 10);
2740 label.SetProperty(TextLabel::Property::TEXT, "Hello\nWorld");
2742 application.GetScene().Add(label);
2743 application.SendNotification();
2744 application.Render();
2746 Vector3 naturalSize = label.GetNaturalSize();
2748 label.SetProperty(DevelTextLabel::Property::RELATIVE_LINE_SIZE, 0.5f);
2750 application.SendNotification();
2751 application.Render();
2753 Vector3 relativeNaturalSize = label.GetNaturalSize();
2755 DALI_TEST_EQUALS(naturalSize.y, relativeNaturalSize.y, TEST_LOCATION);
2757 label.SetProperty(DevelTextLabel::Property::RELATIVE_LINE_SIZE, 2.0f);
2759 application.SendNotification();
2760 application.Render();
2762 relativeNaturalSize = label.GetNaturalSize();
2764 DALI_TEST_EQUALS(naturalSize.y * 2, relativeNaturalSize.y, TEST_LOCATION);
2768 int UtcDaliTextLabelCharacterSpacing(void)
2770 ToolkitTestApplication application;
2771 tet_infoline(" UtcDaliTextLabelCharacterSpacing ");
2773 TextLabel textLabel = TextLabel::New();
2775 textLabel.SetProperty(Actor::Property::SIZE, Vector2(150.0f, 300.f));
2777 application.GetScene().Add(textLabel);
2778 application.SendNotification();
2779 application.Render();
2781 textLabel.SetProperty(TextLabel::Property::TEXT, "Hi Experiment");
2782 textLabel.SetProperty(DevelTextLabel::Property::CHARACTER_SPACING, 10.f);
2783 DALI_TEST_EQUALS(textLabel.GetProperty<float>(DevelTextLabel::Property::CHARACTER_SPACING), 10.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
2785 application.SendNotification();
2786 application.Render();
2791 int UtcDaliTextTextLabelSizeNegativeLineSpacing(void)
2793 ToolkitTestApplication application;
2794 tet_infoline("UtcDaliTextTextLabelSizeNegativeLineSpacing");
2796 TextLabel label = TextLabel::New();
2798 float lineSpacing = -20.f;
2800 label.SetProperty(Actor::Property::SIZE, Vector2(450.0f, 300.f));
2801 label.SetProperty(TextLabel::Property::POINT_SIZE, 10.f);
2802 label.SetProperty(DevelTextLabel::Property::LINE_SPACING, lineSpacing);
2803 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
2804 label.SetProperty(TextLabel::Property::TEXT, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
2806 application.GetScene().Add(label);
2807 application.SendNotification();
2808 application.Render();
2810 Vector<Vector2> positionsList = DevelTextLabel::GetTextPosition(label, 0, 123);
2811 Vector<Vector2> sizeList = DevelTextLabel::GetTextSize(label, 0, 123);
2813 Vector2 lastLinePos = positionsList[positionsList.Size() - 1];
2814 Vector2 lastLineSize = sizeList[sizeList.Size() - 1];
2816 DALI_TEST_EQUALS(sizeList[0].y * (sizeList.Size() - 1), lastLinePos.y, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
2817 DALI_TEST_EQUALS(sizeList[0].y - lineSpacing, lastLineSize.y, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
2819 application.SendNotification();
2820 application.Render();
2825 int UtcDaliTextLabelNegativeLineSpacingWithEllipsis(void)
2827 ToolkitTestApplication application;
2828 tet_infoline("UtcDaliTextLabelNegativeLineSpacingWithEllipsis");
2830 TextLabel label = TextLabel::New();
2832 float lineSpacing = -20.f;
2834 label.SetProperty(Actor::Property::SIZE, Vector2(480.0f, 100.f));
2835 label.SetProperty(TextLabel::Property::POINT_SIZE, 11.0f);
2836 label.SetProperty(DevelTextLabel::Property::LINE_SPACING, lineSpacing);
2837 label.SetProperty(TextLabel::Property::MULTI_LINE, true);
2838 label.SetProperty(TextLabel::Property::TEXT, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
2839 label.SetProperty(TextLabel::Property::ELLIPSIS, true);
2841 application.GetScene().Add(label);
2842 application.SendNotification();
2843 application.Render();
2845 Vector<Vector2> sizeList = DevelTextLabel::GetTextSize(label, 0, 123);
2847 int lineCount = sizeList.Size();
2848 DALI_TEST_EQUALS(4, lineCount, TEST_LOCATION);
2850 application.SendNotification();
2851 application.Render();
2856 int UtcDaliToolkitTextlabelParagraphTag(void)
2858 ToolkitTestApplication application;
2859 tet_infoline(" UtcDaliToolkitTextlabelParagraphTag");
2860 TextLabel labelNewlineSeparator = TextLabel::New();
2861 TextLabel labelParagraphTag = TextLabel::New();
2862 DALI_TEST_CHECK(labelNewlineSeparator);
2863 DALI_TEST_CHECK(labelParagraphTag);
2865 application.GetScene().Add(labelNewlineSeparator);
2866 application.GetScene().Add(labelParagraphTag);
2868 //Same utterance uses new-line to split paragraphs should give similar results for paragraph tag.
2869 labelNewlineSeparator.SetProperty(TextLabel::Property::MULTI_LINE, true);
2870 labelNewlineSeparator.SetProperty(TextLabel::Property::ELLIPSIS, false);
2871 labelNewlineSeparator.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2872 labelNewlineSeparator.SetProperty(Actor::Property::SIZE, Vector2(100.f, 50.f));
2873 labelNewlineSeparator.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
2874 labelNewlineSeparator.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2875 labelNewlineSeparator.SetProperty(TextLabel::Property::TEXT, "test paragraph tag \ntest paragraph tag \ntest paragraph tag ");
2877 labelParagraphTag.SetProperty(TextLabel::Property::MULTI_LINE, true);
2878 labelParagraphTag.SetProperty(TextLabel::Property::ELLIPSIS, false);
2879 labelParagraphTag.SetProperty(TextLabel::Property::ENABLE_MARKUP, true);
2880 labelParagraphTag.SetProperty(Actor::Property::SIZE, Vector2(100.f, 50.f));
2881 labelParagraphTag.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
2882 labelParagraphTag.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2883 labelParagraphTag.SetProperty(TextLabel::Property::TEXT, "test paragraph tag <p>test paragraph tag </p>test paragraph tag ");
2885 application.SendNotification();
2886 application.Render();
2888 Vector3 textNaturalSizeNewlineSeparator = labelNewlineSeparator.GetNaturalSize();
2889 Vector3 textNaturalSizeParagraphTag = labelParagraphTag.GetNaturalSize();
2891 DALI_TEST_EQUALS(textNaturalSizeNewlineSeparator, textNaturalSizeParagraphTag, TEST_LOCATION);
2893 application.SendNotification();
2894 application.Render();