X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-TextLabel-internal.cpp;h=d9a3c047650650f31437f6d507f19b02f3128e80;hb=caf5fc04c96e724057981f4c7e7981e0c217f297;hp=b1c380a34d147ea113984a77443115802c0ae826;hpb=076f84a43592f26ff0aa2bced54583f712800fe3;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp index b1c380a..d9a3c04 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp @@ -15,7 +15,6 @@ * */ -#include #include #include @@ -47,12 +46,12 @@ int UtcDaliTextLabelMarkupUnderline(void) application.SendNotification(); application.Render(); - uint32_t expectedNumberOfUnderlinedGlyphs = 5u; + uint32_t expectedNumberOfUnderlineRuns = 2u; Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); const Text::Length numberOfUnderlineRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); - DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlinedGlyphs, TEST_LOCATION); + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); Vector underlineRuns; underlineRuns.Resize(numberOfUnderlineRuns); @@ -60,12 +59,11 @@ int UtcDaliTextLabelMarkupUnderline(void) //ABC are underlined DALI_TEST_EQUALS(underlineRuns[0u].glyphRun.glyphIndex, 0u, TEST_LOCATION); - DALI_TEST_EQUALS(underlineRuns[1u].glyphRun.glyphIndex, 1u, TEST_LOCATION); - DALI_TEST_EQUALS(underlineRuns[2u].glyphRun.glyphIndex, 2u, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[0u].glyphRun.numberOfGlyphs, 3u, TEST_LOCATION); //GH are underlined - DALI_TEST_EQUALS(underlineRuns[3u].glyphRun.glyphIndex, 5u, TEST_LOCATION); - DALI_TEST_EQUALS(underlineRuns[4u].glyphRun.glyphIndex, 6u, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[1u].glyphRun.glyphIndex, 5u, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[1u].glyphRun.numberOfGlyphs, 2u, TEST_LOCATION); END_TEST; } @@ -98,13 +96,12 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) application.SendNotification(); application.Render(); - const uint32_t NUMBER_OF_CASES = 9u; - uint32_t expectedNumberOfUnderlinedGlyphs = 36u; + const uint32_t expectedNumberOfUnderlineRuns = 9u; Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); const Text::Length numberOfUnderlineRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); - DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlinedGlyphs, TEST_LOCATION); + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); Vector underlineRuns; underlineRuns.Resize(numberOfUnderlineRuns); @@ -113,20 +110,16 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) struct DataOfCase { std::string title; - uint32_t startIndex; - uint32_t endIndex; - GlyphIndex startGlyphIndex; - GlyphIndex endGlyphIndex; + GlyphIndex glyphIndex; + Length numberOfGlyphs; UnderlineStyleProperties properties; }; DataOfCase data[] = { //ABC1 {"ABC1", - 0u, - 3u, 5u, - 8u, + 4u, { Text::Underline::SOLID, Color::BLACK, @@ -142,10 +135,8 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) //ABC2 {"ABC2", - 4u, - 7u, 13u, - 16u, + 4u, { Text::Underline::SOLID, Color::BLACK, @@ -161,10 +152,8 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) //ABC3 {"ABC3", - 8u, - 11u, 21u, - 24u, + 4u, { Text::Underline::DASHED, Color::BLACK, @@ -180,10 +169,8 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) //ABC4 {"ABC4", - 12u, - 15u, 29u, - 32u, + 4u, { Text::Underline::DOUBLE, Color::BLACK, @@ -199,10 +186,8 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) //ABC5 {"ABC5", - 16u, - 19u, 37u, - 40u, + 4u, { Text::Underline::SOLID, Color::GREEN, @@ -218,10 +203,8 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) //ABC6 {"ABC6", - 20u, - 23u, 45u, - 48u, + 4u, { Text::Underline::SOLID, Color::BLACK, @@ -237,10 +220,203 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) //ABC7 {"ABC7", - 24u, - 27u, 53u, - 56u, + 4u, + { + Text::Underline::DASHED, + Color::BLACK, + 0u, + 3u, + 2u, + true, + false, + false, + true, + false, + }}, + + //ABC8 + {"ABC8", + 61u, + 4u, + { + Text::Underline::DASHED, + Color::BLACK, + 0u, + 1u, + 4u, + true, + false, + false, + false, + true, + }}, + + // + {"", + 69u, + 4u, + { + Text::Underline::DASHED, + Color::BLUE, + 4u, + 2u, + 3u, + true, + true, + true, + true, + true, + }}, + + }; + + for(uint32_t i = 0; i < expectedNumberOfUnderlineRuns; i++) + { + tet_infoline(data[i].title.c_str()); + DALI_TEST_EQUALS(underlineRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION); + DALI_TEST_CHECK(data[i].properties == underlineRuns[i].properties); + } + + END_TEST; +} + +int UtcDaliTextLabelMarkupSpanUnderline(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupSpanUnderline "); + + TextLabel textLabel = TextLabel::New(); + + application.GetScene().Add(textLabel); + + std::string testText = + "startABC1then" + "ABC2then" + "ABC3then" + "ABC4then" + "ABC5then" + "ABC6then" + "ABC7then" + "ABC8then" + "ABC9end"; + + textLabel.SetProperty(TextLabel::Property::TEXT, testText); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfUnderlineRuns = 8u; + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + const Text::Length numberOfUnderlineRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); + + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); + + Vector underlineRuns; + underlineRuns.Resize(numberOfUnderlineRuns); + textLabelImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); + + struct DataOfCase + { + std::string title; + GlyphIndex glyphIndex; + Length numberOfGlyphs; + UnderlineStyleProperties properties; + }; + DataOfCase data[] = + { + //ABC2 + {"ABC2", + 13u, + 4u, + { + Text::Underline::SOLID, + Color::BLACK, + 0u, + 1u, + 2u, + true, + false, + false, + false, + false, + }}, + + //ABC3 + {"ABC3", + 21u, + 4u, + { + Text::Underline::DASHED, + Color::BLACK, + 0u, + 1u, + 2u, + true, + false, + false, + false, + false, + }}, + + //ABC4 + {"ABC4", + 29u, + 4u, + { + Text::Underline::DOUBLE, + Color::BLACK, + 0u, + 1u, + 2u, + true, + false, + false, + false, + false, + }}, + + //ABC5 + {"ABC5", + 37u, + 4u, + { + Text::Underline::SOLID, + Color::GREEN, + 0u, + 1u, + 2u, + false, + true, + false, + false, + false, + }}, + + //ABC6 + {"ABC6", + 45u, + 4u, + { + Text::Underline::SOLID, + Color::BLACK, + 5u, + 1u, + 2u, + false, + false, + true, + false, + false, + }}, + + //ABC7 + {"ABC7", + 53u, + 4u, { Text::Underline::DASHED, Color::BLACK, @@ -254,54 +430,370 @@ int UtcDaliTextLabelMarkupUnderlineAttributes(void) false, }}, - //ABC8 - {"ABC8", - 28u, - 31u, - 61u, - 64u, + //ABC8 + {"ABC8", + 61u, + 4u, + { + Text::Underline::DASHED, + Color::BLACK, + 0u, + 1u, + 4u, + true, + false, + false, + false, + true, + }}, + + // + {"ABC9", + 69u, + 4u, + { + Text::Underline::DASHED, + Color::BLUE, + 4u, + 2u, + 3u, + true, + true, + true, + true, + true, + }}, + + }; + + for(uint32_t i = 0; i < expectedNumberOfUnderlineRuns; i++) + { + tet_infoline(data[i].title.c_str()); + DALI_TEST_EQUALS(underlineRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION); + DALI_TEST_CHECK(data[i].properties == underlineRuns[i].properties); + } + + END_TEST; +} + +int UtcDaliTextLabelMarkupNestedUnderlineTags(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupNestedUnderlineTags "); + + TextLabel textLabel = TextLabel::New(); + + application.GetScene().Add(textLabel); + + std::string testText = "startABXYZCDEend"; + + textLabel.SetProperty(TextLabel::Property::TEXT, testText); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfUnderlineRuns = 2u; + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + const Text::Length numberOfUnderlineRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); + + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); + + Vector underlineRuns; + underlineRuns.Resize(numberOfUnderlineRuns); + textLabelImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); + + struct DataOfCase + { + std::string title; + GlyphIndex glyphIndex; + Length numberOfGlyphs; + UnderlineStyleProperties properties; + }; + DataOfCase data[] = + { + //Outter + {"ABXYZCDE", + 5u, + 8u, + { + Text::Underline::SOLID, + Color::GREEN, + 5u, + 1u, + 2u, + false, + true, + true, + false, + false, + }}, + + //Inner + {"XYZ", + 7u, + 3u, + { + Text::Underline::SOLID, + Color::BLUE, + 5u, + 1u, + 2u, + false, + true, + true, + false, + false, + }}, + + }; + + for(uint32_t i = 0; i < expectedNumberOfUnderlineRuns; i++) + { + tet_infoline(data[i].title.c_str()); + DALI_TEST_EQUALS(underlineRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION); + DALI_TEST_CHECK(data[i].properties == underlineRuns[i].properties); + } + + END_TEST; +} + +int UtcDaliTextLabelMarkupNestedStrikethroughTags(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupNestedStrikethroughTags "); + + TextLabel textLabel = TextLabel::New(); + + application.GetScene().Add(textLabel); + + std::string testText = "startABXYZCDEend"; + + textLabel.SetProperty(TextLabel::Property::TEXT, testText); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfStrikethroughRuns = 2u; + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + const Text::Length numberOfStrikethroughRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughRuns, TEST_LOCATION); + + Vector strikethroughRuns; + strikethroughRuns.Resize(numberOfStrikethroughRuns); + textLabelImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns); + + struct DataOfCase + { + std::string title; + GlyphIndex glyphIndex; + Length numberOfGlyphs; + StrikethroughStyleProperties properties; + }; + DataOfCase data[] = + { + //Outter + {"ABXYZCDE", + 5u, + 8u, { - Text::Underline::DASHED, - Color::BLACK, - 0u, - 1u, - 4u, + Color::GREEN, + 5.0f, true, - false, - false, - false, true, }}, - // - {"", - 32u, - 35u, - 69u, - 72u, + //Inner + {"XYZ", + 7u, + 3u, { - Text::Underline::DASHED, Color::BLUE, - 4u, - 2u, - 3u, - true, - true, - true, + 5.0f, true, true, }}, }; - for(uint32_t i = 0; i < NUMBER_OF_CASES; i++) + for(uint32_t i = 0; i < expectedNumberOfStrikethroughRuns; i++) + { + tet_infoline(data[i].title.c_str()); + DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION); + DALI_TEST_CHECK(data[i].properties == strikethroughRuns[i].properties); + } + + END_TEST; +} + +int UtcDaliTextLabelMarkupStrikethroughAttributes(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupStrikethroughAttributes "); + + TextLabel textLabel = TextLabel::New(); + + application.GetScene().Add(textLabel); + + std::string testText = + "startABC1then" + "ABC2then" + "ABC3then" + "ABC4end"; + + textLabel.SetProperty(TextLabel::Property::TEXT, testText); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfStrikethroughRuns = 4u; + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + const Text::Length numberOfStrikethroughRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughRuns, TEST_LOCATION); + + Vector strikethroughRuns; + strikethroughRuns.Resize(numberOfStrikethroughRuns); + textLabelImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns); + + struct DataOfCase + { + std::string title; + GlyphIndex glyphIndex; + Length numberOfGlyphs; + StrikethroughStyleProperties properties; + }; + DataOfCase data[] = + { + + {"ABC1", + 5u, + 4u, + {Color::BLACK, + 0.0f, + false, + false}}, + + {"ABC2", + 13u, + 4u, + {Color::GREEN, + 0.0f, + true, + false}}, + + {"ABC3", + 21u, + 4u, + {Color::BLACK, + 5.0f, + false, + true}}, + + {"ABC4", + 29u, + 4u, + {Color::BLUE, + 4.0f, + true, + true}}, + + }; + + for(uint32_t i = 0; i < expectedNumberOfStrikethroughRuns; i++) { tet_infoline(data[i].title.c_str()); - DALI_TEST_EQUALS(underlineRuns[data[i].startIndex].glyphRun.glyphIndex, data[i].startGlyphIndex, TEST_LOCATION); - DALI_TEST_EQUALS(underlineRuns[data[i].endIndex].glyphRun.glyphIndex, data[i].endGlyphIndex, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION); + DALI_TEST_CHECK(data[i].properties == strikethroughRuns[i].properties); + } + + END_TEST; +} + +int UtcDaliTextLabelMarkupSpanStrikethrough(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupSpanStrikethrough "); + + TextLabel textLabel = TextLabel::New(); + + application.GetScene().Add(textLabel); + + std::string testText = + "startABC1then" + "ABC2then" + "ABC3then" + "ABC4end"; + + textLabel.SetProperty(TextLabel::Property::TEXT, testText); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfStrikethroughRuns = 3u; + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + const Text::Length numberOfStrikethroughRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughRuns, TEST_LOCATION); + + Vector strikethroughRuns; + strikethroughRuns.Resize(numberOfStrikethroughRuns); + textLabelImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns); + + struct DataOfCase + { + std::string title; + GlyphIndex glyphIndex; + Length numberOfGlyphs; + StrikethroughStyleProperties properties; + }; + DataOfCase data[] = + { + + {"ABC2then", + 13u, + 4u, + {Color::BLUE, + 0.0f, + true, + false}}, + + {"ABC3then", + 21u, + 4u, + {Color::BLACK, + 2.0f, + false, + true}}, + + {"ABC4", + 29u, + 4u, + {Color::GREEN, + 5.0f, + true, + true}}, - DALI_TEST_CHECK(data[i].properties == underlineRuns[data[i].startIndex].properties); - DALI_TEST_CHECK(data[i].properties == underlineRuns[data[i].endIndex].properties); + }; + + for(uint32_t i = 0; i < expectedNumberOfStrikethroughRuns; i++) + { + tet_infoline(data[i].title.c_str()); + DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION); + DALI_TEST_CHECK(data[i].properties == strikethroughRuns[i].properties); } END_TEST; @@ -338,6 +830,37 @@ int UtcDaliTextLabelBackgroundTag(void) END_TEST; } +int UtcDaliTextLabelSpanBackgroundTag(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliTextLabelSpanBackgroundTag\n"); + + TextLabel label = TextLabel::New(); + DALI_TEST_CHECK(label); + + label.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + label.SetProperty(TextLabel::Property::TEXT, "He World"); + application.GetScene().Add(label); + application.SendNotification(); + application.Render(); + + Toolkit::Internal::TextLabel& labelImpl = GetImpl(label); + const ColorIndex* const backgroundColorIndicesBuffer = labelImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices(); + + DALI_TEST_CHECK(backgroundColorIndicesBuffer); + + //default color + DALI_TEST_EQUALS(backgroundColorIndicesBuffer[0], 0u, TEST_LOCATION); + + //red color + DALI_TEST_EQUALS(backgroundColorIndicesBuffer[1], 1u, TEST_LOCATION); + + //yellow color + DALI_TEST_EQUALS(backgroundColorIndicesBuffer[7], 2u, TEST_LOCATION); + + END_TEST; +} + int UtcDaliToolkitTextlabelEllipsisInternalAPIs(void) { ToolkitTestApplication application; @@ -485,18 +1008,18 @@ int UtcDaliTextLabelMarkupStrikethrough(void) //ABC have strikethrough DALI_TEST_EQUALS(strikethroughRuns[0u].glyphRun.glyphIndex, 0u, TEST_LOCATION); DALI_TEST_EQUALS(strikethroughRuns[0u].glyphRun.numberOfGlyphs, 3u, TEST_LOCATION); - DALI_TEST_CHECK(strikethroughRuns[0u].isColorSet); - DALI_TEST_EQUALS(strikethroughRuns[0u].color.r, 1u, TEST_LOCATION); - DALI_TEST_EQUALS(strikethroughRuns[0u].color.g, 0u, TEST_LOCATION); - DALI_TEST_EQUALS(strikethroughRuns[0u].color.b, 0u, TEST_LOCATION); + DALI_TEST_CHECK(strikethroughRuns[0u].properties.colorDefined); + DALI_TEST_EQUALS(strikethroughRuns[0u].properties.color.r, 1u, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[0u].properties.color.g, 0u, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[0u].properties.color.b, 0u, TEST_LOCATION); //GH have strikethrough DALI_TEST_EQUALS(strikethroughRuns[1u].glyphRun.glyphIndex, 5u, TEST_LOCATION); DALI_TEST_EQUALS(strikethroughRuns[1u].glyphRun.numberOfGlyphs, 2u, TEST_LOCATION); - DALI_TEST_CHECK(strikethroughRuns[1u].isColorSet); - DALI_TEST_EQUALS(strikethroughRuns[1u].color.r, 0u, TEST_LOCATION); - DALI_TEST_EQUALS(strikethroughRuns[1u].color.g, 1u, TEST_LOCATION); - DALI_TEST_EQUALS(strikethroughRuns[1u].color.b, 0u, TEST_LOCATION); + DALI_TEST_CHECK(strikethroughRuns[1u].properties.colorDefined); + DALI_TEST_EQUALS(strikethroughRuns[1u].properties.color.r, 0u, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[1u].properties.color.g, 1u, TEST_LOCATION); + DALI_TEST_EQUALS(strikethroughRuns[1u].properties.color.b, 0u, TEST_LOCATION); END_TEST; } @@ -524,4 +1047,294 @@ int UtcDaliTextLabelMarkupStrikethroughNoEndTag(void) DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION); END_TEST; +} + +int UtcDaliTextLabelMarkupParagraphTag(void) + +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliTextLabelMarkupParagraphTag "); + TextLabel textLabel = TextLabel::New(); + + application.GetScene().Add(textLabel); + + textLabel.SetProperty(TextLabel::Property::TEXT, "text one

Paragraph two

text three

Paragraph four

text five"); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + textLabel.SetProperty(TextLabel::Property::MULTI_LINE, true); + + application.SendNotification(); + application.Render(); + + uint32_t expectedNumberOfBoundedParagraphRuns = 2u; + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + const Text::Length numberOfBoundedParagraphRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfBoundedParagraphRuns(); + DALI_TEST_EQUALS(numberOfBoundedParagraphRuns, expectedNumberOfBoundedParagraphRuns, TEST_LOCATION); + + const Vector& boundedParagraphRuns = textLabelImpl.GetTextController()->GetTextModel()->GetBoundedParagraphRuns(); + + //

Paragraph two

+ DALI_TEST_EQUALS(boundedParagraphRuns[0u].characterRun.characterIndex, 10u, TEST_LOCATION); + DALI_TEST_EQUALS(boundedParagraphRuns[0u].characterRun.numberOfCharacters, 14u, TEST_LOCATION); + + //

Paragraph four

+ DALI_TEST_EQUALS(boundedParagraphRuns[1u].characterRun.characterIndex, 37u, TEST_LOCATION); + DALI_TEST_EQUALS(boundedParagraphRuns[1u].characterRun.numberOfCharacters, 15u, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliTextLabelMarkupParagraphTagAlignAttribute(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute "); + + // Apply alignment for each type on property level on three paragraphs and in-between text. + // Apply align in markup on the three paragraphs (each one a type). + // Using the same text to gain similar results from both the property level and the markup. + // Compare line alignment between the property level and the markup. + + std::string textAlignOnPropertyLevel = "text outside

Paragraph end

text outside

Paragraph center

text outside

Paragraph begin

Paragraph property alignment

"; + std::string textAlignInMarkup = "text outside

Paragraph end

text outside

Paragraph center

text outside

Paragraph begin

Paragraph property alignment

"; + + //Set size to avoid automatic eliding + Vector2 controllerSize = Vector2(1025, 1025); + + TextLabel textLabelBeginAlign = TextLabel::New(); + TextLabel textLabelCenterAlign = TextLabel::New(); + TextLabel textLabelEndAlign = TextLabel::New(); + TextLabel textLabelMultiAlign = TextLabel::New(); + + application.GetScene().Add(textLabelBeginAlign); + application.GetScene().Add(textLabelCenterAlign); + application.GetScene().Add(textLabelEndAlign); + application.GetScene().Add(textLabelMultiAlign); + + textLabelBeginAlign.SetProperty(TextLabel::Property::TEXT, textAlignOnPropertyLevel); + textLabelBeginAlign.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + textLabelBeginAlign.SetProperty(TextLabel::Property::MULTI_LINE, true); + textLabelBeginAlign.SetProperty(TextLabel::Property::ELLIPSIS, false); + textLabelBeginAlign.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::BEGIN); + textLabelBeginAlign.SetProperty(Actor::Property::SIZE, controllerSize); + + textLabelCenterAlign.SetProperty(TextLabel::Property::TEXT, textAlignOnPropertyLevel); + textLabelCenterAlign.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + textLabelCenterAlign.SetProperty(TextLabel::Property::MULTI_LINE, true); + textLabelCenterAlign.SetProperty(TextLabel::Property::ELLIPSIS, false); + textLabelCenterAlign.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::CENTER); + textLabelCenterAlign.SetProperty(Actor::Property::SIZE, controllerSize); + + textLabelEndAlign.SetProperty(TextLabel::Property::TEXT, textAlignOnPropertyLevel); + textLabelEndAlign.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + textLabelEndAlign.SetProperty(TextLabel::Property::MULTI_LINE, true); + textLabelEndAlign.SetProperty(TextLabel::Property::ELLIPSIS, false); + textLabelEndAlign.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::END); + textLabelEndAlign.SetProperty(Actor::Property::SIZE, controllerSize); + + textLabelMultiAlign.SetProperty(TextLabel::Property::TEXT, textAlignInMarkup); + textLabelMultiAlign.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + textLabelMultiAlign.SetProperty(TextLabel::Property::MULTI_LINE, true); + textLabelMultiAlign.SetProperty(TextLabel::Property::ELLIPSIS, false); + textLabelMultiAlign.SetProperty(TextLabel::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::CENTER); + textLabelMultiAlign.SetProperty(Actor::Property::SIZE, controllerSize); + + application.SendNotification(); + application.Render(); + + uint32_t expectedNumberOfBoundedParagraphRuns = 4u; + uint32_t expectedNumberOfLines = 7u; + + Toolkit::Internal::TextLabel& textLabelMultiAlignImpl = GetImpl(textLabelMultiAlign); + Toolkit::Internal::TextLabel& textLabelBeginAlignImpl = GetImpl(textLabelBeginAlign); + Toolkit::Internal::TextLabel& textLabelCenterAlignImpl = GetImpl(textLabelCenterAlign); + Toolkit::Internal::TextLabel& textLabelEndAlignImpl = GetImpl(textLabelEndAlign); + + const Text::Length numberOfBoundedParagraphRuns = textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetNumberOfBoundedParagraphRuns(); + DALI_TEST_EQUALS(numberOfBoundedParagraphRuns, expectedNumberOfBoundedParagraphRuns, TEST_LOCATION); + + DALI_TEST_EQUALS(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION); + DALI_TEST_CHECK(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines()); + + DALI_TEST_EQUALS(textLabelBeginAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION); + DALI_TEST_CHECK(textLabelBeginAlignImpl.GetTextController()->GetTextModel()->GetLines()); + + DALI_TEST_EQUALS(textLabelCenterAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION); + DALI_TEST_CHECK(textLabelCenterAlignImpl.GetTextController()->GetTextModel()->GetLines()); + + DALI_TEST_EQUALS(textLabelEndAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION); + DALI_TEST_CHECK(textLabelEndAlignImpl.GetTextController()->GetTextModel()->GetLines()); + + const uint32_t LINE_INDEX_ALIGN_END = 1u; + const uint32_t LINE_INDEX_ALIGN_CENTER = 3u; + const uint32_t LINE_INDEX_ALIGN_BEGIN = 5u; + const uint32_t LINE_INDEX_OUTSIDE_1 = 0u; + const uint32_t LINE_INDEX_OUTSIDE_2 = 2u; + const uint32_t LINE_INDEX_OUTSIDE_3 = 4u; + const uint32_t LINE_INDEX_PARAGRAPH = 6u; + + //

Paragraph end

+ const LineRun& lineEndFromMultiAlign = *(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_END); + const LineRun& lineEndFromEndAlign = *(textLabelEndAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_END); + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute -

Paragraph end

"); + DALI_TEST_EQUALS(lineEndFromMultiAlign.alignmentOffset, lineEndFromEndAlign.alignmentOffset, TEST_LOCATION); + DALI_TEST_EQUALS(lineEndFromMultiAlign.width, lineEndFromEndAlign.width, TEST_LOCATION); + + //

Paragraph center

+ const LineRun& lineCenterFromMultiAlign = *(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_CENTER); + const LineRun& lineEndFromCenterAlign = *(textLabelCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_CENTER); + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute -

Paragraph center

"); + DALI_TEST_EQUALS(lineCenterFromMultiAlign.alignmentOffset, lineEndFromCenterAlign.alignmentOffset, TEST_LOCATION); + DALI_TEST_EQUALS(lineCenterFromMultiAlign.width, lineEndFromCenterAlign.width, TEST_LOCATION); + + //

Paragraph begin

+ const LineRun& lineBeginFromMultiAlign = *(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_BEGIN); + const LineRun& lineEndFromBeginAlign = *(textLabelBeginAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_BEGIN); + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute -

Paragraph begin

"); + DALI_TEST_EQUALS(lineBeginFromMultiAlign.alignmentOffset, lineEndFromBeginAlign.alignmentOffset, TEST_LOCATION); + DALI_TEST_EQUALS(lineBeginFromMultiAlign.width, lineEndFromBeginAlign.width, TEST_LOCATION); + + //text outside + const LineRun& lineOutsideOneFromMultiAlign = *(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_1); + const LineRun& lineOutsideOneFromCenterAlign = *(textLabelCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_1); + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute - text outside one"); + DALI_TEST_EQUALS(lineOutsideOneFromMultiAlign.alignmentOffset, lineOutsideOneFromCenterAlign.alignmentOffset, TEST_LOCATION); + DALI_TEST_EQUALS(lineOutsideOneFromMultiAlign.width, lineOutsideOneFromCenterAlign.width, TEST_LOCATION); + + const LineRun& lineOutsideTwoFromMultiAlign = *(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_2); + const LineRun& lineOutsideTwoFromCenterAlign = *(textLabelCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_2); + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute - text outside two"); + DALI_TEST_EQUALS(lineOutsideTwoFromMultiAlign.alignmentOffset, lineOutsideTwoFromCenterAlign.alignmentOffset, TEST_LOCATION); + DALI_TEST_EQUALS(lineOutsideTwoFromMultiAlign.width, lineOutsideTwoFromCenterAlign.width, TEST_LOCATION); + + const LineRun& lineOutsideThreeFromMultiAlign = *(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_3); + const LineRun& lineOutsideThreeFromCenterAlign = *(textLabelCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_3); + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute - text outside three"); + DALI_TEST_EQUALS(lineOutsideThreeFromMultiAlign.alignmentOffset, lineOutsideThreeFromCenterAlign.alignmentOffset, TEST_LOCATION); + DALI_TEST_EQUALS(lineOutsideThreeFromMultiAlign.width, lineOutsideThreeFromCenterAlign.width, TEST_LOCATION); + + const LineRun& lineParagraphFromMultiAlign = *(textLabelMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_PARAGRAPH); + const LineRun& lineParagraphFromCenterAlign = *(textLabelCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_PARAGRAPH); + tet_infoline(" UtcDaliTextLabelMarkupParagraphTagAlignAttribute -

Paragraph property alignment

"); + DALI_TEST_EQUALS(lineParagraphFromMultiAlign.alignmentOffset, lineParagraphFromCenterAlign.alignmentOffset, TEST_LOCATION); + DALI_TEST_EQUALS(lineParagraphFromMultiAlign.width, lineParagraphFromCenterAlign.width, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliTextLabelMarkupCharacterSpacingTag(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupCharacterSpacingTag "); + + const Length EXPECTED_NUMBER_OF_GLYPHS = 21u; + + const float expandedCharSpacing = 10.0f; + const float condensedCharSpacing = -5.0f; + + TextLabel textLabel = TextLabel::New(); + + textLabel.SetProperty(TextLabel::Property::TEXT, "ABC EF\nABC EF\nABC EF\n"); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + textLabel.SetProperty(TextLabel::Property::MULTI_LINE, true); + + application.GetScene().Add(textLabel); + + application.SendNotification(); + application.Render(); + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + Text::ViewInterface& view = textLabelImpl.GetTextController()->GetView(); + + Length numberOfGlyphs = view.GetNumberOfGlyphs(); + + DALI_TEST_EQUALS(numberOfGlyphs, EXPECTED_NUMBER_OF_GLYPHS, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + + Vector glyphs; + glyphs.Resize(numberOfGlyphs); + + Vector positions; + positions.Resize(numberOfGlyphs); + + float alignmentOffset = 0u; + numberOfGlyphs = view.GetGlyphs(glyphs.Begin(), + positions.Begin(), + alignmentOffset, + 0u, + numberOfGlyphs); + + const Length numberOfGlyphsOneLine = 7u; + for(Length i = 0; i < numberOfGlyphsOneLine - 1u; i++) + { + float diffLineNoCharSpacing = positions[i + 1].x - positions[i].x; + + float diffLineCondensedCharSpacing = positions[numberOfGlyphsOneLine + i + 1].x - positions[numberOfGlyphsOneLine + i].x; + DALI_TEST_EQUALS(diffLineCondensedCharSpacing, diffLineNoCharSpacing + condensedCharSpacing, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + + float diffLineExpandedCharSpacing = positions[2u * numberOfGlyphsOneLine + i + 1].x - positions[2u * numberOfGlyphsOneLine + i].x; + DALI_TEST_EQUALS(diffLineExpandedCharSpacing, diffLineNoCharSpacing + expandedCharSpacing, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + } + + END_TEST; +} + +int UtcDaliTextLabelMarkupSpanCharacterSpacing(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextLabelMarkupSpanCharacterSpacing "); + + const Length EXPECTED_NUMBER_OF_GLYPHS = 21u; + + const float expandedCharSpacing = 10.0f; + const float condensedCharSpacing = -5.0f; + + std::string testText = + "ABC EF\n" + "ABC EF\n" + "ABC EF\n"; + + TextLabel textLabel = TextLabel::New(); + + textLabel.SetProperty(TextLabel::Property::TEXT, testText); + textLabel.SetProperty(TextLabel ::Property::ENABLE_MARKUP, true); + textLabel.SetProperty(TextLabel::Property::MULTI_LINE, true); + + application.GetScene().Add(textLabel); + + application.SendNotification(); + application.Render(); + + Toolkit::Internal::TextLabel& textLabelImpl = GetImpl(textLabel); + Text::ViewInterface& view = textLabelImpl.GetTextController()->GetView(); + + Length numberOfGlyphs = view.GetNumberOfGlyphs(); + + DALI_TEST_EQUALS(numberOfGlyphs, EXPECTED_NUMBER_OF_GLYPHS, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + + Vector glyphs; + glyphs.Resize(numberOfGlyphs); + + Vector positions; + positions.Resize(numberOfGlyphs); + + float alignmentOffset = 0u; + numberOfGlyphs = view.GetGlyphs(glyphs.Begin(), + positions.Begin(), + alignmentOffset, + 0u, + numberOfGlyphs); + + const Length numberOfGlyphsOneLine = 7u; + for(Length i = 0; i < numberOfGlyphsOneLine - 1u; i++) + { + float diffLineNoCharSpacing = positions[i + 1].x - positions[i].x; + + float diffLineCondensedCharSpacing = positions[numberOfGlyphsOneLine + i + 1].x - positions[numberOfGlyphsOneLine + i].x; + DALI_TEST_EQUALS(diffLineCondensedCharSpacing, diffLineNoCharSpacing + condensedCharSpacing, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + + float diffLineExpandedCharSpacing = positions[2u * numberOfGlyphsOneLine + i + 1].x - positions[2u * numberOfGlyphsOneLine + i].x; + DALI_TEST_EQUALS(diffLineExpandedCharSpacing, diffLineNoCharSpacing + expandedCharSpacing, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + } + + END_TEST; } \ No newline at end of file