[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Text-Cursor.cpp
index 11c6343..765025a 100755 (executable)
@@ -60,14 +60,15 @@ struct GetClosestLineData
 
 struct GetClosestCursorIndexData
 {
-  std::string             description;    ///< Description of the test.
-  std::string             text;           ///< Input text.
-  unsigned int            numberOfTests;  ///< The number of tests.
-  float*                  visualX;        ///< The visual 'x' position for each test.
-  float*                  visualY;        ///< The visual 'y' position for each test.
-  CharacterHitTest::Mode* mode;           ///< The type of hit test.
-  CharacterIndex*         logicalIndex;   ///< The expected logical cursor index for each test.
-  bool*                   isCharacterHit; ///< The expected character hit value for each test.
+  std::string             description;            ///< Description of the test.
+  std::string             text;                   ///< Input text.
+  unsigned int            numberOfTests;          ///< The number of tests.
+  float*                  visualX;                ///< The visual 'x' position for each test.
+  float*                  visualY;                ///< The visual 'y' position for each test.
+  CharacterHitTest::Mode* mode;                   ///< The type of hit test.
+  bool                    markupProcessorEnabled; //< Enable markup processor to use markup text.
+  CharacterIndex*         logicalIndex;           ///< The expected logical cursor index for each test.
+  bool*                   isCharacterHit;         ///< The expected character hit value for each test.
 };
 
 struct GetCursorPositionData
@@ -173,7 +174,7 @@ bool GetClosestCursorIndexTest(const GetClosestCursorIndexData& data)
                   layoutSize,
                   textModel,
                   metrics,
-                  false,
+                  data.markupProcessorEnabled,
                   LineWrap::WORD,
                   false,
                   Toolkit::DevelText::EllipsisPosition::END,
@@ -194,7 +195,6 @@ bool GetClosestCursorIndexTest(const GetClosestCursorIndexData& data)
                                                                     data.visualY[index],
                                                                     data.mode[index],
                                                                     isCharacterHit);
-
     if(logicalCursorIndex != data.logicalIndex[index])
     {
       std::cout << "  test " << index << " failed. Different logical cursor index : " << logicalCursorIndex << ", expected : " << data.logicalIndex[index] << std::endl;
@@ -508,7 +508,7 @@ int UtcDaliGetClosestCursorIndex(void)
   float                  visualX02[]        = {-100.f, 1000.f, 60.f, 79.f, 83.f, 148.f, 99.f};
   float                  visualY02[]        = {-100.f, 1000.f, 12.f, 12.f, 12.f, 12.f, 12.f};
   CharacterHitTest::Mode mode02[]           = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
-  CharacterIndex         logicalIndex02[]   = {0, 21u, 7u, 10u, 10u, 14u, 12u};
+  CharacterIndex         logicalIndex02[]   = {0, 21u, 7u, 10u, 11u, 14u, 20u};
   bool                   isCharacterHit02[] = {false, false, true, true, true, true, true};
 
   float                  visualX03[]        = {19.f, 104.f, -2.f, 127.f};
@@ -526,7 +526,7 @@ int UtcDaliGetClosestCursorIndex(void)
   float                  visualX04[]        = {-100.f, 40.f, 44.f, 85.f, 500.f, 500.f, 367.f, 359.f, 329.f, -100.f, -100.f, 19.f, 64.f, 72.f, 104.f, 111.f, 500.f};
   float                  visualY04[]        = {-100.f, 12.f, 12.f, 12.f, 12.f, 30.f, 30.f, 30.f, 30.f, 30.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f};
   CharacterHitTest::Mode mode04[]           = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
-  CharacterIndex         logicalIndex04[]   = {0, 5u, 6u, 11u, 11u, 12u, 16u, 17u, 21u, 21u, 22u, 25u, 30u, 32u, 35u, 34u, 40u, 41u};
+  CharacterIndex         logicalIndex04[]   = {0, 5u, 6u, 11u, 11u, 12u, 16u, 17u, 21u, 21u, 22u, 25u, 31u, 32u, 35u, 34u, 40u, 41u};
   bool                   isCharacterHit04[] = {false, true, true, true, false, false, true, true, true, false, false, true, true, true, true, true, false};
 
   //   0           10           20            30           40      46
@@ -545,7 +545,7 @@ int UtcDaliGetClosestCursorIndex(void)
   float                  visualX05[]        = {-100.f, 96.f, 155.f, 250.f, 344.f, 500.f, -100.f, 36.f, 124.f, 190.f, 280.f, 500.f, -100.f, 56.f, 158.f, 237.f, 303.f, 500.f, -100.f, 98.f, 184.f, 261.f, 337.f, 500.f, -100.f, 40.f, 113.f, 223.f, 302.f, 500.f, -100.f, 82.f, 160.f, 253.f, 500.f};
   float                  visualY05[]        = {-100.f, 12.f, 12.f, 12.f, 12.f, 12.f, 30.f, 30.f, 30.f, 30.f, 30.f, 30.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f, 67.f, 67.f, 67.f, 67.f, 67.f, 67.f, 87.f, 87.f, 87.f, 87.f, 87.f, 87.f, 107.f, 107.f, 107.f, 107.f, 107.f};
   CharacterHitTest::Mode mode05[]           = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
-  CharacterIndex         logicalIndex05[]   = {0, 10u, 19u, 28u, 39u, 44u, 45u, 48u, 59u, 66u, 78u, 87u, 89u, 96u, 106u, 115u, 124u, 133u, 134u, 145u, 154u, 162u, 171u, 179u, 180u, 184u, 191u, 203u, 212u, 221u, 222u, 233u, 241u, 251u, 265u};
+  CharacterIndex         logicalIndex05[]   = {0, 10u, 19u, 28u, 41u, 44u, 45u, 49u, 59u, 66u, 78u, 89u, 90u, 97u, 107u, 117u, 126u, 134u, 135u, 147u, 155u, 163u, 172u, 180u, 181u, 185u, 192u, 204u, 213u, 222u, 223u, 234u, 242u, 252u, 265u};
   bool                   isCharacterHit05[] = {false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, false};
 
   //   0            10           20           30           40        46
@@ -564,7 +564,7 @@ int UtcDaliGetClosestCursorIndex(void)
   float                  visualX06[]        = {500.f, 307.f, 237.f, 148.f, 55.f, -100.f, 500.f, 362.f, 276.f, 213.f, 121.f, -100.f, 500.f, 344.f, 238.f, 167.f, 93.f, -100.f, 500.f, 306.f, 216.f, 142.f, 58.f, -100.f, 500.f, 355.f, 279.f, 182.f, 92.f, -100.f, 500.f, 326.f, 238.f, 150.f, -100.f};
   float                  visualY06[]        = {-100.f, 12.f, 12.f, 12.f, 12.f, 12.f, 30.f, 30.f, 30.f, 30.f, 30.f, 30.f, 50.f, 50.f, 50.f, 50.f, 50.f, 50.f, 67.f, 67.f, 67.f, 67.f, 67.f, 67.f, 87.f, 87.f, 87.f, 87.f, 87.f, 87.f, 107.f, 107.f, 107.f, 107.f, 107.f};
   CharacterHitTest::Mode mode06[]           = {CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP};
-  CharacterIndex         logicalIndex06[]   = {0, 11u, 19u, 28u, 39u, 44u, 45u, 48u, 57u, 65u, 78u, 87u, 89u, 96u, 107u, 114u, 124u, 133u, 134u, 144u, 154u, 162u, 171u, 178u, 179u, 185u, 192u, 203u, 212u, 221u, 222u, 232u, 240u, 251u, 265u};
+  CharacterIndex         logicalIndex06[]   = {0, 10u, 19u, 28u, 39u, 44u, 45u, 49u, 59u, 66u, 78u, 89u, 90u, 97u, 108u, 117u, 126u, 134u, 135u, 145u, 155u, 163u, 174u, 180u, 181u, 186u, 194u, 204u, 214u, 222u, 224u, 235u, 243u, 252u, 265u};
   bool                   isCharacterHit06[] = {false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, false};
 
   float                  visualX07[]        = {395.f};
@@ -579,6 +579,12 @@ int UtcDaliGetClosestCursorIndex(void)
   CharacterIndex         logicalIndex08[]   = {1u};
   bool                   isCharacterHit08[] = {true};
 
+  float                  visualX09[]        = {9.f};
+  float                  visualY09[]        = {12.f};
+  CharacterHitTest::Mode mode09[]           = {CharacterHitTest::TAP};
+  CharacterIndex         logicalIndex09[]   = {1u};
+  bool                   isCharacterHit09[] = {true};
+
   struct GetClosestCursorIndexData data[] =
     {
       {"Void text.",
@@ -587,24 +593,30 @@ int UtcDaliGetClosestCursorIndex(void)
        visualX01,
        visualY01,
        mode01,
+       false,
        logicalIndex01,
        isCharacterHit01},
+
       {"Single line text.",
        "Hello world שלום עולם",
        7u,
        visualX02,
        visualY02,
        mode02,
+       false,
        logicalIndex02,
        isCharacterHit02},
+
       {"Single line with ligatures",
        "different الأربعاء",
        4u,
        visualX03,
        visualY03,
        mode03,
+       false,
        logicalIndex03,
        isCharacterHit03},
+
       {"Multiline. Single line paragraphs",
        "Hello world\n"
        "שלום עולם\n"
@@ -613,8 +625,10 @@ int UtcDaliGetClosestCursorIndex(void)
        visualX04,
        visualY04,
        mode04,
+       false,
        logicalIndex04,
        isCharacterHit04},
+
       {"Multiline. Single bidirectional paragraph, starts LTR, wrapped lines",
        "abcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuדאוvwxה"
        "סתyzטזץabcשנבdefגקכghiעיןjklחלךmnoצמםpqrפרףstuד"
@@ -626,8 +640,10 @@ int UtcDaliGetClosestCursorIndex(void)
        visualX05,
        visualY05,
        mode05,
+       false,
        logicalIndex05,
        isCharacterHit05},
+
       {"Multiline. Single bidirectional paragraph, starts RTL, wrapped lines",
        "שנבabcגקכdefעיןghiחלךjklצמםmnoפרףpqrדאוstuהסתv"
        "wxטזץyzשנבabcגקכdefעיןghiחלךjklצמםmnoפרףpqrדאוs"
@@ -639,25 +655,42 @@ int UtcDaliGetClosestCursorIndex(void)
        visualX06,
        visualY06,
        mode06,
+       false,
        logicalIndex06,
        isCharacterHit06},
+
       {"Testing complex characters. Arabic ligatures",
        "الأَبْجَدِيَّة العَرَبِيَّة",
        1u,
        visualX07,
        visualY07,
        mode07,
+       false,
        logicalIndex07,
        isCharacterHit07},
+
       {"Testing complex characters. Latin ligatures",
        "fi ligature",
        1u,
        visualX08,
        visualY08,
        mode08,
+       false,
        logicalIndex08,
-       isCharacterHit08}};
-  const unsigned int numberOfTests = 8u;
+       isCharacterHit08},
+
+      {"Testing complex characters. Emoji",
+       "A&#x1F468;&#x200D;&#x1F469;&#x200D;&#x1F467;&#x200D;&#x1F466;B",
+       1u,
+       visualX09,
+       visualY09,
+       mode09,
+       true,
+       logicalIndex09,
+       isCharacterHit09}
+
+    };
+  const unsigned int numberOfTests = 9u;
 
   for(unsigned int index = 0; index < numberOfTests; ++index)
   {