X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-Text-MultiLanguage.cpp;h=a81a462a8b5013fe381a1bf946c49563f9d4e50a;hb=c314e28e4c80c809d3b77d96c04f2ca643a30728;hp=eba6b054d705909ccf60410980b77dba78c56c2f;hpb=2de51e0cae79d3d1b36fe7de53072d65a7c96b30;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp old mode 100644 new mode 100755 index eba6b05..a81a462 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -33,35 +34,38 @@ using namespace Dali; using namespace Toolkit; using namespace Text; + // Tests the following functions with different scripts. // -// void MergeFontDescriptions( const Vector& fontDescriptions, -// const TextAbstraction::FontDescription& defaultFontDescription, -// TextAbstraction::PointSize26Dot6 defaultPointSize, -// CharacterIndex characterIndex, -// TextAbstraction::FontDescription& fontDescription, -// TextAbstraction::PointSize26Dot6& fontPointSize, -// bool& isDefaultFont ); +// void MergeFontDescriptions(const Vector& fontDescriptions, +// const TextAbstraction::FontDescription& defaultFontDescription, +// TextAbstraction::PointSize26Dot6 defaultPointSize, +// float fontSizeScale, +// CharacterIndex characterIndex, +// TextAbstraction::FontDescription& fontDescription, +// TextAbstraction::PointSize26Dot6& fontPointSize, +// bool& isDefaultFont); // -// Script GetScript( Length index, -// Vector::ConstIterator& scriptRunIt, -// const Vector::ConstIterator& scriptRunEndIt ); +// Script GetScript(Length index, +// Vector::ConstIterator& scriptRunIt, +// const Vector::ConstIterator& scriptRunEndIt); // // Constructor, destructor and MultilanguageSupport::Get() // -// void MultilanguageSupport::SetScripts( const Vector& text, -// CharacterIndex startIndex, -// Length numberOfCharacters, -// Vector& scripts ); +// void MultilanguageSupport::SetScripts(const Vector& text, +// CharacterIndex startIndex, +// Length numberOfCharacters, +// Vector& scripts); // -// void MultilanguageSupport::ValidateFonts( const Vector& text, -// const Vector& scripts, -// const Vector& fontDescriptions, -// const TextAbstraction::FontDescription& defaultFontDescription, -// TextAbstraction::PointSize26Dot6 defaultFontPointSize, -// CharacterIndex startIndex, -// Length numberOfCharacters, -// Vector& fonts ); +// void MultilanguageSupport::ValidateFonts(const Vector& text, +// const Vector& scripts, +// const Vector& fontDescriptions, +// const TextAbstraction::FontDescription& defaultFontDescription, +// TextAbstraction::PointSize26Dot6 defaultFontPointSize, +// float fontSizeScale, +// CharacterIndex startIndex, +// Length numberOfCharacters, +// Vector& fonts); ////////////////////////////////////////////////////////// @@ -69,7 +73,7 @@ namespace { const std::string DEFAULT_FONT_DIR( "/resources/fonts" ); -const unsigned int EMOJI_FONT_SIZE = 3968u; +const unsigned int EMOJI_FONT_SIZE = 3840u; // 60 * 64 const unsigned int NON_DEFAULT_FONT_SIZE = 40u; struct MergeFontDescriptionsData @@ -78,6 +82,7 @@ struct MergeFontDescriptionsData Vector fontDescriptionRuns; ///< The font description runs. TextAbstraction::FontDescription defaultFontDescription; ///< The default font description. TextAbstraction::PointSize26Dot6 defaultPointSize; ///< The default point size. + float fontSizeScale; ///< The font's size scale. unsigned int startIndex; ///< The start index. unsigned int numberOfCharacters; ///< The number of characters. Vector expectedFontIds; ///< The expected font ids. @@ -99,6 +104,7 @@ struct ValidateFontsData std::string text; ///< Input text. std::string defaultFont; ///< The default font. unsigned int defaultFontSize; ///< The default font size. + float fontSizeScale; ///< The font's size scale. unsigned int index; ///< The index of the first character to update the script. unsigned int numberOfCharacters; ///< The numbers of characters to update the script. Vector fontDescriptionRuns; ///< The font description runs. @@ -123,6 +129,7 @@ bool MergeFontDescriptionsTest( const MergeFontDescriptionsData& data ) MergeFontDescriptions( data.fontDescriptionRuns, data.defaultFontDescription, data.defaultPointSize, + data.fontSizeScale, index, fontDescription, fontPointSize, @@ -178,9 +185,11 @@ bool ScriptsTest( const ScriptsData& data ) Vector utf32; utf32.Resize( data.text.size() ); - const uint32_t numberOfCharacters = Utf8ToUtf32( reinterpret_cast( data.text.c_str() ), - data.text.size(), - &utf32[0u] ); + const uint32_t numberOfCharacters = ( data.text.size() == 0 ) ? 0 : + Utf8ToUtf32( reinterpret_cast( data.text.c_str() ), + data.text.size(), + &utf32[0u] ); + utf32.Resize( numberOfCharacters ); // 2) Set the script info. @@ -238,7 +247,7 @@ bool ScriptsTest( const ScriptsData& data ) if( scriptRun1.script != scriptRun2.script ) { - tet_printf("ScriptsTest FAIL: different script. %s, should be %s\n", TextAbstraction::ScriptName[scriptRun1.script], TextAbstraction::ScriptName[scriptRun2.script] ); + tet_printf("ScriptsTest FAIL: script index: %u, different script. %s, should be %s\n", index, TextAbstraction::ScriptName[scriptRun1.script], TextAbstraction::ScriptName[scriptRun2.script] ); return false; } } @@ -255,7 +264,8 @@ bool ValidateFontTest( const ValidateFontsData& data ) Vector utf32; utf32.Resize( data.text.size() ); - const uint32_t numberOfCharacters = Utf8ToUtf32( reinterpret_cast( data.text.c_str() ), + const uint32_t numberOfCharacters = (data.text.size() == 0 ) ? 0 : + Utf8ToUtf32( reinterpret_cast( data.text.c_str() ), data.text.size(), &utf32[0u] ); utf32.Resize( numberOfCharacters ); @@ -287,6 +297,7 @@ bool ValidateFontTest( const ValidateFontsData& data ) data.fontDescriptionRuns, defaultFontDescription, defaultPointSize, + data.fontSizeScale, 0u, numberOfCharacters, fontRuns ); @@ -304,6 +315,7 @@ bool ValidateFontTest( const ValidateFontsData& data ) data.fontDescriptionRuns, defaultFontDescription, defaultPointSize, + data.fontSizeScale, data.index, data.numberOfCharacters, fontRuns ); @@ -591,6 +603,7 @@ int UtcDaliTextMergeFontDescriptions(void) fontDescriptionRuns01, defaultFontDescription01, TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 0u, expectedFontIds01, @@ -601,6 +614,7 @@ int UtcDaliTextMergeFontDescriptions(void) fontDescriptionRuns02, defaultFontDescription02, TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 2u, expectedFontIds02, @@ -611,6 +625,7 @@ int UtcDaliTextMergeFontDescriptions(void) fontDescriptionRuns03, defaultFontDescription03, TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 10u, expectedFontIds03, @@ -959,7 +974,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 0u, 3u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1101 = { @@ -967,7 +982,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 3u, 3u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1102 = { @@ -983,7 +998,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 25u, 3u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1104 = { @@ -991,7 +1006,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 28u, 3u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1105 = { @@ -1007,7 +1022,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 46u, 2u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1107 = { @@ -1015,7 +1030,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 48u, 2u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1108 = { @@ -1023,7 +1038,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 50u, 2u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; scriptRuns11.PushBack( scriptRun1100 ); scriptRuns11.PushBack( scriptRun1101 ); @@ -1043,7 +1058,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 0u, 3u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1201 = { @@ -1051,7 +1066,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 3u, 3u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1202 = { @@ -1059,7 +1074,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 6u, 3u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; ScriptRun scriptRun1203 = { @@ -1067,7 +1082,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 9u, 2u, }, - TextAbstraction::LATIN + TextAbstraction::UNKNOWN }; scriptRuns12.PushBack( scriptRun1200 ); scriptRuns12.PushBack( scriptRun1201 ); @@ -1081,7 +1096,7 @@ int UtcDaliTextMultiLanguageSetScripts(void) 0u, 4u, }, - TextAbstraction::LATIN // An unknown script is transformed to LATIN + TextAbstraction::UNKNOWN }; scriptRuns13.PushBack( scriptRun1301 ); @@ -1303,7 +1318,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) // Load some fonts. fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" ); fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" ); - fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenColorEmoji.ttf", EMOJI_FONT_SIZE ); + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/BreezeColorEmoji.ttf", EMOJI_FONT_SIZE ); fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf", pointSize01 ); fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf", pointSize02 ); fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf", pointSize01 ); @@ -1311,7 +1326,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) // Font id 1 --> TizenSansArabicRegular.ttf // Font id 2 --> TizenSansHebrewRegular.ttf - // Font id 3 --> TizenColorEmoji.ttf + // Font id 3 --> BreezeColorEmoji.ttf // Font id 4 --> TizenSansRegular.ttf, size 8 // Font id 5 --> TizenSansRegular.ttf, size 16 // Font id 6 --> TizenSansHebrewRegular.ttf, size 8 @@ -1484,8 +1499,8 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) 0u, 4u }, - const_cast( "TizenColorEmoji" ), - 15u, + const_cast( "BreezeColorEmoji" ), + 16u, TextAbstraction::FontWeight::NORMAL, TextAbstraction::FontWidth::NORMAL, TextAbstraction::FontSlant::NORMAL, @@ -1614,6 +1629,126 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) fontDescriptions10.PushBack( fontDescription1003 ); fontDescriptions10.PushBack( fontDescription1004 ); + FontRun fontRun1101 = + { + { + 0u, + 22u + }, + 5u + }; + Vector fontRuns11; + fontRuns11.PushBack( fontRun1101 ); + + FontDescriptionRun fontDescription1101 = + { + { + 0, + 22u + }, + const_cast( "TizenSans" ), + 9u, + TextAbstraction::FontWeight::NORMAL, + TextAbstraction::FontWidth::NORMAL, + TextAbstraction::FontSlant::NORMAL, + pointSize02, + true, + false, + false, + false, + true + }; + Vector fontDescriptions11; + fontDescriptions11.PushBack( fontDescription1101 ); + + FontRun fontRun1201 = + { + { + 0u, + 6u + }, + 8u + }; + FontRun fontRun1202 = + { + { + 6u, + 1u + }, + 9u + }; + FontRun fontRun1203 = + { + { + 7u, + 5u + }, + 8u + }; + Vector fontRuns12; + fontRuns12.PushBack( fontRun1201 ); + fontRuns12.PushBack( fontRun1202 ); + fontRuns12.PushBack( fontRun1203 ); + + FontDescriptionRun fontDescription1201 = + { + { + 0u, + 6u + }, + const_cast( "TizenSans" ), + 9u, + TextAbstraction::FontWeight::NORMAL, + TextAbstraction::FontWidth::NORMAL, + TextAbstraction::FontSlant::NORMAL, + 0u, + true, + false, + false, + false, + false + }; + FontDescriptionRun fontDescription1202 = + { + { + 6u, + 1u + }, + const_cast( "TizenSans" ), + 9u, + TextAbstraction::FontWeight::NORMAL, + TextAbstraction::FontWidth::NORMAL, + TextAbstraction::FontSlant::NORMAL, + 0u, + true, + false, + false, + false, + false + }; + FontDescriptionRun fontDescription1203 = + { + { + 7u, + 5u + }, + const_cast( "TizenSans" ), + 9u, + TextAbstraction::FontWeight::NORMAL, + TextAbstraction::FontWidth::NORMAL, + TextAbstraction::FontSlant::NORMAL, + 0u, + true, + false, + false, + false, + false + }; + Vector fontDescriptions12; + fontDescriptions12.PushBack( fontDescription1201 ); + fontDescriptions12.PushBack( fontDescription1202 ); + fontDescriptions12.PushBack( fontDescription1203 ); + const ValidateFontsData data[] = { { @@ -1621,6 +1756,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 0u, fontDescriptions01, @@ -1631,6 +1767,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "Hello world", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 11u, fontDescriptions02, @@ -1641,6 +1778,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "Hello world\nhello world\ndemo", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 28u, fontDescriptions03, @@ -1651,6 +1789,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "Hello world\nhello world\ndemo", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 12u, fontDescriptions03, @@ -1661,6 +1800,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "Hello world\nhello world\ndemo", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 12u, 12u, fontDescriptions03, @@ -1671,6 +1811,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "Hello world\nhello world\ndemo", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 24u, 4u, fontDescriptions03, @@ -1681,6 +1822,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "שלום עולם", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 9u, fontDescriptions07, @@ -1691,6 +1833,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "שלום עולם", "/tizen/TizenSansHebrewRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 9u, fontDescriptions08, @@ -1699,8 +1842,9 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) { "Emojis", "\xF0\x9F\x98\x81\xF0\x9F\x98\x82\xF0\x9F\x98\x83\xF0\x9F\x98\x84", - "/tizen/TizenColorEmoji.ttf", + "/tizen/BreezeColorEmoji.ttf", EMOJI_FONT_SIZE, + 1.0f, 0u, 4u, fontDescriptions09, @@ -1711,13 +1855,36 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) "Hello world, שלום עולם, hello world, שלום עולם", "/tizen/TizenSansRegular.ttf", TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, 0u, 46u, fontDescriptions10, fontRuns10 }, + { + "Unknown script -> changed to LATIN", + "WRC – The Official App", + "/tizen/TizenSansRegular.ttf", + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, + 0u, + 22u, + fontDescriptions11, + fontRuns11 + }, + { + "Common script.", + "Hello \tworld", + "/tizen/TizenSansRegular.ttf", + TextAbstraction::FontClient::DEFAULT_POINT_SIZE, + 1.0f, + 0u, + 12u, + fontDescriptions12, + fontRuns12 + }, }; - const unsigned int numberOfTests = 10u; + const unsigned int numberOfTests = 12u; for( unsigned int index = 0u; index < numberOfTests; ++index ) { @@ -1730,3 +1897,76 @@ int UtcDaliTextMultiLanguageValidateFonts01(void) tet_result(TET_PASS); END_TEST; } + +int UtcDaliTextMultiLanguageValidateFontsPerScriptCache(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageValidateFontsPerScriptCache"); + + std::size_t MAX_VALIDATE_FONTS_PER_SCRIPT_CACHE_SIZE = 63u; + std::size_t VALIDATE_FONTS_PER_SCRIPT_REMAIN_COUNT = 8u; + + Dali::Toolkit::Text::Internal::ValidateFontsPerScript* validateFontsPerScript = new Dali::Toolkit::Text::Internal::ValidateFontsPerScript(); + + for(std::size_t i = 0u; i < MAX_VALIDATE_FONTS_PER_SCRIPT_CACHE_SIZE; i ++) + { + FontId fontId = i; + validateFontsPerScript->Cache(fontId); + } + + DALI_TEST_EQUALS(MAX_VALIDATE_FONTS_PER_SCRIPT_CACHE_SIZE, validateFontsPerScript->mValidFonts.Count(), TEST_LOCATION); + + FontId fontId = MAX_VALIDATE_FONTS_PER_SCRIPT_CACHE_SIZE; + validateFontsPerScript->Cache(fontId); + + DALI_TEST_EQUALS(VALIDATE_FONTS_PER_SCRIPT_REMAIN_COUNT, validateFontsPerScript->mValidFonts.Count(), TEST_LOCATION); + + END_TEST; +} + +int UtcDaliTextMultiLanguageDefaultFontsCache(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageDefaultFontsCache"); + + std::size_t MAX_DEFAULT_FONTS_CACHE_SIZE = 15; + std::size_t DEFAULT_FONTS_REMAIN_COUNT = 2; + + Dali::Toolkit::Text::Internal::DefaultFonts* defaultFontsPerScript = new Dali::Toolkit::Text::Internal::DefaultFonts(); + + for(std::size_t i = 0u; i < MAX_DEFAULT_FONTS_CACHE_SIZE; i ++) + { + TextAbstraction::FontDescription fontDescription; + FontId fontId = i; + defaultFontsPerScript->Cache(fontDescription, fontId); + } + + DALI_TEST_EQUALS(MAX_DEFAULT_FONTS_CACHE_SIZE, defaultFontsPerScript->mFonts.size(), TEST_LOCATION); + + TextAbstraction::FontDescription fontDescription; + FontId fontId = MAX_DEFAULT_FONTS_CACHE_SIZE; + defaultFontsPerScript->Cache(fontDescription, fontId); + + DALI_TEST_EQUALS(DEFAULT_FONTS_REMAIN_COUNT, defaultFontsPerScript->mFonts.size(), TEST_LOCATION); + + END_TEST; +} + +int UtcDaliTextMultiLanguageLocaleChange(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageLocaleChange"); + + Adaptor &adaptor = application.GetAdaptor(); + MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get(); + + std::string newLocale = "multi_TEST"; + adaptor.LocaleChangedSignal().Emit(newLocale); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(newLocale.data(), GetImplementation(multilanguageSupport).GetLocale(), TEST_LOCATION); + + END_TEST; +} \ No newline at end of file