summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-05 20:11:40 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-08-05 20:11:40 +0000
commit1f262e416a2d33265539e423ab5de28895379adf (patch)
treeb6b55e55e04485011eaa10e0703aaac65f774c36
parent9552816ddad6b1d9f261e4e899c4813205a034f2 (diff)
parentdf806edbe65c5e66a858e3652a7f17e4ce8bdb00 (diff)
downloadpango-1f262e416a2d33265539e423ab5de28895379adf.tar.gz
Merge branch 'bidi-adventures' into 'main'
tests: Avoid bidi in test output See merge request GNOME/pango!388
-rw-r--r--tests/breaks/eight.expected7
-rw-r--r--tests/breaks/eleven.expected2
-rw-r--r--tests/breaks/five.expected7
-rw-r--r--tests/breaks/four.expected2
-rw-r--r--tests/breaks/nine.expected2
-rw-r--r--tests/breaks/one.expected2
-rw-r--r--tests/breaks/seven.expected7
-rw-r--r--tests/breaks/six.expected7
-rw-r--r--tests/breaks/ten.expected2
-rw-r--r--tests/breaks/three.expected2
-rw-r--r--tests/breaks/two.expected2
-rw-r--r--tests/meson.build2
-rw-r--r--tests/test-bidi.c183
-rw-r--r--tests/test-break.c2
14 files changed, 197 insertions, 32 deletions
diff --git a/tests/breaks/eight.expected b/tests/breaks/eight.expected
index 083ebeef..dff8d0a7 100644
--- a/tests/breaks/eight.expected
+++ b/tests/breaks/eight.expected
@@ -1,6 +1 @@
-Text: 我 能 吞 下 玻 璃 而 不 傷 身 體 [0x0a]
-Breaks: c lc lc lc lc lc lc lc lc lc lc c c
-Whitespace: w w
-Words: bs b b b b b b b b b b be b
-Sentences: bs e b
-Graphemes: b b b b b b b b b b b b b
+Bail out! ERROR:../tests/test-break.c:58:test_file: assertion failed (error == NULL): Failed to open file “tests/breaks/eight.break”: No such file or directory (g-file-error-quark, 4)
diff --git a/tests/breaks/eleven.expected b/tests/breaks/eleven.expected
index 533c9c14..5f45affe 100644
--- a/tests/breaks/eleven.expected
+++ b/tests/breaks/eleven.expected
@@ -1,4 +1,4 @@
-Text: ❤️︎︎ 👨[0x200d]🦰 👨🏿[0x200d]🦱 0️⃣ 🏴[0xe0075][0xe0073][0xe0063][0xe0061][0xe007f] 🇩🇪️ [0x0a]
+Text: ⁦❤⁩⁦️⁩⁦︎⁩⁦︎⁩ ⁦👨⁩[0x200d]⁦🦰⁩ ⁦👨⁩⁦🏿⁩[0x200d]⁦🦱⁩ ⁦0⁩⁦️⁩⁦⃣⁩ ⁦🏴⁩[0xe0075][0xe0073][0xe0063][0xe0061][0xe007f] ⁦🇩⁩⁦🇪⁩⁦️⁩ [0x0a]
Breaks: c lc lc lc lc lc c c
Whitespace: w w
Words: b b b bs be b b b
diff --git a/tests/breaks/five.expected b/tests/breaks/five.expected
index 38dc88ff..f517ab5f 100644
--- a/tests/breaks/five.expected
+++ b/tests/breaks/five.expected
@@ -1,6 +1 @@
-Text: H e r e [ ] i s [ ] s o m e [ ] t e x t [ ] w i t h [ ] b r e a k - a f f e c t i n g [ ] a t t r i b u t e s . [0x0a]
-Breaks: c c c c c lc c c lc c c c c lc c c c c lc c
-Whitespace: x x x x x x w w
-Words: bs be bs be bs be bs be bs be bs be bs be bs be b b
-Sentences: bs e b
-Graphemes: b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
+Bail out! ERROR:../tests/test-break.c:58:test_file: assertion failed (error == NULL): Failed to open file “tests/breaks/five.break”: No such file or directory (g-file-error-quark, 4)
diff --git a/tests/breaks/four.expected b/tests/breaks/four.expected
index 100eae24..b7f1a86c 100644
--- a/tests/breaks/four.expected
+++ b/tests/breaks/four.expected
@@ -1,4 +1,4 @@
-Text: ภ า ษ า ไ ท ย [ ] ห รื อ [ ] ภ า ษ า ไ ท ย ก ล า ง [ ] เ ป็ น ภ า ษ า ร า ช ก า ร แ ล ะ ภ า ษ า ป ร ะ จ ำ ช า ติ ข อ ง ป ร ะ เ ท ศ ไ ท ย [ ] ภ า ษ า ไ ท ย เ ป็ น ภ า ษ า ใ น ก ลุ่ ม ภ า ษ า ไ ท ซึ่ ง เ ป็ น ก ลุ่ ม ย่ อ ย ข อ ง ต ร ะ กู ล ภ า ษ า ข ร้ า [ ] ไ ท [ ] สั น นิ ษ ฐ า น ว่ า [ ] ภ า ษ า ใ น ต ร ะ กู ล นี้ มี ถิ่ น ก ำ เ นิ ด จ า ก ท า ง ต อ น ใ ต้ ข อ ง ป ร ะ เ ท ศ จี น [ ] แ ล ะ นั ก ภ า ษ า ศ า ส ต ร์ บ า ง ส่ ว น เ ส น อ ว่ า [ ] ภ า ษ า ไ ท ย น่ า จ ะ มี ค ว า ม เ ชื่ อ ม โ ย ง กั บ ต ร ะ กู ล ภ า ษ า อ อ ส โ ต ร [ ] เ อ เ ชี ย ติ ก [ ] ต ร ะ กู ล ภ า ษ า อ อ ส โ ต ร นี เ ซี ย น [ ] แ ล ะ ต ร ะ กู ล ภ า ษ า จี น [ ] ทิ เ บ ต [0x0a]
+Text: ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩ [ ] ⁦ห⁩ ⁦ร⁩⁦ื⁩ ⁦อ⁩ [ ] ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩ ⁦ก⁩ ⁦ล⁩ ⁦า⁩ ⁦ง⁩ [ ] ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ร⁩ ⁦า⁩ ⁦ช⁩ ⁦ก⁩ ⁦า⁩ ⁦ร⁩ ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦จ⁩ ⁦ำ⁩ ⁦ช⁩ ⁦า⁩ ⁦ต⁩⁦ิ⁩ ⁦ข⁩ ⁦อ⁩ ⁦ง⁩ ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦เ⁩ ⁦ท⁩ ⁦ศ⁩ ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩ [ ] ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩ ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ใ⁩ ⁦น⁩ ⁦ก⁩ ⁦ล⁩⁦ุ⁩⁦่⁩ ⁦ม⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ไ⁩ ⁦ท⁩ ⁦ซ⁩⁦ึ⁩⁦่⁩ ⁦ง⁩ ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩ ⁦ก⁩ ⁦ล⁩⁦ุ⁩⁦่⁩ ⁦ม⁩ ⁦ย⁩⁦่⁩ ⁦อ⁩ ⁦ย⁩ ⁦ข⁩ ⁦อ⁩ ⁦ง⁩ ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ข⁩ ⁦ร⁩⁦้⁩ ⁦า⁩ [ ] ⁦ไ⁩ ⁦ท⁩ [ ] ⁦ส⁩⁦ั⁩ ⁦น⁩ ⁦น⁩⁦ิ⁩ ⁦ษ⁩ ⁦ฐ⁩ ⁦า⁩ ⁦น⁩ ⁦ว⁩⁦่⁩ ⁦า⁩ [ ] ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ใ⁩ ⁦น⁩ ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩ ⁦น⁩⁦ี⁩⁦้⁩ ⁦ม⁩⁦ี⁩ ⁦ถ⁩⁦ิ⁩⁦่⁩ ⁦น⁩ ⁦ก⁩ ⁦ำ⁩ ⁦เ⁩ ⁦น⁩⁦ิ⁩ ⁦ด⁩ ⁦จ⁩ ⁦า⁩ ⁦ก⁩ ⁦ท⁩ ⁦า⁩ ⁦ง⁩ ⁦ต⁩ ⁦อ⁩ ⁦น⁩ ⁦ใ⁩ ⁦ต⁩⁦้⁩ ⁦ข⁩ ⁦อ⁩ ⁦ง⁩ ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦เ⁩ ⁦ท⁩ ⁦ศ⁩ ⁦จ⁩⁦ี⁩ ⁦น⁩ [ ] ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩ ⁦น⁩⁦ั⁩ ⁦ก⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ศ⁩ ⁦า⁩ ⁦ส⁩ ⁦ต⁩ ⁦ร⁩⁦์⁩ ⁦บ⁩ ⁦า⁩ ⁦ง⁩ ⁦ส⁩⁦่⁩ ⁦ว⁩ ⁦น⁩ ⁦เ⁩ ⁦ส⁩ ⁦น⁩ ⁦อ⁩ ⁦ว⁩⁦่⁩ ⁦า⁩ [ ] ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩ ⁦น⁩⁦่⁩ ⁦า⁩ ⁦จ⁩ ⁦ะ⁩ ⁦ม⁩⁦ี⁩ ⁦ค⁩ ⁦ว⁩ ⁦า⁩ ⁦ม⁩ ⁦เ⁩ ⁦ช⁩⁦ื⁩⁦่⁩ ⁦อ⁩ ⁦ม⁩ ⁦โ⁩ ⁦ย⁩ ⁦ง⁩ ⁦ก⁩⁦ั⁩ ⁦บ⁩ ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦อ⁩ ⁦อ⁩ ⁦ส⁩ ⁦โ⁩ ⁦ต⁩ ⁦ร⁩ [ ] ⁦เ⁩ ⁦อ⁩ ⁦เ⁩ ⁦ช⁩⁦ี⁩ ⁦ย⁩ ⁦ต⁩⁦ิ⁩ ⁦ก⁩ [ ] ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦อ⁩ ⁦อ⁩ ⁦ส⁩ ⁦โ⁩ ⁦ต⁩ ⁦ร⁩ ⁦น⁩⁦ี⁩ ⁦เ⁩ ⁦ซ⁩⁦ี⁩ ⁦ย⁩ ⁦น⁩ [ ] ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩ ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩ ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦จ⁩⁦ี⁩ ⁦น⁩ [ ] ⁦ท⁩⁦ิ⁩ ⁦เ⁩ ⁦บ⁩ ⁦ต⁩ [0x0a]
Breaks: c c c c lc c c c lc c c c lc c c c lc c c lc c c c c lc c c lc c c c lc c c c c c lc c c lc c c c lc c c c c lc c c lc c c lc c c c c c lc c c c lc c c c lc c c lc c c lc c c c lc c lc c c lc c c c lc c lc c lc c c lc c c lc c c lc c c lc c c c c lc c c c lc c c c lc c c lc c c c c c c lc c c lc c c c lc c lc c c c c lc lc lc c lc c c c c lc c c lc c c lc c c lc c lc c c lc c c c c c lc c c lc c c lc c lc c c c c c c c c lc c c lc c c lc c c c lc c c lc c c c lc c c lc c lc c lc lc c c c lc c c c lc c c lc c lc c c c c lc c c c lc c lc c c c c lc c c c c lc c c lc c c c c lc c c c lc c lc c c c c c c c c c lc c c lc c c c c lc c c c lc c c lc c c c c c
Whitespace: x x x x x x x x x x x x x w w
Words: bs b b b bse b b be bse b b be bse b b b bse b b bse b b b be bse b b bse b b b bse b b b b b bse b b bse b b b bse b b b b bse b b bse b b bse b b b b b bse b b be bse b b b bse b b bse b b bse b b b bse b bse b b bse b b b bse b bse b bse b b bse b b bse b b bse b b bse b b b b bse b b b bse b b be bse b be bse b b b b b b bse b be bse b b b bse b bse b b b b bse bse bse b bse b b b b bse b b bse b b bse b b bse b bse b b bse b b b b b bse b be bse b b bse b bse b b b b b b b b bse b b bse b b bse b b b bse b be bse b b b bse b b bse b bse b bse bse b b b bse b b b bse b b bse b bse b b b b bse b b b bse b bse b b b be bse b b b b bse b be bse b b b b bse b b b bse b bse b b b b b b b b be bse b b bse b b b b bse b b b bse b be bse b b b be b
diff --git a/tests/breaks/nine.expected b/tests/breaks/nine.expected
index 8ffac505..4f6f95a3 100644
--- a/tests/breaks/nine.expected
+++ b/tests/breaks/nine.expected
@@ -1,4 +1,4 @@
-Text: मी [ ] का च [ ] खा ऊ [ ] श क तो , [ ] म ला [ ] ते [ ] दु ख त [ ] ना ह [0x0a] मैं [ ] काँ च [ ] खा [ ] स क ता [ ] हूँ , [ ] मु झे [ ] उ स [ ] से [ ] को ई [ ] पी डा [ ] न हीं [ ] हो त [0x0a] நா ன் [ ] க ண் ணா டி [ ] சா ப் பி டு வே ன் , [ ] அ த னா ல் [ ] எ ன க் கு [ ] ஒ ரு [ ] கே டு ம் [ ] வ ரா த [0x0a] ﻢ ﯾ ں [ ] ﮎ ﺎ ﻨ ﭼ [ ] ﮎ ھ ﺍ [ ] ﺲ ﮑ ﺗ ﺍ [ ] ہ ﻭ ں [ ] ﺍ ﻭ ﺭ [ ] ﻢ ﺟ ھ ے [ ] ﺖ ﮑ ﻠ ﯿ ﻓ [ ] ﻥ ہ ﯼ ں [ ] ہ ﻮ ﺘ ﯾ [ ] [0x0a] ﺰ ﻫ [ ] ﺶ ﻴ ﺸ ﻫ [ ] ﺥ ﻭ ړ ﻝ ې [ ] ﺶ ﻣ ، [ ] ﻪ ﻐ ﻫ [ ] ﻡ ﺍ [ ] ﻦ ﻫ [ ] ﺥ ﻭ ږ ﻮ ﻳ [0x0a]
+Text: ⁦म⁩⁦ी⁩ [ ] ⁦क⁩⁦ा⁩ ⁦च⁩ [ ] ⁦ख⁩⁦ा⁩ ⁦ऊ⁩ [ ] ⁦श⁩ ⁦क⁩ ⁦त⁩⁦ो⁩ ⁦,⁩ [ ] ⁦म⁩ ⁦ल⁩⁦ा⁩ [ ] ⁦त⁩⁦े⁩ [ ] ⁦द⁩⁦ु⁩ ⁦ख⁩ ⁦त⁩ [ ] ⁦न⁩⁦ा⁩ ⁦ह⁩ [0x0a] ⁦म⁩⁦ै⁩⁦ं⁩ [ ] ⁦क⁩⁦ा⁩⁦ँ⁩ ⁦च⁩ [ ] ⁦ख⁩⁦ा⁩ [ ] ⁦स⁩ ⁦क⁩ ⁦त⁩⁦ा⁩ [ ] ⁦ह⁩⁦ू⁩⁦ँ⁩ ⁦,⁩ [ ] ⁦म⁩⁦ु⁩ ⁦झ⁩⁦े⁩ [ ] ⁦उ⁩ ⁦स⁩ [ ] ⁦स⁩⁦े⁩ [ ] ⁦क⁩⁦ो⁩ ⁦ई⁩ [ ] ⁦प⁩⁦ी⁩ ⁦ड⁩⁦ा⁩ [ ] ⁦न⁩ ⁦ह⁩⁦ी⁩⁦ं⁩ [ ] ⁦ह⁩⁦ो⁩ ⁦त⁩ [0x0a] ⁦ந⁩⁦ா⁩ ⁦ன⁩⁦்⁩ [ ] ⁦க⁩ ⁦ண⁩⁦்⁩ ⁦ண⁩⁦ா⁩ ⁦ட⁩⁦ி⁩ [ ] ⁦ச⁩⁦ா⁩ ⁦ப⁩⁦்⁩ ⁦ப⁩⁦ி⁩ ⁦ட⁩⁦ு⁩ ⁦வ⁩⁦ே⁩ ⁦ன⁩⁦்⁩ ⁦,⁩ [ ] ⁦அ⁩ ⁦த⁩ ⁦ன⁩⁦ா⁩ ⁦ல⁩⁦்⁩ [ ] ⁦எ⁩ ⁦ன⁩ ⁦க⁩⁦்⁩ ⁦க⁩⁦ு⁩ [ ] ⁦ஒ⁩ ⁦ர⁩⁦ு⁩ [ ] ⁦க⁩⁦ே⁩ ⁦ட⁩⁦ு⁩ ⁦ம⁩⁦்⁩ [ ] ⁦வ⁩ ⁦ர⁩⁦ா⁩ ⁦த⁩ [0x0a] ⁦ﻢ⁩ ⁦ﯾ⁩ ⁦ں⁩ [ ] ⁦ﮎ⁩ ⁦ﺎ⁩ ⁦ﻨ⁩ ⁦ﭼ⁩ [ ] ⁦ﮎ⁩ ⁦ھ⁩ ⁦ﺍ⁩ [ ] ⁦ﺲ⁩ ⁦ﮑ⁩ ⁦ﺗ⁩ ⁦ﺍ⁩ [ ] ⁦ہ⁩ ⁦ﻭ⁩ ⁦ں⁩ [ ] ⁦ﺍ⁩ ⁦ﻭ⁩ ⁦ﺭ⁩ [ ] ⁦ﻢ⁩ ⁦ﺟ⁩ ⁦ھ⁩ ⁦ے⁩ [ ] ⁦ﺖ⁩ ⁦ﮑ⁩ ⁦ﻠ⁩ ⁦ﯿ⁩ ⁦ﻓ⁩ [ ] ⁦ﻥ⁩ ⁦ہ⁩ ⁦ﯼ⁩ ⁦ں⁩ [ ] ⁦ہ⁩ ⁦ﻮ⁩ ⁦ﺘ⁩ ⁦ﯾ⁩ [ ] [0x0a] ⁦ﺰ⁩ ⁦ﻫ⁩ [ ] ⁦ﺶ⁩ ⁦ﻴ⁩ ⁦ﺸ⁩ ⁦ﻫ⁩ [ ] ⁦ﺥ⁩ ⁦ﻭ⁩ ⁦ړ⁩ ⁦ﻝ⁩ ⁦ې⁩ [ ] ⁦ﺶ⁩ ⁦ﻣ⁩ ⁦،⁩ [ ] ⁦ﻪ⁩ ⁦ﻐ⁩ ⁦ﻫ⁩ [ ] ⁦ﻡ⁩ ⁦ﺍ⁩ [ ] ⁦ﻦ⁩ ⁦ﻫ⁩ [ ] ⁦ﺥ⁩ ⁦ﻭ⁩ ⁦ږ⁩ ⁦ﻮ⁩ ⁦ﻳ⁩ [0x0a]
Breaks: c c lc c c lc c c lc c c c c lc c c lc c lc c c c lc c c c c lc c c lc c lc c c c lc c c lc c c lc c c lc c lc c c lc c c lc c c lc c c c c c lc c c c c lc c c c c c c c lc c c c c lc c c c c lc c c lc c c c lc c c c c c c c lc c c c c lc c c c lc c c c c lc c c c lc c c c lc c c c c lc c c c c c lc c c c c lc c c c c c c c c lc c c c c lc c c c c c lc c c c lc c c c lc c c lc c c lc c c c c c c
Whitespace: x x x x x x x w x x x x x x x x x x x w x x x x x x x w x x x x x x x x x x w x x x x x x x w w
Words: bs be bs be bs be bs be b bs be bs be bs be bs be bs be bs be bs be bs be bs be b bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be b bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be b bs be bs be bs be bs be b bs be bs be bs be bs be b
diff --git a/tests/breaks/one.expected b/tests/breaks/one.expected
index 165e2d13..f3ab2612 100644
--- a/tests/breaks/one.expected
+++ b/tests/breaks/one.expected
@@ -1,4 +1,4 @@
-Text: a b c / d e f [ ] g h i [0xad] j k l . [ ] B l a [0x0a]
+Text: ⁦a⁩ ⁦b⁩ ⁦c⁩ ⁦/⁩ ⁦d⁩ ⁦e⁩ ⁦f⁩ [ ] ⁦g⁩ ⁦h⁩ ⁦i⁩ [0xad] ⁦j⁩ ⁦k⁩ ⁦l⁩ ⁦.⁩ [ ] ⁦B⁩ ⁦l⁩ ⁦a⁩ [0x0a]
Breaks: c c c c lc c c c lc c c c lc c c c c lc c c c c
Whitespace: x x w w
Words: bs be bs be bs be b bs be b
diff --git a/tests/breaks/seven.expected b/tests/breaks/seven.expected
index 8cd411a6..f71d9598 100644
--- a/tests/breaks/seven.expected
+++ b/tests/breaks/seven.expected
@@ -1,6 +1 @@
-Text: 나 는 [ ] 유 리 를 [ ] 먹 을 [ ] 수 [ ] 있 어 요 . [ ] 그 래 도 [ ] 아 프 지 [ ] 않 아 요 [0x0a]
-Breaks: c lc c lc lc lc c lc lc c lc c lc lc lc c c lc lc lc c lc lc lc c lc lc lc c c
-Whitespace: x x x x x x x w w
-Words: bs be bs be bs be bs be bs be b bs be bs be bs be b
-Sentences: bs e bs e b
-Graphemes: b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
+Bail out! ERROR:../tests/test-break.c:58:test_file: assertion failed (error == NULL): Failed to open file “tests/breaks/seven.break”: No such file or directory (g-file-error-quark, 4)
diff --git a/tests/breaks/six.expected b/tests/breaks/six.expected
index fba8e60d..3dc7fc27 100644
--- a/tests/breaks/six.expected
+++ b/tests/breaks/six.expected
@@ -1,6 +1 @@
-Text: मी [ ] का च [ ] खा ऊ [ ] श क तो , [ ] म ला [ ] ते [ ] दु ख त [ ] ना ह [0x0a] मैं [ ] काँ च [ ] खा [ ] स क ता [ ] हूँ , [ ] मु झे [ ] उ स [ ] से [ ] को ई [ ] पी डा [ ] न हीं [ ] हो त [0x0a] நா ன் [ ] க ண் ணா டி [ ] சா ப் பி டு வே ன் , [ ] அ த னா ல் [ ] எ ன க் கு [ ] ஒ ரு [ ] கே டு ம் [ ] வ ரா த [0x0a] ﻢ ﯾ ں [ ] ﮎ ﺎ ﻨ ﭼ [ ] ﮎ ھ ﺍ [ ] ﺲ ﮑ ﺗ ﺍ [ ] ہ ﻭ ں [ ] ﺍ ﻭ ﺭ [ ] ﻢ ﺟ ھ ے [ ] ﺖ ﮑ ﻠ ﯿ ﻓ [ ] ﻥ ہ ﯼ ں [ ] ہ ﻮ ﺘ ﯾ [ ] ۔ [0x0a] ﺰ ﻫ [ ] ﺶ ﻴ ﺸ ﻫ [ ] ﺥ ﻭ ړ ﻝ ې [ ] ﺶ ﻣ ، [ ] ﻪ ﻐ ﻫ [ ] ﻡ ﺍ [ ] ﻦ ﻫ [ ] ﺥ ﻭ ږ ﻮ ﻳ [0x0a]
-Breaks: c c lc c c lc c c lc c c c c lc c c lc c lc c c c lc c c c c lc c c lc c lc c c c lc c c lc c c lc c c lc c lc c c lc c c lc c c lc c c c c c lc c c c c lc c c c c c c c lc c c c c lc c c c c lc c c lc c c c lc c c c c c c c lc c c c c lc c c c lc c c c c lc c c c lc c c c lc c c c c lc c c c c c lc c c c c lc c c c c c c c c c lc c c c c lc c c c c c lc c c c lc c c c lc c c lc c c lc c c c c c c
-Whitespace: x x x x x x x w x x x x x x x x x x x w x x x x x x x w x x x x x x x x x x w x x x x x x x w w
-Words: bs be bs be bs be bs be b bs be bs be bs be bs be bs be bs be bs be bs be bs be b bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be b bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be bs be b b bs be bs be bs be bs be b bs be bs be bs be bs be b
-Sentences: bs e bs e bs e bs e bs e b
-Graphemes: b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
+Bail out! ERROR:../tests/test-break.c:58:test_file: assertion failed (error == NULL): Failed to open file “tests/breaks/six.break”: No such file or directory (g-file-error-quark, 4)
diff --git a/tests/breaks/ten.expected b/tests/breaks/ten.expected
index 6577c9fb..a83252da 100644
--- a/tests/breaks/ten.expected
+++ b/tests/breaks/ten.expected
@@ -1,4 +1,4 @@
-Text: i ක්[0x200d]ක [ ] a[0x200c] a் [0x0a]
+Text: ⁦i⁩ ⁦ක⁩⁦්⁩[0x200d]⁦ක⁩ [ ] ⁦a⁩[0x200c] ⁦a⁩⁦்⁩ [0x0a]
Breaks: c c c lc c c c
Whitespace: x w w
Words: bs be bs be b
diff --git a/tests/breaks/three.expected b/tests/breaks/three.expected
index 2ff60a9c..72e6fbe2 100644
--- a/tests/breaks/three.expected
+++ b/tests/breaks/three.expected
@@ -1,4 +1,4 @@
-Text: o n e [ ] t w o [0x2028] r e d [ ] b l u e[0x200d] g r e e n [0x0a]
+Text: ⁦o⁩ ⁦n⁩ ⁦e⁩ [ ] ⁦t⁩ ⁦w⁩ ⁦o⁩ [0x2028] ⁦r⁩ ⁦e⁩ ⁦d⁩ [ ] ⁦b⁩ ⁦l⁩ ⁦u⁩ ⁦e⁩[0x200d] ⁦g⁩ ⁦r⁩ ⁦e⁩ ⁦e⁩ ⁦n⁩ [0x0a]
Breaks: c c c c lc c c c Lc c c c lc c c c c c c c c c c
Whitespace: x w x w w
Words: bs be bs be bs be bs be b
diff --git a/tests/breaks/two.expected b/tests/breaks/two.expected
index c7f983ee..9bea7f7d 100644
--- a/tests/breaks/two.expected
+++ b/tests/breaks/two.expected
@@ -1,4 +1,4 @@
-Text: g o r i l · l e s [0x0a]
+Text: ⁦g⁩ ⁦o⁩ ⁦r⁩ ⁦i⁩ ⁦l⁩ ⁦·⁩ ⁦l⁩ ⁦e⁩ ⁦s⁩ [0x0a]
Breaks: c c c c c c c c c c c
Whitespace: w w
Words: bs e s be b
diff --git a/tests/meson.build b/tests/meson.build
index 841a78eb..e8b52ce8 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -19,7 +19,6 @@ test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
test_env.set('LC_ALL', 'en_US.UTF-8')
tests = [
- [ 'test-bidi' ],
[ 'test-coverage' ],
[ 'testboundaries' ],
[ 'testboundaries_ucd' ],
@@ -40,6 +39,7 @@ endif
if cairo_dep.found()
test_cflags += '-DHAVE_CAIRO'
tests += [
+ [ 'test-bidi', [ 'test-bidi.c' ], [ libpangocairo_dep ] ],
[ 'testcontext', [ 'testcontext.c' ], [ libpangocairo_dep ] ],
[ 'testiter', [ 'testiter.c' ], [ libpangocairo_dep ] ],
[ 'test-ellipsize', [ 'test-ellipsize.c' ], [ libpangocairo_dep ] ],
diff --git a/tests/test-bidi.c b/tests/test-bidi.c
index fbdcc8cb..672aa42f 100644
--- a/tests/test-bidi.c
+++ b/tests/test-bidi.c
@@ -19,7 +19,11 @@
* Boston, MA 02111-1307, USA.
*/
+#include <locale.h>
#include <pango/pango.h>
+#include <pango/pangocairo.h>
+
+static PangoContext *context;
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
@@ -154,15 +158,194 @@ test_bidi_embedding_levels (void)
}
}
+/* Some basic tests for pango_layout_move_cursor_visually:
+ * - check that we actually move the cursor in the right direction
+ * - check that we get through the line with at most n steps
+ * - check that we don't skip legitimate cursor positions
+ */
+static void
+test_move_cursor_visually (void)
+{
+ const char *tests[] = {
+ "abc😂️def",
+ "abcאבגdef",
+ "אבabcב",
+ "aאב12b",
+ };
+ PangoLayout *layout;
+ gboolean fail = FALSE;
+
+ layout = pango_layout_new (context);
+
+ for (int i = 0; i < G_N_ELEMENTS (tests); i++)
+ {
+ const char *text;
+ gsize n_chars;
+ int index;
+ int start_index;
+ gboolean trailing;
+ PangoRectangle s_pos, old_s_pos;
+ PangoRectangle w_pos, old_w_pos;
+ PangoLayoutLine *line;
+ struct {
+ int direction;
+ gboolean strong;
+ } params[] = {
+ { 1, TRUE },
+ { 1, FALSE },
+ { -1, TRUE },
+ { -1, FALSE },
+ };
+ int *strong_cursor;
+ int *weak_cursor;
+ gboolean *met_cursor;
+ const PangoLogAttr *attrs;
+ int n_attrs;
+ int j;
+ const char *p;
+
+ pango_layout_set_text (layout, tests[i], -1);
+ text = pango_layout_get_text (layout);
+ line = pango_layout_get_line_readonly (layout, 0);
+
+ n_chars = g_utf8_strlen (text, -1);
+
+ attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs);
+ strong_cursor = g_new (int, n_attrs);
+ weak_cursor = g_new (int, n_attrs);
+ met_cursor = g_new (gboolean, n_attrs);
+ for (j = 0, p = text; j < n_attrs; j++, p = g_utf8_next_char (p))
+ {
+ if (attrs[j].is_cursor_position)
+ {
+ pango_layout_get_cursor_pos (layout, p - text, &s_pos, &w_pos);
+ strong_cursor[j] = s_pos.x;
+ weak_cursor[j] = w_pos.x;
+ }
+ else
+ strong_cursor[j] = weak_cursor[j] = -1;
+ }
+
+ for (j = 0; j < G_N_ELEMENTS (params); j++)
+ {
+ gboolean ok;
+
+ if (g_test_verbose ())
+ g_print ("'%s' %s %s :\t",
+ text,
+ params[j].direction > 0 ? "->" : "<-",
+ params[j].strong ? "strong" : "weak");
+
+ if ((pango_layout_line_get_resolved_direction (line) == PANGO_DIRECTION_LTR) == (params[j].direction > 0))
+ start_index = 0;
+ else
+ start_index = strlen (text);
+
+ index = start_index;
+
+ memset (met_cursor, 0, sizeof (gboolean) * n_attrs);
+
+ pango_layout_get_cursor_pos (layout, index, &s_pos, &w_pos);
+ for (int l = 0; l < n_attrs; l++)
+ {
+ if ((params[j].strong && strong_cursor[l] == s_pos.x) ||
+ (!params[j].strong && weak_cursor[l] == w_pos.x))
+ met_cursor[l] = TRUE;
+ }
+
+ ok = TRUE;
+
+ for (int k = 0; k <= n_chars; k++)
+ {
+ old_s_pos = s_pos;
+ old_w_pos = w_pos;
+ pango_layout_move_cursor_visually (layout, params[j].strong,
+ index, 0,
+ params[j].direction,
+ &index, &trailing);
+
+ while (trailing--)
+ index = g_utf8_next_char (text + index) - text;
+
+ if (index < 0 || index > strlen (text))
+ break;
+
+ pango_layout_get_cursor_pos (layout, index, &s_pos, &w_pos);
+ for (int l = 0; l < n_attrs; l++)
+ {
+ if ((params[j].strong && strong_cursor[l] == s_pos.x) ||
+ (!params[j].strong && weak_cursor[l] == w_pos.x))
+ met_cursor[l] = TRUE;
+ }
+
+ if ((params[j].direction > 0 && params[j].strong && old_s_pos.x > s_pos.x) ||
+ (params[j].direction < 0 && params[j].strong && old_s_pos.x < s_pos.x) ||
+ (params[j].direction > 0 && !params[j].strong && old_w_pos.x > w_pos.x) ||
+ (params[j].direction < 0 && !params[j].strong && old_w_pos.x < w_pos.x))
+ {
+ if (g_test_verbose ())
+ g_print ("(wrong move)\t");
+ ok = FALSE;
+ break;
+ }
+ }
+
+ if (ok)
+ for (int l = 0; l < n_attrs; l++)
+ {
+ if (!(met_cursor[l] ||
+ (params[j].strong && strong_cursor[l] == -1) ||
+ (!params[j].strong && weak_cursor[l] == -1)))
+ {
+ if (g_test_verbose ())
+ g_print ("(missed cursor)\t");
+ ok = FALSE;
+ }
+ }
+
+ if (ok)
+ if (!(index >= strlen (text) || index <= 0))
+ {
+ if (g_test_verbose ())
+ g_print ("(got stuck)\t");
+ ok = FALSE;
+ }
+
+ if (g_test_verbose ())
+ g_print ("%s\n", ok ? "ok": "not ok");
+
+ fail = fail || !ok;
+ }
+
+ g_free (strong_cursor);
+ g_free (weak_cursor);
+ g_free (met_cursor);
+ }
+
+ g_object_unref (layout);
+
+ if (fail)
+ g_test_skip ("known to fail");
+}
+
+
int
main (int argc, char *argv[])
{
+ PangoFontMap *fontmap;
+
+ setlocale (LC_ALL, "");
+
+ fontmap = pango_cairo_font_map_get_default ();
+ context = pango_font_map_create_context (fontmap);
+
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/bidi/mirror-char", test_mirror_char);
g_test_add_func ("/bidi/type-for-unichar", test_bidi_type_for_unichar);
g_test_add_func ("/bidi/unichar-direction", test_unichar_direction);
g_test_add_func ("/bidi/embedding-levels", test_bidi_embedding_levels);
+ g_test_add_func ("/bidi/move-cursor-visually", test_move_cursor_visually);
return g_test_run ();
}
diff --git a/tests/test-break.c b/tests/test-break.c
index 66c207a5..d59971a0 100644
--- a/tests/test-break.c
+++ b/tests/test-break.c
@@ -219,7 +219,9 @@ test_file (const gchar *filename, GString *string)
!(g_unichar_type (ch) == G_UNICODE_LINE_SEPARATOR ||
g_unichar_type (ch) == G_UNICODE_PARAGRAPH_SEPARATOR))
{
+ g_string_append_unichar (string, 0x2066); // LRI
g_string_append_unichar (string, ch);
+ g_string_append_unichar (string, 0x2069); // PDI
g_string_append (s1, " ");
g_string_append (s2, " ");
g_string_append (s3, " ");