This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
io/utf8.t: Generalize test for ebcdic, better skip msg
[perl5.git] / t / uni / latin2.t
1 #!./perl -w
2
3 BEGIN {
4     chdir 't' if -d 't';
5     require './test.pl';
6     skip_all_without_dynamic_extension('Encode');
7     skip_all("no encoding pragma in EBCDIC") if $::IS_EBCDIC;
8     skip_all_without_perlio();
9 }
10
11 plan tests => 94;
12
13 no warnings 'deprecated';
14 use encoding "latin2"; # iso 8859-2
15
16 # U+00C1, \xC1, \301, LATIN CAPITAL LETTER A WITH ACUTE
17 # U+0102, \xC3, \402, LATIN CAPITAL LETTER A WITH BREVE
18 # U+00E1, \xE1, \303, LATIN SMALL LETTER A WITH ACUTE
19 # U+0103, \xE3, \403, LATIN SMALL LETTER A WITH BREVE
20
21 ok("\xC1"    =~ /\xC1/,     '\xC1 to /\xC1/');
22 ok("\x{C1}"  =~ /\x{C1}/,   '\x{C1} to /\x{C1}/');
23 ok("\xC3"    =~ /\xC3/,     '\xC3 to /\xC3/');
24 ok("\x{102}" =~ /\xC3/,     '\x{102} to /\xC3/');
25 ok("\xC3"    =~ /\x{C3}/,   '\xC3 to /\x{C3}/');
26 ok("\x{102}" =~ /\x{C3}/,   '\x{102} to /\x{C3}/');
27 ok("\xC3"    =~ /\x{102}/,  '\xC3 to /\x{102}/');
28 ok("\x{102}" =~ /\x{102}/,  '\x{102} to /\x{102}/');
29
30 ok("\xC1"    =~ /\xC1/i,    '\xC1 to /\xC1/i');
31 ok("\xE1"    =~ /\xC1/i,    '\xE1 to /\xC1/i');
32 ok("\xC1"    =~ /\xE1/i,    '\xC1 to /\xE1/i');
33 ok("\xE1"    =~ /\xE1/i,    '\xE1 to /\xE1/i');
34 ok("\x{102}" =~ /\xC3/i,    '\x{102} to /\xC3/i');
35 ok("\x{103}" =~ /\xC3/i,    '\x{103} to /\xC3/i');
36 ok("\x{102}" =~ /\xE3/i,    '\x{102} to /\xE3/i');
37 ok("\x{103}" =~ /\xE3/i,    '\x{103} to /\xE3/i');
38
39 ok("\xC1"    =~ /[\xC1]/,     '\xC1 to /[\xC1]/');
40 ok("\x{C1}"  =~ /[\x{C1}]/,   '\x{C1} to /[\x{C1}]/');
41 ok("\xC3"    =~ /[\xC3]/,     '\xC3 to /[\xC3]/');
42 ok("\x{102}" =~ /[\xC3]/,     '\x{102} to /[\xC3]/');
43 ok("\xC3"    =~ /[\x{C3}]/,   '\xC3 to /[\x{C3}]/');
44 ok("\x{102}" =~ /[\x{C3}]/,   '\x{102} to /[\x{C3}]/');
45 ok("\xC3"    =~ /[\x{102}]/,  '\xC3 to /[\x{102}]/');
46 ok("\x{102}" =~ /[\x{102}]/,  '\x{102} to /[\x{102}]/');
47
48 ok("\xC1"    =~ /[\xC1]/i,  '\xC1 to /[\xC1]/i');
49 ok("\xE1"    =~ /[\xC1]/i,  '\xE1 to /[\xC1]/i');
50 ok("\xC1"    =~ /[\xE1]/i,  '\xC1 to /[\xE1]/i');
51 ok("\xE1"    =~ /[\xE1]/i,  '\xE1 to /[\xE1]/i');
52 ok("\x{102}" =~ /[\xC3]/i,  '\x{102} to /[\xC3]/i');
53 ok("\x{103}" =~ /[\xC3]/i,  '\x{103} to /[\xC3]/i');
54 ok("\x{102}" =~ /[\xE3]/i,  '\x{102} to /[\xE3]/i');
55 ok("\x{103}" =~ /[\xE3]/i,  '\x{103} to /[\xE3]/i');
56
57 ok("\xC1"    =~ '\xC1',       '\xC1 to \'\xC1\'');
58 ok("\xC1"    =~ '\x{C1}',     '\xC1 to \'\x{C1}\'');
59 ok("\xC3"    =~ '\303',       '\xC3 to \'\303\'');
60 ok("\xC3"    =~ '\x{102}',    '\xC3 to \'\x{102}\'');
61 ok("\xC1"    =~ '[\xC1]',     '\xC1 to \'[\xC1]\'');
62 ok("\xC1"    =~ '[\x{C1}]',   '\xC1 to \'[\x{C1}]\'');
63 ok("\xC3"    =~ '[\303]',     '\xC3 to \'[\303]\'');
64 ok("\xC3"    =~ '[\x{102}]',  '\xC3 to \'[\x{102}]\'');
65
66 ok("\xC1"    =~ /Á/,     '\xC1 to /<A-acute>/');
67 ok("\xE1"    !~ /Á/,     '\xE1 to /<A-acute>/');
68 ok("\xC1"    =~ /Á/i,    '\xC1 to /<A-acute>/i');
69 ok("\xE1"    =~ /Á/i,    '\xE1 to /<A-acute>/i');
70 ok("\xC1"    =~ /[Á]/,   '\xC1 to /[<A-acute>]/');
71 ok("\xE1"    !~ /[Á]/,   '\xE1 to /[<A-acute>]/');
72 ok("\xC1"    =~ /[Á]/i,  '\xC1 to /[<A-acute>]/i');
73 ok("\xE1"    =~ /[Á]/i,  '\xE1 to /[<A-acute>]/i');
74
75 ok("\xC1\xC1"  =~ /Á\xC1/,    '\xC1\xC1 to /<A-acute>\xC1/');
76 ok("\xC1\xC1"  =~ /\xC1Á/,    '\xC1\xC1 to /\xC1<A-acute>/');
77 ok("\xC1\xC1"  =~ /Á\xC1/i,   '\xC1\xC1 to /<A-acute>\xC1/i');
78 ok("\xC1\xC1"  =~ /\xC1Á/i,   '\xC1\xC1 to /\xC1<A-acute>/i');
79 ok("\xC1\xE1"  =~ /Á\xC1/i,   '\xC1\xE1 to /<A-acute>\xC1/i');
80 ok("\xC1\xE1"  =~ /\xC1Á/i,   '\xC1\xE1 to /\xC1<A-acute>/i');
81 ok("\xE1\xE1"  =~ /Á\xC1/i,   '\xE1\xE1 to /<A-acute>\xC1/i');
82 ok("\xE1\xE1"  =~ /\xC1Á/i,   '\xE1\xE1 to /\xC1<A-acute>/i');
83
84 # \xDF is LATIN SMALL LETTER SHARP S
85
86 ok("\xDF" =~ /\xDF/,    '\xDF to /\xDF/');
87 ok("\xDF" =~ /\xDF/i,   '\xDF to /\xDF/i');
88 ok("\xDF" =~ /[\xDF]/,  '\xDF to /[\xDF]/');
89 ok("\xDF" =~ /[\xDF]/i, '\xDF to /[\xDF]/i');
90 ok("\xDF" =~ /ß/,       '\xDF to /<sharp-s>/');
91 ok("\xDF" =~ /ß/i,      '\xDF to /<sharp-s>/i');
92 ok("\xDF" =~ /[ß]/,     '\xDF to /[<sharp-s>]/');
93 ok("\xDF" =~ /[ß]/i,    '\xDF to /[<sharp-s>]/i');
94
95 ok("SS"   =~ /\xDF/i,   'SS to /\xDF/i');
96 ok("Ss"   =~ /\xDF/i,   'Ss to /\xDF/i');
97 ok("sS"   =~ /\xDF/i,   'sS to /\xDF/i');
98 ok("ss"   =~ /\xDF/i,   'ss to /\xDF/i');
99 ok("SS"   =~ /ß/i,      'SS to /<sharp-s>/i');
100 ok("Ss"   =~ /ß/i,      'Ss to /<sharp-s>/i');
101 ok("sS"   =~ /ß/i,      'sS to /<sharp-s>/i');
102 ok("ss"   =~ /ß/i,      'ss to /<sharp-s>/i');
103
104 ok("\xC3" =~ /\303/,     '\xC1 to /\303/');
105 ok("\303" =~ /\303/,     '\303 to /\303/');
106 ok("\xC3" =~ /\303/i,    '\xC1 to /\303/i');
107 ok("\xE3" =~ /\303/i,    '\xC1 to /\303/i');
108 ok("\xC3" =~ /[\303]/,   '\xC1 to /[\303]/');
109 ok("\303" =~ /[\303]/,   '\303 to /[\303]/');
110 ok("\xC3" =~ /[\303]/i,  '\xC1 to /[\303]/i');
111 ok("\xE3" =~ /[\303]/i,  '\xC1 to /[\303]/i');
112
113 ok("\xC3" =~ /\402/,     '\xC1 to /\402/');
114 ok("\402" =~ /\402/,     '\402 to /\402/');
115 ok("\xC3" =~ /\402/i,    '\xC1 to /\402/i');
116 ok("\xE3" =~ /\402/i,    '\xC1 to /\402/i');
117 ok("\xC3" =~ /[\402]/,   '\xC1 to /[\402]/');
118 ok("\402" =~ /[\402]/,   '\402 to /[\402]/');
119 ok("\xC3" =~ /[\402]/i,  '\xC1 to /[\402]/i');
120 ok("\xE3" =~ /[\402]/i,  '\xC1 to /[\402]/i');
121
122 {
123     my $re = '(?i:\xC1)';
124
125     ok("\xC1" =~ $re, '\xC1 to (?i:\xC1)');
126     ok("\xE1" =~ $re, '\xE1 to (?i:\xC1)');
127
128     utf8::downgrade($re);
129
130     ok("\xC1" =~ $re, '\xC1 to (?i:\xC1) down');
131     ok("\xE1" =~ $re, '\xE1 to (?i:\xC1) down');
132
133     utf8::upgrade($re);
134
135     ok("\xC1" =~ $re, '\xC1 to (?i:\xC1) up');
136     ok("\xE1" =~ $re, '\xE1 to (?i:\xC1) up');
137 }
138