X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-TextField-internal.cpp;h=da3ffc39f61785ee3a7d8ff38cf874728a2a2c00;hp=7cf408495008c41f8bb5630a49909c8115018bcb;hb=c49e595f12e9e56cd7c35262eb52ae1f2d9b685b;hpb=0f5a244a8e8f8fa680dccafca44ccc9fedb387a8 diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp old mode 100755 new mode 100644 index 7cf4084..da3ffc3 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,16 +15,16 @@ * */ -#include #include +#include #include #include -#include #include -#include +#include #include +#include using namespace Dali; using namespace Toolkit; @@ -33,64 +33,64 @@ using namespace Text; int UtcDaliTextFieldMultipleBackgroundText(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliTextFieldMultipleBackgroundText" ); + tet_infoline("UtcDaliTextFieldMultipleBackgroundText"); // Create a text field TextField textField = TextField::New(); - textField.SetProperty( Actor::Property::SIZE, Vector2( 400.f, 60.f ) ); - textField.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT ); - textField.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT ); + textField.SetProperty(Actor::Property::SIZE, Vector2(400.f, 60.f)); + textField.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + textField.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); // Add the text field to the stage - application.GetScene().Add( textField ); + application.GetScene().Add(textField); application.SendNotification(); application.Render(); - Toolkit::Internal::TextField& textFieldImpl = GetImpl( textField ); - ControllerPtr controller = textFieldImpl.GetTextController(); - Controller::Impl& controllerImpl = Controller::Impl::GetImplementation( *controller.Get() ); + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + ControllerPtr controller = textFieldImpl.GetTextController(); + Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get()); // Add multiple background colors for the text. ColorRun backgroundColorRun1; - backgroundColorRun1.characterRun.characterIndex = 0u; + backgroundColorRun1.characterRun.characterIndex = 0u; backgroundColorRun1.characterRun.numberOfCharacters = 1u; - backgroundColorRun1.color = Color::RED; - controllerImpl.mModel->mLogicalModel->mBackgroundColorRuns.PushBack( backgroundColorRun1 ); + backgroundColorRun1.color = Color::RED; + controllerImpl.mModel->mLogicalModel->mBackgroundColorRuns.PushBack(backgroundColorRun1); ColorRun backgroundColorRun2; - backgroundColorRun2.characterRun.characterIndex = 5u; + backgroundColorRun2.characterRun.characterIndex = 5u; backgroundColorRun2.characterRun.numberOfCharacters = 8u; - backgroundColorRun2.color = Color::CYAN; - controllerImpl.mModel->mLogicalModel->mBackgroundColorRuns.PushBack( backgroundColorRun2 ); + backgroundColorRun2.color = Color::CYAN; + controllerImpl.mModel->mLogicalModel->mBackgroundColorRuns.PushBack(backgroundColorRun2); ColorRun backgroundColorRun3; - backgroundColorRun3.characterRun.characterIndex = 23u; + backgroundColorRun3.characterRun.characterIndex = 23u; backgroundColorRun3.characterRun.numberOfCharacters = 6u; - backgroundColorRun3.color = Color::GREEN; - controllerImpl.mModel->mLogicalModel->mBackgroundColorRuns.PushBack( backgroundColorRun3 ); + backgroundColorRun3.color = Color::GREEN; + controllerImpl.mModel->mLogicalModel->mBackgroundColorRuns.PushBack(backgroundColorRun3); // Check the case where there is only one character in the text - controller->SetText( "S" ); + controller->SetText("S"); application.SendNotification(); application.Render(); // The offscreen root actor should have one child: the renderable. - Actor stencil = textField.GetChildAt( 0u ); - DALI_TEST_CHECK( stencil.GetChildCount() == 1u ); + Actor stencil = textField.GetChildAt(0u); + DALI_TEST_CHECK(stencil.GetChildCount() == 1u); // The renderable actor should have two children: the text and the background. - Actor renderableActor = stencil.GetChildAt( 0u ); - DALI_TEST_CHECK( renderableActor.GetChildCount() == 2u ); + Actor renderableActor = stencil.GetChildAt(0u); + DALI_TEST_CHECK(renderableActor.GetChildCount() == 2u); // Check that the background is created - Actor backgroundActor = renderableActor.GetChildAt( 0u ); - DALI_TEST_CHECK( backgroundActor ); - DALI_TEST_CHECK( backgroundActor.GetProperty< std::string >( Dali::Actor::Property::NAME ) == "TextBackgroundColorActor" ); + Actor backgroundActor = renderableActor.GetChildAt(0u); + DALI_TEST_CHECK(backgroundActor); + DALI_TEST_CHECK(backgroundActor.GetProperty(Dali::Actor::Property::NAME) == "TextBackgroundColorActor"); // Change the text to contain more characters - controller->SetText( "Text Multiple Background Test" ); + controller->SetText("Text Multiple Background Test"); application.SendNotification(); application.Render(); @@ -101,15 +101,15 @@ int UtcDaliTextFieldMultipleBackgroundText(void) application.SendNotification(); application.Render(); - // Now the offscreen root actor should have three children: the renderable, the highlight, and the background. - DALI_TEST_CHECK( stencil.GetChildCount() == 3u ); + // Now the offscreen root actor should have four children: the renderable, the clipped cursor, the highlight, and the background. + DALI_TEST_CHECK(stencil.GetChildCount() == 4u); // The renderable actor should have one child only: the text - DALI_TEST_CHECK( renderableActor.GetChildCount() == 1u ); + DALI_TEST_CHECK(renderableActor.GetChildCount() == 1u); // The background should now be lowered below the highlight - backgroundActor = stencil.GetChildAt( 0u ); - DALI_TEST_CHECK( backgroundActor ); - DALI_TEST_CHECK( backgroundActor.GetProperty< std::string >( Dali::Actor::Property::NAME ) == "TextBackgroundColorActor" ); + backgroundActor = stencil.GetChildAt(0u); + DALI_TEST_CHECK(backgroundActor); + DALI_TEST_CHECK(backgroundActor.GetProperty(Dali::Actor::Property::NAME) == "TextBackgroundColorActor"); END_TEST; } @@ -117,20 +117,20 @@ int UtcDaliTextFieldMultipleBackgroundText(void) int UtcDaliTextFieldSelectText(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliTextFieldSelectText" ); + tet_infoline("UtcDaliTextFieldSelectText"); // Create a text field TextField textField = TextField::New(); - textField.SetProperty( Actor::Property::SIZE, Vector2( 400.f, 60.f ) ); - textField.SetProperty( TextField::Property::TEXT, "Hello World" ); + textField.SetProperty(Actor::Property::SIZE, Vector2(400.f, 60.f)); + textField.SetProperty(TextField::Property::TEXT, "Hello World"); // Add the text field to the stage - application.GetScene().Add( textField ); + application.GetScene().Add(textField); application.SendNotification(); application.Render(); - Toolkit::Internal::TextField& textFieldImpl = GetImpl( textField ); + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); application.SendNotification(); application.Render(); @@ -141,7 +141,7 @@ int UtcDaliTextFieldSelectText(void) application.SendNotification(); application.Render(); - DALI_TEST_CHECK( textFieldImpl.GetSelectedText() == "Hello World" ); + DALI_TEST_CHECK(textFieldImpl.GetSelectedText() == "Hello World"); // Select None textFieldImpl.SelectNone(); @@ -149,7 +149,7 @@ int UtcDaliTextFieldSelectText(void) application.SendNotification(); application.Render(); - DALI_TEST_CHECK( textFieldImpl.GetSelectedText() == "" ); + DALI_TEST_CHECK(textFieldImpl.GetSelectedText() == ""); END_TEST; } @@ -161,36 +161,765 @@ int UtcDaliTextFieldMarkupUnderline(void) TextField textField = TextField::New(); - application.GetScene().Add( textField ); + application.GetScene().Add(textField); - textField.SetProperty( TextField::Property::TEXT, "ABCEFGH" ); - textField.SetProperty( TextField ::Property::ENABLE_MARKUP, true ); + textField.SetProperty(TextField::Property::TEXT, "ABCEFGH"); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); application.SendNotification(); application.Render(); - uint32_t expectedNumberOfUnderlinedGlyphs = 5u; + uint32_t expectedNumberOfUnderlineRuns = 2u; - Toolkit::Internal::TextField& textFieldImpl = GetImpl( textField ); - const Text::Length numberOfUnderlineRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfUnderlineRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); - DALI_TEST_EQUALS( numberOfUnderlineRuns, expectedNumberOfUnderlinedGlyphs, TEST_LOCATION ); + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); - Vector underlineRuns; + Vector underlineRuns; underlineRuns.Resize(numberOfUnderlineRuns); textFieldImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); //ABC are underlined - DALI_TEST_EQUALS( underlineRuns[0u].glyphIndex, 0u, TEST_LOCATION); - DALI_TEST_EQUALS( underlineRuns[1u].glyphIndex, 1u, TEST_LOCATION); - DALI_TEST_EQUALS( underlineRuns[2u].glyphIndex, 2u, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[0u].glyphRun.glyphIndex, 0u, TEST_LOCATION); + DALI_TEST_EQUALS(underlineRuns[0u].glyphRun.numberOfGlyphs, 3u, TEST_LOCATION); //GH are underlined - DALI_TEST_EQUALS( underlineRuns[3u].glyphIndex, 5u, TEST_LOCATION); - DALI_TEST_EQUALS( underlineRuns[4u].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; +} + +int UtcDaliTextFieldMarkupUnderlineAttributes(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupUnderlineAttributes "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + std::string testText = + "startABC1then" + "ABC2then" + "ABC3then" + "ABC4then" + "ABC5then" + "ABC6then" + "ABC7then" + "ABC8then" + "ABC9end" + + ; + + textField.SetProperty(TextField::Property::TEXT, testText); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfUnderlineRuns = 9u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfUnderlineRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); + + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); + + Vector underlineRuns; + underlineRuns.Resize(numberOfUnderlineRuns); + textFieldImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); + + struct DataOfCase + { + std::string title; + GlyphIndex glyphIndex; + Length numberOfGlyphs; + UnderlineStyleProperties properties; + }; + DataOfCase data[] = + { + //ABC1 + {"ABC1", + 5u, + 4u, + { + Text::Underline::SOLID, + Color::BLACK, + 0u, + 1u, + 2u, + false, + false, + false, + false, + false, + }}, + + //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, + 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 UtcDaliTextFieldMarkupSpanUnderline(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupSpanUnderline "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + std::string testText = + "startABC1then" + "ABC2then" + "ABC3then" + "ABC4then" + "ABC5then" + "ABC6then" + "ABC7then" + "ABC8then" + "ABC9end"; + + textField.SetProperty(TextField::Property::TEXT, testText); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfUnderlineRuns = 8u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfUnderlineRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); + + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); + + Vector underlineRuns; + underlineRuns.Resize(numberOfUnderlineRuns); + textFieldImpl.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, + 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, + }}, + + // + {"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 UtcDaliTextFieldMarkupNestedUnderlineTags(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupNestedUnderlineTags "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + std::string testText = "startABXYZCDEend"; + + textField.SetProperty(TextField::Property::TEXT, testText); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfUnderlineRuns = 2u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfUnderlineRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); + + DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION); + + Vector underlineRuns; + underlineRuns.Resize(numberOfUnderlineRuns); + textFieldImpl.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 UtcDaliTextFieldMarkupNestedStrikethroughTags(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupNestedStrikethroughTags "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + std::string testText = "startABXYZCDEend"; + + textField.SetProperty(TextField::Property::TEXT, testText); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfStrikethroughRuns = 2u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfStrikethroughRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughRuns, TEST_LOCATION); + + Vector strikethroughRuns; + strikethroughRuns.Resize(numberOfStrikethroughRuns); + textFieldImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns); + + struct DataOfCase + { + std::string title; + GlyphIndex glyphIndex; + Length numberOfGlyphs; + StrikethroughStyleProperties properties; + }; + DataOfCase data[] = + { + //Outter + {"ABXYZCDE", + 5u, + 8u, + { + Color::GREEN, + 5.0f, + true, + true, + }}, + + //Inner + {"XYZ", + 7u, + 3u, + { + Color::BLUE, + 5.0f, + true, + true, + }}, + + }; + + 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 UtcDaliTextFieldMarkupStrikethroughAttributes(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupStrikethroughAttributes "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + std::string testText = + "startABC1then" + "ABC2then" + "ABC3then" + "ABC4end"; + + textField.SetProperty(TextField::Property::TEXT, testText); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfStrikethroughRuns = 4u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfStrikethroughRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughRuns, TEST_LOCATION); + + Vector strikethroughRuns; + strikethroughRuns.Resize(numberOfStrikethroughRuns); + textFieldImpl.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(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 UtcDaliTextFieldMarkupSpanStrikethrough(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupSpanStrikethrough "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + std::string testText = + "startABC1then" + "ABC2then" + "ABC3then" + "ABC4end"; + + textField.SetProperty(TextField::Property::TEXT, testText); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + const uint32_t expectedNumberOfStrikethroughRuns = 3u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfStrikethroughRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughRuns, TEST_LOCATION); + + Vector strikethroughRuns; + strikethroughRuns.Resize(numberOfStrikethroughRuns); + textFieldImpl.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}}, + + }; + + 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 UtcDaliTextFieldFontPointSizeLargerThanAtlas(void) @@ -201,23 +930,22 @@ int UtcDaliTextFieldFontPointSizeLargerThanAtlas(void) // Create a Text field TextField textField = TextField::New(); //Set size to avoid automatic eliding - textField.SetProperty( Actor::Property::SIZE, Vector2(1025, 1025)); + textField.SetProperty(Actor::Property::SIZE, Vector2(1025, 1025)); //Set very large font-size using point-size - textField.SetProperty( TextField::Property::POINT_SIZE, 1000) ; + textField.SetProperty(TextField::Property::POINT_SIZE, 1000); //Specify font-family - textField.SetProperty( TextField::Property::FONT_FAMILY, "DejaVu Sans"); + textField.SetProperty(TextField::Property::FONT_FAMILY, "DejaVu Sans"); //Set text to check if appear or not - textField.SetProperty( TextField::Property::TEXT, "A"); + textField.SetProperty(TextField::Property::TEXT, "A"); - application.GetScene().Add( textField ); + application.GetScene().Add(textField); application.SendNotification(); application.Render(); //Check if Glyph is added to AtlasGlyphManger or not int countAtlas = AtlasGlyphManager::Get().GetMetrics().mAtlasMetrics.mAtlasCount; - DALI_TEST_EQUALS( countAtlas, 1, TEST_LOCATION ); - + DALI_TEST_EQUALS(countAtlas, 1, TEST_LOCATION); END_TEST; } @@ -229,26 +957,25 @@ int UtcDaliTextFieldFontPointSizeLargerThanAtlasPlaceholderCase(void) //Set Map of placeholder: text, font-family and point-size Property::Map placeholderMapSet; - placeholderMapSet["text"] = "A"; + placeholderMapSet["text"] = "A"; placeholderMapSet["fontFamily"] = "DejaVu Sans"; - placeholderMapSet["pixelSize"] = 1000.0f; + placeholderMapSet["pixelSize"] = 1000.0f; // Create a text editor TextField textField = TextField::New(); //Set size to avoid automatic eliding - textField.SetProperty( Actor::Property::SIZE, Vector2(1025, 1025)); + textField.SetProperty(Actor::Property::SIZE, Vector2(1025, 1025)); //Set placeholder - textField.SetProperty( TextField::Property::PLACEHOLDER, placeholderMapSet) ; + textField.SetProperty(TextField::Property::PLACEHOLDER, placeholderMapSet); - application.GetScene().Add( textField ); + application.GetScene().Add(textField); application.SendNotification(); application.Render(); //Check if Glyph is added to AtlasGlyphManger or not int countAtlas = AtlasGlyphManager::Get().GetMetrics().mAtlasMetrics.mAtlasCount; - DALI_TEST_EQUALS( countAtlas, 1, TEST_LOCATION ); - + DALI_TEST_EQUALS(countAtlas, 1, TEST_LOCATION); END_TEST; } @@ -259,27 +986,58 @@ int UtcDaliTextFieldBackgroundTag(void) tet_infoline("UtcDaliTextFieldBackgroundTag\n"); TextField field = TextField::New(); - DALI_TEST_CHECK( field ); + DALI_TEST_CHECK(field); - field.SetProperty( TextField ::Property::ENABLE_MARKUP, true ); - field.SetProperty( TextField::Property::TEXT, "He World" ); - application.GetScene().Add( field ); + field.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + field.SetProperty(TextField::Property::TEXT, "He World"); + application.GetScene().Add(field); application.SendNotification(); application.Render(); - Toolkit::Internal::TextField& fieldImpl = GetImpl( field ); - const ColorIndex* const backgroundColorIndicesBuffer = fieldImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices(); + Toolkit::Internal::TextField& fieldImpl = GetImpl(field); + const ColorIndex* const backgroundColorIndicesBuffer = fieldImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices(); - DALI_TEST_CHECK( backgroundColorIndicesBuffer ); + DALI_TEST_CHECK(backgroundColorIndicesBuffer); //default color - DALI_TEST_EQUALS( backgroundColorIndicesBuffer[0], 0u, TEST_LOCATION); + DALI_TEST_EQUALS(backgroundColorIndicesBuffer[0], 0u, TEST_LOCATION); //red color - DALI_TEST_EQUALS( backgroundColorIndicesBuffer[1], 1u, TEST_LOCATION); + DALI_TEST_EQUALS(backgroundColorIndicesBuffer[1], 1u, TEST_LOCATION); //yellow color - DALI_TEST_EQUALS( backgroundColorIndicesBuffer[7], 2u, TEST_LOCATION); + DALI_TEST_EQUALS(backgroundColorIndicesBuffer[7], 2u, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliTextFieldSpanBackgroundTag(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliTextFieldSpanBackgroundTag\n"); + + TextField field = TextField::New(); + DALI_TEST_CHECK(field); + + field.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + field.SetProperty(TextField::Property::TEXT, "He World"); + application.GetScene().Add(field); + application.SendNotification(); + application.Render(); + + Toolkit::Internal::TextField& fieldImpl = GetImpl(field); + const ColorIndex* const backgroundColorIndicesBuffer = fieldImpl.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; } @@ -290,31 +1048,30 @@ int UtcDaliToolkitTextFieldEllipsisInternalAPIs(void) tet_infoline(" UtcDaliToolkitTextFieldEllipsisInternalAPIs "); TextField textField = TextField::New(); - Toolkit::Internal::TextField& textFieldImpl = GetImpl( textField ); - Text::ViewInterface& view = textFieldImpl.GetTextController()->GetView(); + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + Text::ViewInterface& view = textFieldImpl.GetTextController()->GetView(); tet_infoline(" UtcDaliToolkitTextFieldEllipsisInternalAPIs - ELLIPSIS Disabled"); textField.SetProperty(DevelTextField::Property::ELLIPSIS, false); - DALI_TEST_EQUALS( textField.GetProperty< bool >( DevelTextField::Property::ELLIPSIS ), false, TEST_LOCATION ); + DALI_TEST_EQUALS(textField.GetProperty(DevelTextField::Property::ELLIPSIS), false, TEST_LOCATION); DALI_TEST_CHECK(!(view.IsTextElideEnabled())); tet_infoline(" UtcDaliToolkitTextFieldEllipsisInternalAPIs - ELLIPSIS Enabled"); textField.SetProperty(DevelTextField::Property::ELLIPSIS, true); - DALI_TEST_EQUALS( textField.GetProperty< bool >( DevelTextField::Property::ELLIPSIS ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(textField.GetProperty(DevelTextField::Property::ELLIPSIS), true, TEST_LOCATION); DALI_TEST_CHECK(view.IsTextElideEnabled()); tet_infoline(" UtcDaliToolkitTextFieldEllipsisInternalAPIs - GetStartIndexOfElidedGlyphs Default"); - DALI_TEST_EQUALS( view.GetStartIndexOfElidedGlyphs(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS(view.GetStartIndexOfElidedGlyphs(), 0u, TEST_LOCATION); tet_infoline(" UtcDaliToolkitTextFieldEllipsisInternalAPIs - GetEndIndexOfElidedGlyphs Default"); - DALI_TEST_EQUALS( view.GetEndIndexOfElidedGlyphs(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS(view.GetEndIndexOfElidedGlyphs(), 0u, TEST_LOCATION); tet_infoline(" UtcDaliToolkitTextFieldEllipsisInternalAPIs - GetFirstMiddleIndexOfElidedGlyphs Default"); - DALI_TEST_EQUALS( view.GetFirstMiddleIndexOfElidedGlyphs(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS(view.GetFirstMiddleIndexOfElidedGlyphs(), 0u, TEST_LOCATION); tet_infoline(" UtcDaliToolkitTextFieldEllipsisInternalAPIs - GetSecondMiddleIndexOfElidedGlyphs Default"); - DALI_TEST_EQUALS( view.GetSecondMiddleIndexOfElidedGlyphs(), 0u, TEST_LOCATION ); - + DALI_TEST_EQUALS(view.GetSecondMiddleIndexOfElidedGlyphs(), 0u, TEST_LOCATION); END_TEST; } @@ -324,17 +1081,17 @@ int UtcDaliTextFieldTextWithSpan(void) tet_infoline("UtcDaliTextFieldTextWithSpan\n"); TextField field = TextField::New(); - DALI_TEST_CHECK( field ); + DALI_TEST_CHECK(field); - field.SetProperty( TextField ::Property::ENABLE_MARKUP, true ); - field.SetProperty( TextField::Property::TEXT, "Hello Span" ); - application.GetScene().Add( field ); + field.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + field.SetProperty(TextField::Property::TEXT, "Hello Span"); + application.GetScene().Add(field); application.SendNotification(); application.Render(); Vector3 originalSize = field.GetNaturalSize(); - field.SetProperty( TextField::Property::TEXT, "Hello Span" ); + field.SetProperty(TextField::Property::TEXT, "Hello Span"); application.SendNotification(); application.Render(); @@ -343,41 +1100,40 @@ int UtcDaliTextFieldTextWithSpan(void) DALI_TEST_GREATER(spanSize.width, originalSize.width, TEST_LOCATION); - Toolkit::Internal::TextField& fieldImpl = GetImpl( field ); - const ColorIndex* const colorIndicesBuffer1 = fieldImpl.GetTextController()->GetTextModel()->GetColorIndices(); + Toolkit::Internal::TextField& fieldImpl = GetImpl(field); + const ColorIndex* const colorIndicesBuffer1 = fieldImpl.GetTextController()->GetTextModel()->GetColorIndices(); - DALI_TEST_CHECK( colorIndicesBuffer1 ); + DALI_TEST_CHECK(colorIndicesBuffer1); //default color - DALI_TEST_EQUALS( colorIndicesBuffer1[0], 0u, TEST_LOCATION); + DALI_TEST_EQUALS(colorIndicesBuffer1[0], 0u, TEST_LOCATION); //span color - DALI_TEST_EQUALS( colorIndicesBuffer1[1], 1u, TEST_LOCATION); + DALI_TEST_EQUALS(colorIndicesBuffer1[1], 1u, TEST_LOCATION); //default color - DALI_TEST_EQUALS( colorIndicesBuffer1[6], 0u, TEST_LOCATION); + DALI_TEST_EQUALS(colorIndicesBuffer1[6], 0u, TEST_LOCATION); - - field.SetProperty( TextField::Property::TEXT, "Hello Span" ); + field.SetProperty(TextField::Property::TEXT, "Hello Span"); application.SendNotification(); application.Render(); const ColorIndex* const colorIndicesBuffer2 = fieldImpl.GetTextController()->GetTextModel()->GetColorIndices(); - DALI_TEST_CHECK( colorIndicesBuffer2 ); + DALI_TEST_CHECK(colorIndicesBuffer2); //default color - DALI_TEST_EQUALS( colorIndicesBuffer2[0], 0u, TEST_LOCATION); + DALI_TEST_EQUALS(colorIndicesBuffer2[0], 0u, TEST_LOCATION); //default color - DALI_TEST_EQUALS( colorIndicesBuffer2[1], 0u, TEST_LOCATION); + DALI_TEST_EQUALS(colorIndicesBuffer2[1], 0u, TEST_LOCATION); //span color - DALI_TEST_EQUALS( colorIndicesBuffer2[6], 1u, TEST_LOCATION); + DALI_TEST_EQUALS(colorIndicesBuffer2[6], 1u, TEST_LOCATION); //default color - DALI_TEST_EQUALS( colorIndicesBuffer2[7], 0u, TEST_LOCATION); + DALI_TEST_EQUALS(colorIndicesBuffer2[7], 0u, TEST_LOCATION); END_TEST; } @@ -397,9 +1153,9 @@ int UtcDaliTextFieldControlBackgroundColor(void) application.SendNotification(); application.Render(); - Toolkit::Internal::TextField& fieldImpl = GetImpl(field); - ControllerPtr controller = fieldImpl.GetTextController(); - Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get()); + Toolkit::Internal::TextField& fieldImpl = GetImpl(field); + ControllerPtr controller = fieldImpl.GetTextController(); + Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get()); // Default color is transparent controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor); @@ -416,3 +1172,182 @@ int UtcDaliTextFieldControlBackgroundColor(void) END_TEST; } + +int UtcDaliTextFieldMarkupStrikethrough(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupStrikethrough "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + textField.SetProperty(TextField::Property::TEXT, "ABCEFGH"); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + uint32_t expectedNumberOfStrikethroughGlyphs = 2u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + const Text::Length numberOfStrikethroughRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION); + + Vector strikethroughRuns; + strikethroughRuns.Resize(numberOfStrikethroughRuns); + textFieldImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns); + + //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].properties.colorDefined); + + //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].properties.colorDefined); + + END_TEST; +} + +int UtcDaliTextFieldMarkupStrikethroughNoEndTag(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupStrikethroughNoEndTag "); + + TextField textField = TextField::New(); + + application.GetScene().Add(textField); + + textField.SetProperty(TextField::Property::TEXT, "ABC"); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.SendNotification(); + application.Render(); + + uint32_t expectedNumberOfStrikethroughGlyphs = 0u; + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + Text::Length numberOfStrikethroughRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns(); + + DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliTextFieldMarkupCharacterSpacingTag(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupCharacterSpacingTag "); + + const Length EXPECTED_NUMBER_OF_GLYPHS = 21u; + + const float expandedCharSpacing = 10.0f; + const float condensedCharSpacing = -5.0f; + + TextField textField = TextField::New(); + + textField.SetProperty(TextField::Property::TEXT, "ABC EF\nABC EF\nABC EF\n"); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.GetScene().Add(textField); + + application.SendNotification(); + application.Render(); + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + Text::ViewInterface& view = textFieldImpl.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 UtcDaliTextFieldMarkupSpanCharacterSpacing(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextFieldMarkupSpanCharacterSpacing "); + + 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"; + + TextField textField = TextField::New(); + + textField.SetProperty(TextField::Property::TEXT, testText); + textField.SetProperty(TextField ::Property::ENABLE_MARKUP, true); + + application.GetScene().Add(textField); + + application.SendNotification(); + application.Render(); + + Toolkit::Internal::TextField& textFieldImpl = GetImpl(textField); + Text::ViewInterface& view = textFieldImpl.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