1d0bef798e4f5bd108250eadf68338ebcdbdd992
[p5sagit/p5-mst-13.2.git] / t / pragma / utf8.t
1 #!./perl 
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6     $ENV{PERL5LIB} = '../lib';
7     if ( ord("\t") != 9 ) { # skip on ebcdic platforms
8         print "1..0 # Skip utf8 tests on ebcdic platform.\n";
9         exit;
10     }
11 }
12
13 print "1..66\n";
14
15 my $test = 1;
16
17 sub ok {
18     my ($got,$expect) = @_;
19     print "# expected [$expect], got [$got]\nnot " if $got ne $expect;
20     print "ok $test\n";
21 }
22
23 sub ok_bytes {
24     use bytes;
25     my ($got,$expect) = @_;
26     print "# expected [$expect], got [$got]\nnot " if $got ne $expect;
27     print "ok $test\n";
28 }
29
30
31 {
32     use utf8;
33     $_ = ">\x{263A}<"; 
34     s/([\x{80}-\x{10ffff}])/"&#".ord($1).";"/eg; 
35     ok $_, '>&#9786;<';
36     $test++;                            # 1
37
38     $_ = ">\x{263A}<"; 
39     my $rx = "\x{80}-\x{10ffff}";
40     s/([$rx])/"&#".ord($1).";"/eg; 
41     ok $_, '>&#9786;<';
42     $test++;                            # 2
43
44     $_ = ">\x{263A}<"; 
45     my $rx = "\\x{80}-\\x{10ffff}";
46     s/([$rx])/"&#".ord($1).";"/eg; 
47     ok $_, '>&#9786;<';
48     $test++;                            # 3
49
50     $_ = "alpha,numeric"; 
51     m/([[:alpha:]]+)/; 
52     ok $1, 'alpha';
53     $test++;                            # 4
54
55     $_ = "alphaNUMERICstring";
56     m/([[:^lower:]]+)/; 
57     ok $1, 'NUMERIC';
58     $test++;                            # 5
59
60     $_ = "alphaNUMERICstring";
61     m/(\p{Ll}+)/; 
62     ok $1, 'alpha';
63     $test++;                            # 6
64
65     $_ = "alphaNUMERICstring"; 
66     m/(\p{Lu}+)/; 
67     ok $1, 'NUMERIC';
68     $test++;                            # 7
69
70     $_ = "alpha,numeric"; 
71     m/([\p{IsAlpha}]+)/; 
72     ok $1, 'alpha';
73     $test++;                            # 8
74
75     $_ = "alphaNUMERICstring";
76     m/([^\p{IsLower}]+)/; 
77     ok $1, 'NUMERIC';
78     $test++;                            # 9
79
80     $_ = "alpha123numeric456"; 
81     m/([\p{IsDigit}]+)/; 
82     ok $1, '123';
83     $test++;                            # 10
84
85     $_ = "alpha123numeric456"; 
86     m/([^\p{IsDigit}]+)/; 
87     ok $1, 'alpha';
88     $test++;                            # 11
89
90     $_ = ",123alpha,456numeric"; 
91     m/([\p{IsAlnum}]+)/; 
92     ok $1, '123alpha';
93     $test++;                            # 12
94 }
95 {
96     use utf8;
97
98     $_ = "\x{263A}>\x{263A}\x{263A}"; 
99
100     ok length, 4;
101     $test++;                            # 13
102
103     ok length((m/>(.)/)[0]), 1;
104     $test++;                            # 14
105
106     ok length($&), 2;
107     $test++;                            # 15
108
109     ok length($'), 1;
110     $test++;                            # 16
111
112     ok length($`), 1;
113     $test++;                            # 17
114
115     ok length($1), 1;
116     $test++;                            # 18
117
118     ok length($tmp=$&), 2;
119     $test++;                            # 19
120
121     ok length($tmp=$'), 1;
122     $test++;                            # 20
123
124     ok length($tmp=$`), 1;
125     $test++;                            # 21
126
127     ok length($tmp=$1), 1;
128     $test++;                            # 22
129
130     {
131         use bytes;
132
133         my $tmp = $&;
134         ok $tmp, pack("C*", ord(">"), 0342, 0230, 0272);
135         $test++;                                # 23
136
137         $tmp = $';
138         ok $tmp, pack("C*", 0342, 0230, 0272);
139         $test++;                                # 24
140
141         $tmp = $`;
142         ok $tmp, pack("C*", 0342, 0230, 0272);
143         $test++;                                # 25
144
145         $tmp = $1;
146         ok $tmp, pack("C*", 0342, 0230, 0272);
147         $test++;                                # 26
148     }
149
150     ok_bytes $&, pack("C*", ord(">"), 0342, 0230, 0272);
151     $test++;                            # 27
152
153     ok_bytes $', pack("C*", 0342, 0230, 0272);
154     $test++;                            # 28
155
156     ok_bytes $`, pack("C*", 0342, 0230, 0272);
157     $test++;                            # 29
158
159     ok_bytes $1, pack("C*", 0342, 0230, 0272);
160     $test++;                            # 30
161
162     {
163         use bytes;
164         no utf8;
165
166         ok length, 10;
167         $test++;                                # 31
168
169         ok length((m/>(.)/)[0]), 1;
170         $test++;                                # 32
171
172         ok length($&), 2;
173         $test++;                                # 33
174
175         ok length($'), 5;
176         $test++;                                # 34
177
178         ok length($`), 3;
179         $test++;                                # 35
180
181         ok length($1), 1;
182         $test++;                                # 36
183
184         ok $&, pack("C*", ord(">"), 0342);
185         $test++;                                # 37
186
187         ok $', pack("C*", 0230, 0272, 0342, 0230, 0272);
188         $test++;                                # 38
189
190         ok $`, pack("C*", 0342, 0230, 0272);
191         $test++;                                # 39
192
193         ok $1, pack("C*", 0342);
194         $test++;                                # 40
195
196     }
197
198
199     {
200         no utf8;
201         $_="\342\230\272>\342\230\272\342\230\272";
202     }
203
204     ok length, 10;
205     $test++;                            # 41
206
207     ok length((m/>(.)/)[0]), 1;
208     $test++;                            # 42
209
210     ok length($&), 2;
211     $test++;                            # 43
212
213     ok length($'), 1;
214     $test++;                            # 44
215
216     ok length($`), 1;
217     $test++;                            # 45
218
219     ok length($1), 1;
220     $test++;                            # 46
221
222     ok length($tmp=$&), 2;
223     $test++;                            # 47
224
225     ok length($tmp=$'), 1;
226     $test++;                            # 48
227
228     ok length($tmp=$`), 1;
229     $test++;                            # 49
230
231     ok length($tmp=$1), 1;
232     $test++;                            # 50
233
234     {
235         use bytes;
236
237         my $tmp = $&;
238         ok $tmp, pack("C*", ord(">"), 0342, 0230, 0272);
239         $test++;                                # 51
240
241         $tmp = $';
242         ok $tmp, pack("C*", 0342, 0230, 0272);
243         $test++;                                # 52
244
245         $tmp = $`;
246         ok $tmp, pack("C*", 0342, 0230, 0272);
247         $test++;                                # 53
248
249         $tmp = $1;
250         ok $tmp, pack("C*", 0342, 0230, 0272);
251         $test++;                                # 54
252     }
253     {
254         use bytes;
255         no utf8;
256
257         ok length, 10;
258         $test++;                                # 55
259
260         ok length((m/>(.)/)[0]), 1;
261         $test++;                                # 56
262
263         ok length($&), 2;
264         $test++;                                # 57
265
266         ok length($'), 5;
267         $test++;                                # 58
268
269         ok length($`), 3;
270         $test++;                                # 59
271
272         ok length($1), 1;
273         $test++;                                # 60
274
275         ok $&, pack("C*", ord(">"), 0342);
276         $test++;                                # 61
277
278         ok $', pack("C*", 0230, 0272, 0342, 0230, 0272);
279         $test++;                                # 62
280
281         ok $`, pack("C*", 0342, 0230, 0272);
282         $test++;                                # 63
283
284         ok $1, pack("C*", 0342);
285         $test++;                                # 64
286
287     }
288
289     ok "\x{ab}" =~ /^\x{ab}$/, 1;
290     $test++;                                    # 65
291 }
292
293 {
294     use utf8;
295     ok_bytes chr(0xe2), pack("C*", 0xc3, 0xa2);
296     $test++;                # 66
297 }