xref: /aosp_15_r20/external/fonttools/Tests/unicodedata_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1*e1fe3e4aSElliott Hughesfrom fontTools import unicodedata
2*e1fe3e4aSElliott Hughes
3*e1fe3e4aSElliott Hughesimport pytest
4*e1fe3e4aSElliott Hughes
5*e1fe3e4aSElliott Hughes
6*e1fe3e4aSElliott Hughesdef test_script():
7*e1fe3e4aSElliott Hughes    assert unicodedata.script("a") == "Latn"
8*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0)) == "Zyyy"
9*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0378)) == "Zzzz"
10*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10FFFF)) == "Zzzz"
11*e1fe3e4aSElliott Hughes
12*e1fe3e4aSElliott Hughes    # these were randomly sampled, one character per script
13*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1E918)) == "Adlm"
14*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1170D)) == "Ahom"
15*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x145A0)) == "Hluw"
16*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0607)) == "Arab"
17*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x056C)) == "Armn"
18*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10B27)) == "Avst"
19*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1B41)) == "Bali"
20*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x168AD)) == "Bamu"
21*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x16ADD)) == "Bass"
22*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1BE5)) == "Batk"
23*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x09F3)) == "Beng"
24*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11C5B)) == "Bhks"
25*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x3126)) == "Bopo"
26*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1103B)) == "Brah"
27*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x2849)) == "Brai"
28*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1A0A)) == "Bugi"
29*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x174E)) == "Buhd"
30*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x18EE)) == "Cans"
31*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x102B7)) == "Cari"
32*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1053D)) == "Aghb"
33*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11123)) == "Cakm"
34*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xAA1F)) == "Cham"
35*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xAB95)) == "Cher"
36*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1F0C7)) == "Zyyy"
37*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x2C85)) == "Copt"
38*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x12014)) == "Xsux"
39*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1082E)) == "Cprt"
40*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA686)) == "Cyrl"
41*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10417)) == "Dsrt"
42*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x093E)) == "Deva"
43*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1BC4B)) == "Dupl"
44*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1310C)) == "Egyp"
45*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1051C)) == "Elba"
46*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x2DA6)) == "Ethi"
47*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10AD)) == "Geor"
48*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x2C52)) == "Glag"
49*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10343)) == "Goth"
50*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11371)) == "Gran"
51*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x03D0)) == "Grek"
52*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0AAA)) == "Gujr"
53*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0A4C)) == "Guru"
54*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x23C9F)) == "Hani"
55*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xC259)) == "Hang"
56*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1722)) == "Hano"
57*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x108F5)) == "Hatr"
58*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x05C2)) == "Hebr"
59*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1B072)) == "Hira"
60*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10847)) == "Armi"
61*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x033A)) == "Zinh"
62*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10B66)) == "Phli"
63*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10B4B)) == "Prti"
64*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA98A)) == "Java"
65*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x110B2)) == "Kthi"
66*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0CC6)) == "Knda"
67*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x3337)) == "Kana"
68*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA915)) == "Kali"
69*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10A2E)) == "Khar"
70*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x17AA)) == "Khmr"
71*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11225)) == "Khoj"
72*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x112B6)) == "Sind"
73*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0ED7)) == "Laoo"
74*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xAB3C)) == "Latn"
75*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1C48)) == "Lepc"
76*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1923)) == "Limb"
77*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1071D)) == "Lina"
78*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x100EC)) == "Linb"
79*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA4E9)) == "Lisu"
80*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10284)) == "Lyci"
81*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10926)) == "Lydi"
82*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11161)) == "Mahj"
83*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0D56)) == "Mlym"
84*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0856)) == "Mand"
85*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10AF0)) == "Mani"
86*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11CB0)) == "Marc"
87*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11D28)) == "Gonm"
88*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xABDD)) == "Mtei"
89*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1E897)) == "Mend"
90*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x109B0)) == "Merc"
91*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10993)) == "Mero"
92*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x16F5D)) == "Plrd"
93*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1160B)) == "Modi"
94*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x18A8)) == "Mong"
95*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x16A48)) == "Mroo"
96*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1128C)) == "Mult"
97*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x105B)) == "Mymr"
98*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x108AF)) == "Nbat"
99*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x19B3)) == "Talu"
100*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1143D)) == "Newa"
101*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x07F4)) == "Nkoo"
102*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1B192)) == "Nshu"
103*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x169C)) == "Ogam"
104*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1C56)) == "Olck"
105*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10CE9)) == "Hung"
106*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10316)) == "Ital"
107*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10A93)) == "Narb"
108*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1035A)) == "Perm"
109*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x103D5)) == "Xpeo"
110*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10A65)) == "Sarb"
111*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10C09)) == "Orkh"
112*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0B60)) == "Orya"
113*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x104CF)) == "Osge"
114*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x104A8)) == "Osma"
115*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x16B12)) == "Hmng"
116*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10879)) == "Palm"
117*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11AF1)) == "Pauc"
118*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA869)) == "Phag"
119*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10909)) == "Phnx"
120*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x10B81)) == "Phlp"
121*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA941)) == "Rjng"
122*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x16C3)) == "Runr"
123*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0814)) == "Samr"
124*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA88C)) == "Saur"
125*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x111C8)) == "Shrd"
126*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1045F)) == "Shaw"
127*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x115AD)) == "Sidd"
128*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1D8C0)) == "Sgnw"
129*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0DB9)) == "Sinh"
130*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x110F9)) == "Sora"
131*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11A60)) == "Soyo"
132*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1B94)) == "Sund"
133*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA81F)) == "Sylo"
134*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0740)) == "Syrc"
135*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1714)) == "Tglg"
136*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1761)) == "Tagb"
137*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1965)) == "Tale"
138*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1A32)) == "Lana"
139*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xAA86)) == "Tavt"
140*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x116A5)) == "Takr"
141*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0B8E)) == "Taml"
142*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1754D)) == "Tang"
143*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0C40)) == "Telu"
144*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x07A4)) == "Thaa"
145*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0E42)) == "Thai"
146*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x0F09)) == "Tibt"
147*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x2D3A)) == "Tfng"
148*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x114B0)) == "Tirh"
149*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x1038B)) == "Ugar"
150*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA585)) == "Vaii"
151*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x118CF)) == "Wara"
152*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0xA066)) == "Yiii"
153*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11A31)) == "Zanb"
154*e1fe3e4aSElliott Hughes    assert unicodedata.script(chr(0x11F00)) == "Kawi"
155*e1fe3e4aSElliott Hughes
156*e1fe3e4aSElliott Hughes
157*e1fe3e4aSElliott Hughesdef test_script_extension():
158*e1fe3e4aSElliott Hughes    assert unicodedata.script_extension("a") == {"Latn"}
159*e1fe3e4aSElliott Hughes    assert unicodedata.script_extension(chr(0)) == {"Zyyy"}
160*e1fe3e4aSElliott Hughes    assert unicodedata.script_extension(chr(0x0378)) == {"Zzzz"}
161*e1fe3e4aSElliott Hughes    assert unicodedata.script_extension(chr(0x10FFFF)) == {"Zzzz"}
162*e1fe3e4aSElliott Hughes
163*e1fe3e4aSElliott Hughes    assert unicodedata.script_extension("\u0660") == {"Arab", "Thaa", "Yezi"}
164*e1fe3e4aSElliott Hughes    assert unicodedata.script_extension("\u0964") == {
165*e1fe3e4aSElliott Hughes        "Beng",
166*e1fe3e4aSElliott Hughes        "Deva",
167*e1fe3e4aSElliott Hughes        "Dogr",
168*e1fe3e4aSElliott Hughes        "Gong",
169*e1fe3e4aSElliott Hughes        "Gonm",
170*e1fe3e4aSElliott Hughes        "Gran",
171*e1fe3e4aSElliott Hughes        "Gujr",
172*e1fe3e4aSElliott Hughes        "Guru",
173*e1fe3e4aSElliott Hughes        "Knda",
174*e1fe3e4aSElliott Hughes        "Mahj",
175*e1fe3e4aSElliott Hughes        "Mlym",
176*e1fe3e4aSElliott Hughes        "Nand",
177*e1fe3e4aSElliott Hughes        "Orya",
178*e1fe3e4aSElliott Hughes        "Sind",
179*e1fe3e4aSElliott Hughes        "Sinh",
180*e1fe3e4aSElliott Hughes        "Sylo",
181*e1fe3e4aSElliott Hughes        "Takr",
182*e1fe3e4aSElliott Hughes        "Taml",
183*e1fe3e4aSElliott Hughes        "Telu",
184*e1fe3e4aSElliott Hughes        "Tirh",
185*e1fe3e4aSElliott Hughes    }
186*e1fe3e4aSElliott Hughes
187*e1fe3e4aSElliott Hughes
188*e1fe3e4aSElliott Hughesdef test_script_name():
189*e1fe3e4aSElliott Hughes    assert unicodedata.script_name("Latn") == "Latin"
190*e1fe3e4aSElliott Hughes    assert unicodedata.script_name("Zyyy") == "Common"
191*e1fe3e4aSElliott Hughes    assert unicodedata.script_name("Zzzz") == "Unknown"
192*e1fe3e4aSElliott Hughes    # underscores in long names are replaced by spaces
193*e1fe3e4aSElliott Hughes    assert unicodedata.script_name("Egyp") == "Egyptian Hieroglyphs"
194*e1fe3e4aSElliott Hughes
195*e1fe3e4aSElliott Hughes    with pytest.raises(KeyError):
196*e1fe3e4aSElliott Hughes        unicodedata.script_name("QQQQ")
197*e1fe3e4aSElliott Hughes    assert unicodedata.script_name("QQQQ", default="Unknown")
198*e1fe3e4aSElliott Hughes
199*e1fe3e4aSElliott Hughes
200*e1fe3e4aSElliott Hughesdef test_script_code():
201*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("Latin") == "Latn"
202*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("Common") == "Zyyy"
203*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("Unknown") == "Zzzz"
204*e1fe3e4aSElliott Hughes    # case, whitespace, underscores and hyphens are ignored
205*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("Egyptian Hieroglyphs") == "Egyp"
206*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("Egyptian_Hieroglyphs") == "Egyp"
207*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("egyptianhieroglyphs") == "Egyp"
208*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("Egyptian-Hieroglyphs") == "Egyp"
209*e1fe3e4aSElliott Hughes
210*e1fe3e4aSElliott Hughes    with pytest.raises(KeyError):
211*e1fe3e4aSElliott Hughes        unicodedata.script_code("Does not exist")
212*e1fe3e4aSElliott Hughes    assert unicodedata.script_code("Does not exist", default="Zzzz") == "Zzzz"
213*e1fe3e4aSElliott Hughes
214*e1fe3e4aSElliott Hughes
215*e1fe3e4aSElliott Hughesdef test_block():
216*e1fe3e4aSElliott Hughes    assert unicodedata.block("\x00") == "Basic Latin"
217*e1fe3e4aSElliott Hughes    assert unicodedata.block("\x7F") == "Basic Latin"
218*e1fe3e4aSElliott Hughes    assert unicodedata.block("\x80") == "Latin-1 Supplement"
219*e1fe3e4aSElliott Hughes    assert unicodedata.block("\u1c90") == "Georgian Extended"
220*e1fe3e4aSElliott Hughes    assert unicodedata.block("\u0870") == "Arabic Extended-B"
221*e1fe3e4aSElliott Hughes    assert unicodedata.block("\U00011B00") == "Devanagari Extended-A"
222*e1fe3e4aSElliott Hughes
223*e1fe3e4aSElliott Hughes
224*e1fe3e4aSElliott Hughesdef test_ot_tags_from_script():
225*e1fe3e4aSElliott Hughes    # simple
226*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Latn") == ["latn"]
227*e1fe3e4aSElliott Hughes    # script mapped to multiple new and old script tags
228*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Deva") == ["dev2", "deva"]
229*e1fe3e4aSElliott Hughes    # exceptions
230*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Hira") == ["kana"]
231*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Zmth") == ["math"]
232*e1fe3e4aSElliott Hughes    # special script codes map to DFLT
233*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Zinh") == ["DFLT"]
234*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Zyyy") == ["DFLT"]
235*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Zzzz") == ["DFLT"]
236*e1fe3e4aSElliott Hughes    # this is invalid or unknown
237*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tags_from_script("Aaaa") == ["DFLT"]
238*e1fe3e4aSElliott Hughes
239*e1fe3e4aSElliott Hughes
240*e1fe3e4aSElliott Hughesdef test_ot_tag_to_script():
241*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("latn") == "Latn"
242*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("kana") == "Kana"
243*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("DFLT") == None
244*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("aaaa") == None
245*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("beng") == "Beng"
246*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("bng2") == "Beng"
247*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("dev2") == "Deva"
248*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("gjr2") == "Gujr"
249*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("yi  ") == "Yiii"
250*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("nko ") == "Nkoo"
251*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("vai ") == "Vaii"
252*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("lao ") == "Laoo"
253*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("yi") == "Yiii"
254*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("math") == "Zmth"
255*e1fe3e4aSElliott Hughes    # both 'hang' and 'jamo' tags map to the Hangul script
256*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("hang") == "Hang"
257*e1fe3e4aSElliott Hughes    assert unicodedata.ot_tag_to_script("jamo") == "Hang"
258*e1fe3e4aSElliott Hughes
259*e1fe3e4aSElliott Hughes    for invalid_value in ("", " ", "z zz", "zzzzz"):
260*e1fe3e4aSElliott Hughes        with pytest.raises(ValueError, match="invalid OpenType tag"):
261*e1fe3e4aSElliott Hughes            unicodedata.ot_tag_to_script(invalid_value)
262*e1fe3e4aSElliott Hughes
263*e1fe3e4aSElliott Hughes
264*e1fe3e4aSElliott Hughesdef test_script_horizontal_direction():
265*e1fe3e4aSElliott Hughes    assert unicodedata.script_horizontal_direction("Latn") == "LTR"
266*e1fe3e4aSElliott Hughes    assert unicodedata.script_horizontal_direction("Arab") == "RTL"
267*e1fe3e4aSElliott Hughes    assert unicodedata.script_horizontal_direction("Thaa") == "RTL"
268*e1fe3e4aSElliott Hughes    assert unicodedata.script_horizontal_direction("Ougr") == "RTL"
269*e1fe3e4aSElliott Hughes
270*e1fe3e4aSElliott Hughes    with pytest.raises(KeyError):
271*e1fe3e4aSElliott Hughes        unicodedata.script_horizontal_direction("Azzz")
272*e1fe3e4aSElliott Hughes    assert unicodedata.script_horizontal_direction("Azzz", default="LTR") == "LTR"
273*e1fe3e4aSElliott Hughes
274*e1fe3e4aSElliott Hughes
275*e1fe3e4aSElliott Hughesif __name__ == "__main__":
276*e1fe3e4aSElliott Hughes    import sys
277*e1fe3e4aSElliott Hughes
278*e1fe3e4aSElliott Hughes    sys.exit(pytest.main(sys.argv))
279