Commit | Line | Data |
---|---|---|
034602eb KW |
1 | BEGIN { |
2 | chdir 't' if -d 't'; | |
3 | require './test.pl'; | |
4 | set_up_inc('../lib'); | |
5 | } | |
6 | ||
7 | use strict; | |
8 | use warnings; | |
9 | ||
10 | $|=1; | |
11 | ||
12 | # The Script_Extension property has only recently become reasonably stable, so | |
13 | # later Unicode releases may change things. Some of these tests were | |
14 | # designed to provide more code covereage in regexec.c, so changes in it or | |
15 | # later Standards could cause them to not test what they originally were aimed | |
16 | # to do. | |
17 | ||
18 | no warnings "experimental::script_run"; | |
19 | ||
526c4163 KW |
20 | # Since there's so few tests currently, we can afford to try each syntax on |
21 | # all of them | |
3337229c | 22 | foreach my $type ('script_run', 'sr', 'atomic_script_run', 'asr') { |
526c4163 KW |
23 | my $script_run; |
24 | eval '$script_run = qr/ ^ (*$type: .* ) $ /x;'; | |
034602eb | 25 | |
e54417e0 KW |
26 | unlike("\N{CYRILLIC SMALL LETTER ER}\N{CYRILLIC SMALL LETTER A}\N{CYRILLIC SMALL LETTER U}}\N{CYRILLIC SMALL LETTER ER}\N{CYRILLIC SMALL LETTER A}l", $script_run, "Cyrillic 'paypal' with a Latin 'l' is not a script run"); |
27 | unlike("A\N{GREEK CAPITAL LETTER GAMMA}", $script_run, "Latin followed by Greek isn't a script run"); | |
034602eb | 28 | |
e54417e0 KW |
29 | like("\N{CYRILLIC THOUSANDS SIGN}\N{COMBINING CYRILLIC TITLO}", $script_run, "Cyrillic followed by Permic-Arabic is Arabic"); |
30 | like("\N{OLD PERMIC LETTER AN}\N{COMBINING CYRILLIC TITLO}", $script_run, "Permic followed by Permic-Arabic is Permic"); | |
31 | unlike("\N{GLAGOLITIC CAPITAL LETTER AZU}\N{COMBINING CYRILLIC TITLO}", $script_run, "Glagolithic followed by Permic-Arabic isn't a script run"); | |
034602eb | 32 | |
e54417e0 KW |
33 | like("\N{CYRILLIC THOUSANDS SIGN}\N{COMBINING CYRILLIC PALATALIZATION}", $script_run, "Cyrillic followed by Glagolithic-Arabic is Arabic"); |
34 | like("\N{GLAGOLITIC CAPITAL LETTER AZU}\N{COMBINING CYRILLIC PALATALIZATION}", $script_run, "Glagolithic followed by Glagolithic-Arabic is Glagolithic"); | |
35 | unlike("\N{OLD PERMIC LETTER AN}\N{COMBINING CYRILLIC PALATALIZATION}", $script_run, "Permic followed by Glagolithic-Arabic isn't a script run"); | |
034602eb | 36 | |
e54417e0 KW |
37 | like("\N{ARABIC-INDIC DIGIT ZERO}\N{ARABIC-INDIC DIGIT ONE}\N{ARABIC-INDIC DIGIT TWO}\N{ARABIC-INDIC DIGIT THREE}\N{ARABIC COMMA}\N{ARABIC-INDIC DIGIT FOUR}\N{THAANA LETTER HAA}", $script_run, "Arabic-Thaana chars followed by Thaana is Thaana"); |
38 | unlike("\N{ARABIC-INDIC DIGIT ZERO}\N{ARABIC-INDIC DIGIT ONE}A", $script_run, "Arabic-Thaana chars followed by Latin isn't a script run"); | |
39 | like("\N{ARABIC-INDIC DIGIT ZERO}\N{ARABIC-INDIC DIGIT ONE}\N{ARABIC-INDIC DIGIT TWO}\N{ARABIC-INDIC DIGIT THREE}\N{ARABIC COMMA}\N{ARABIC-INDIC DIGIT FOUR}\N{ARABIC NUMBER SIGN}", $script_run, "Arabic-Thaana chars followed by Arabic is Arabic"); | |
40 | unlike("\N{ARABIC-INDIC DIGIT ZERO}\N{ARABIC-INDIC DIGIT ONE}\N{ARABIC-INDIC DIGIT TWO}\N{ARABIC-INDIC DIGIT THREE}\N{EXTENDED ARABIC-INDIC DIGIT NINE}", $script_run, "Arabic-Thaana digits followed by an Arabic digit from a different sequence isn't a script run"); | |
41 | like("\N{ARABIC-INDIC DIGIT ZERO}\N{ARABIC-INDIC DIGIT ONE}\N{ARABIC-INDIC DIGIT TWO}\N{ARABIC-INDIC DIGIT THREE}\N{THAANA LETTER HAA}", $script_run, "Arabic-Thaana digits followed by a Thaana leter is a script run"); | |
034602eb | 42 | |
e54417e0 KW |
43 | # The next tests are at a hard-coded boundary in regexec.c at the time of this |
44 | # writing (U+02B9/02BA). | |
45 | like("abc\N{MODIFIER LETTER SMALL Y}", $script_run, "All Latin is a script run"); | |
46 | like("abc\N{MODIFIER LETTER PRIME}", $script_run, "Latin then Common is a script run"); | |
47 | like(":a", $script_run, "Common then Latin is a script run"); | |
48 | like("-\N{SINHALA LETTER RAYANNA}", $script_run, "Common then Sinhala (which has its own 0) is a script run"); | |
81eabee7 | 49 | |
e54417e0 KW |
50 | like("\N{HEBREW LETTER ALEF}\N{HEBREW LETTER TAV}\N{MODIFIER LETTER PRIME}", $script_run, "Hebrew then Common is a script run"); |
51 | unlike("\N{HEBREW LETTER ALEF}\N{HEBREW LETTER TAV}\N{MODIFIER LETTER SMALL Y}", $script_run, "Hebrew then Latin isn't a script run"); | |
52 | like("9876543210\N{DESERET SMALL LETTER WU}", $script_run, "0-9 are the digits for Deseret"); | |
53 | like("\N{DESERET SMALL LETTER WU}9876543210", $script_run, "Also when they aren't in the initial position"); | |
54 | unlike("\N{DESERET SMALL LETTER WU}\N{FULLWIDTH DIGIT FIVE}", $script_run, "Fullwidth digits aren't the digits for Deseret"); | |
55 | unlike("\N{FULLWIDTH DIGIT SIX}\N{DESERET SMALL LETTER LONG I}", $script_run, "... likewise if the digits come first"); | |
034602eb | 56 | |
e54417e0 KW |
57 | like("1234567890\N{ARABIC LETTER ALEF}", $script_run, "[0-9] work for Arabic"); |
58 | unlike("1234567890\N{ARABIC LETTER ALEF}\N{ARABIC-INDIC DIGIT FOUR}\N{ARABIC-INDIC DIGIT FIVE}", $script_run, "... but not in combination with real ARABIC digits"); | |
59 | unlike("\N{ARABIC LETTER ALEF}\N{ARABIC-INDIC DIGIT SIX}\N{ARABIC-INDIC DIGIT SEVEN}1", $script_run, "... nor when the ARABIC digits come before them"); | |
034602eb | 60 | |
e54417e0 KW |
61 | # This exercises the case where the script zero but not the script is |
62 | # ambiguous until a non-ambiguous digit is found. | |
63 | like("\N{ARABIC LETTER ALEF}\N{EXTENDED ARABIC-INDIC DIGIT EIGHT}", $script_run, "ARABIC with a Shia digit is a script run"); | |
034602eb | 64 | |
e54417e0 KW |
65 | like("\N{U+03A2}", $script_run, "A single unassigned code point is a script run"); |
66 | unlike("\N{U+03A2}\N{U+03A2}", $script_run, "But not more than one"); | |
67 | unlike("A\N{U+03A2}", $script_run, "... and not in combination with an assigned one"); | |
68 | unlike("\N{U+03A2}A", $script_run, "... in either order"); | |
69 | unlike("\N{U+03A2}0", $script_run, "... nor with a digit following"); | |
034602eb | 70 | |
e54417e0 KW |
71 | like("A\N{COMBINING GRAVE ACCENT}", $script_run, "An inherited script matches others"); |
72 | like("\N{COMBINING GRAVE ACCENT}A", $script_run, "... even if first in the sequence"); | |
034602eb | 73 | |
e54417e0 | 74 | like("\N{COMBINING TILDE}\N{COMBINING GRAVE ACCENT}", $script_run, "A script containing only inherited characters matches"); |
b548543c | 75 | |
e54417e0 | 76 | like("\N{DEVANAGARI DOUBLE DANDA}\N{DEVANAGARI DANDA}\N{DEVANAGARI STRESS SIGN UDATTA}\N{DEVANAGARI STRESS SIGN ANUDATTA}\N{NORTH INDIC FRACTION ONE QUARTER}\N{NORTH INDIC QUANTITY MARK}", $script_run, "A bunch of narrowing down of multiple possible scripts"); |
034602eb | 77 | |
e54417e0 KW |
78 | unlike("\N{JAVANESE PANGRANGKEP}\N{GEORGIAN PARAGRAPH SEPARATOR}", $script_run, "Two code points each in multiple scripts that don't intersect aren't a script run"); |
79 | like("\N{DEVANAGARI SIGN CANDRABINDU VIRAMA}\N{VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA}", $script_run, "Two code points each in multiple scripts that 't intersect singly are a script run"); | |
034602eb | 80 | |
e54417e0 | 81 | like("", $script_run, "An empty string is a script run"); |
ad85be64 | 82 | |
e54417e0 | 83 | use utf8; |
034602eb | 84 | |
e54417e0 KW |
85 | # From UTS 39 |
86 | like("写真だけの結婚式", $script_run, "Mixed Hiragana and Han"); | |
7da8e27b KW |
87 | |
88 | unlike "\N{THAI DIGIT FIVE}1", $script_run, "Thai digit followed by '1'"; | |
89 | unlike "1\N{THAI DIGIT FIVE}", $script_run, "'1' followed by Thai digit "; | |
90 | unlike "\N{BENGALI DIGIT ZERO}\N{CHAKMA DIGIT SEVEN}", $script_run, | |
91 | "Two digits in same extended script but from different sets of 10"; | |
526c4163 | 92 | } |
034602eb | 93 | |
8638266f KW |
94 | # Until fixed, this was skipping the '[' |
95 | unlike("abc]c", qr/^ (*sr:a(*sr:[bc]*)c) $/x, "Doesn't skip parts of exact matches"); | |
96 | ||
3337229c KW |
97 | like("abc", qr/(*asr:a[bc]*c)/, "Outer asr works on a run"); |
98 | unlike("abc", qr/(*asr:a(*asr:[bc]*)c)/, "Nested asr works to exclude some things"); | |
99 | ||
034602eb | 100 | done_testing(); |