Fix for multi-language support.
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Text-MultiLanguage.cpp
index 7fc8f71..db59db3 100644 (file)
@@ -37,6 +37,7 @@ using namespace Text;
 //
 // void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
 //                             Vector<FontId>& fontIds,
+//                             Vector<bool>& isDefaultFont,
 //                             const TextAbstraction::FontDescription& defaultFontDescription,
 //                             TextAbstraction::PointSize26Dot6 defaultPointSize,
 //                             CharacterIndex startIndex,
@@ -79,6 +80,7 @@ struct MergeFontDescriptionsData
   unsigned int startIndex;                                 ///< The start index.
   unsigned int numberOfCharacters;                         ///< The number of characters.
   Vector<FontId> expectedFontIds;                          ///< The expected font ids.
+  Vector<bool> expectedIsDefault;                          ///< The expected font ids.
 };
 
 struct ScriptsData
@@ -108,9 +110,12 @@ bool MergeFontDescriptionsTest( const MergeFontDescriptionsData& data )
 {
   Vector<FontId> fontIds;
   fontIds.Resize( data.startIndex + data.numberOfCharacters, 0u );
+  Vector<bool> isDefaultFont;
+  isDefaultFont.Resize( data.startIndex + data.numberOfCharacters, true );
 
   MergeFontDescriptions( data.fontDescriptionRuns,
                          fontIds,
+                         isDefaultFont,
                          data.defaultFontDescription,
                          data.defaultPointSize,
                          data.startIndex,
@@ -141,6 +146,12 @@ bool MergeFontDescriptionsTest( const MergeFontDescriptionsData& data )
       std::cout << std::endl;
       return false;
     }
+
+    if( isDefaultFont[index] != data.expectedIsDefault[index] )
+    {
+      std::cout << data.description << " Different 'is font default' at index : " << index << ", is font default : " << isDefaultFont[index] << ", expected : " << data.expectedIsDefault[index] << std::endl;
+      return false;
+    }
   }
 
   return true;
@@ -413,12 +424,16 @@ int UtcDaliTextMergeFontDescriptions(void)
   TextAbstraction::FontDescription defaultFontDescription01;
   Vector<FontDescriptionRun> fontDescriptionRuns01;
   Vector<FontId> expectedFontIds01;
+  Vector<bool> expectedIsFontDefault01;
 
   TextAbstraction::FontDescription defaultFontDescription02;
   Vector<FontDescriptionRun> fontDescriptionRuns02;
   Vector<FontId> expectedFontIds02;
   expectedFontIds02.PushBack( 0u );
   expectedFontIds02.PushBack( 0u );
+  Vector<bool> expectedIsFontDefault02;
+  expectedIsFontDefault02.PushBack( true );
+  expectedIsFontDefault02.PushBack( true );
 
   TextAbstraction::FontDescription defaultFontDescription03;
   defaultFontDescription03.family = "DejaVu Serif";
@@ -532,6 +547,17 @@ int UtcDaliTextMergeFontDescriptions(void)
   expectedFontIds03.PushBack( 3u );
   expectedFontIds03.PushBack( 6u );
   expectedFontIds03.PushBack( 6u );
+  Vector<bool> expectedIsFontDefault03;
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
+  expectedIsFontDefault03.PushBack( false );
 
   const MergeFontDescriptionsData data[] =
   {
@@ -542,7 +568,8 @@ int UtcDaliTextMergeFontDescriptions(void)
       TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
       0u,
       0u,
-      expectedFontIds01
+      expectedFontIds01,
+      expectedIsFontDefault01
     },
     {
       "No description runs.",
@@ -551,7 +578,8 @@ int UtcDaliTextMergeFontDescriptions(void)
       TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
       0u,
       2u,
-      expectedFontIds02
+      expectedFontIds02,
+      expectedIsFontDefault02
     },
     {
       "Some description runs.",
@@ -560,7 +588,8 @@ int UtcDaliTextMergeFontDescriptions(void)
       TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
       0u,
       10u,
-      expectedFontIds03
+      expectedFontIds03,
+      expectedIsFontDefault03
     }
   };
   const unsigned int numberOfTests = 3u;
@@ -1243,15 +1272,26 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
   const std::string pathName( pathNamePtr );
   free( pathNamePtr );
 
+  const PointSize26Dot6 pointSize01 = static_cast<PointSize26Dot6>( 21.f * 64.f );
+  const PointSize26Dot6 pointSize02 = static_cast<PointSize26Dot6>( 35.f * 64.f );
+
   // 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/TizenSansRegular.ttf", pointSize01 );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf", pointSize02 );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf", pointSize01 );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf", pointSize02 );
 
   // Font id 1 --> TizenSansArabicRegular.ttf
   // Font id 2 --> TizenSansHebrewRegular.ttf
   // Font id 3 --> TizenColorEmoji.ttf
-  // Font id 4 --> (default)
+  // Font id 4 --> TizenSansRegular.ttf, size 8
+  // Font id 5 --> TizenSansRegular.ttf, size 16
+  // Font id 6 --> TizenSansHebrewRegular.ttf, size 8
+  // Font id 7 --> TizenSansHebrewRegular.ttf, size 16
+  // Font id 8 --> (default)
 
   Vector<FontRun> fontRuns01;
   Vector<FontDescriptionRun> fontDescriptions01;
@@ -1262,7 +1302,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
       0u,
       11u
     },
-    4u
+    8u
   };
   Vector<FontRun> fontRuns02;
   fontRuns02.PushBack( fontRun0201 );
@@ -1294,7 +1334,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
       0u,
       12u
     },
-    4u
+    8u
   };
   FontRun fontRun0302 =
   {
@@ -1302,7 +1342,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
       12u,
       12u
     },
-    4u
+    8u
   };
   FontRun fontRun0303 =
   {
@@ -1310,7 +1350,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
       24u,
       4u
     },
-    4u
+    8u
   };
   Vector<FontRun> fontRuns03;
   fontRuns03.PushBack( fontRun0301 );
@@ -1333,7 +1373,7 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
       4u,
       1u
     },
-    4u
+    8u
   };
   FontRun fontRun0703 =
   {
@@ -1433,6 +1473,122 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
   };
   fontDescriptions09.PushBack( fontDescription0901 );
 
+  FontRun fontRun1001 =
+  {
+    {
+      0u,
+      13u
+    },
+    4u
+  };
+  FontRun fontRun1002 =
+  {
+    {
+      13u,
+      9u
+    },
+    6u
+  };
+  FontRun fontRun1003 =
+  {
+    {
+      22u,
+      15u
+    },
+    5u
+  };
+  FontRun fontRun1004 =
+  {
+    {
+      37u,
+      9u
+    },
+    7u
+  };
+  Vector<FontRun> fontRuns10;
+  fontRuns10.PushBack( fontRun1001 );
+  fontRuns10.PushBack( fontRun1002 );
+  fontRuns10.PushBack( fontRun1003 );
+  fontRuns10.PushBack( fontRun1004 );
+
+  FontDescriptionRun fontDescription1001 =
+  {
+    {
+      0u,
+      13u
+    },
+    const_cast<char*>( "TizenSans" ),
+    9u,
+    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontSlant::NORMAL,
+    pointSize01,
+    true,
+    false,
+    false,
+    false,
+    true
+  };
+  FontDescriptionRun fontDescription1002 =
+  {
+    {
+      13u,
+      9u
+    },
+    const_cast<char*>( "TizenSansHebrew" ),
+    15u,
+    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontSlant::NORMAL,
+    pointSize01,
+    true,
+    false,
+    false,
+    false,
+    true
+  };
+  FontDescriptionRun fontDescription1003 =
+  {
+    {
+      22u,
+      15u
+    },
+    const_cast<char*>( "TizenSans" ),
+    9u,
+    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontSlant::NORMAL,
+    pointSize02,
+    true,
+    false,
+    false,
+    false,
+    true
+  };
+  FontDescriptionRun fontDescription1004 =
+  {
+    {
+      37u,
+      9u
+    },
+    const_cast<char*>( "TizenSansHebrew" ),
+    15u,
+    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontSlant::NORMAL,
+    pointSize02,
+    true,
+    false,
+    false,
+    false,
+    true
+  };
+  Vector<FontDescriptionRun> fontDescriptions10;
+  fontDescriptions10.PushBack( fontDescription1001 );
+  fontDescriptions10.PushBack( fontDescription1002 );
+  fontDescriptions10.PushBack( fontDescription1003 );
+  fontDescriptions10.PushBack( fontDescription1004 );
+
   const ValidateFontsData data[] =
   {
     {
@@ -1525,8 +1681,18 @@ int UtcDaliTextMultiLanguageValidateFonts01(void)
       fontDescriptions09,
       fontRuns09
     },
+    {
+      "Mix text. Default font: latin. Different font sizes",
+      "Hello world, שלום עולם, hello world, שלום עולם",
+      "/tizen/TizenSansRegular.ttf",
+      TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+      0u,
+      46u,
+      fontDescriptions10,
+      fontRuns10
+    },
   };
-  const unsigned int numberOfTests = 9u;
+  const unsigned int numberOfTests = 10u;
 
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {