This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
util.c: Missing semicolon with rarely used compile ops
[perl5.git] / t / lib / charnames / alias
1 Tests for use charnames with compilation errors and aliases.
2 __END__
3 # NAME illegal :pragma
4 use warnings;
5 use charnames ":scoobydoo";
6 "Here: \N{e_ACUTE}!\n";
7 EXPECT
8 OPTIONS regex
9 unsupported special ':scoobydoo' in charnames at
10 ########
11 # NAME autoload doesn't get vianame
12 print "Here: \N{DIGIT ONE}\n";
13 charnames::vianame("DIGIT TWO");
14 EXPECT
15 OPTIONS regex
16 Undefined subroutine &charnames::vianame called at - line \d+.
17 Here: 1
18 ########
19 # NAME autoload doesn't get viacode
20 print "Here: \N{DIGIT THREE}\n";
21 charnames::viacode(utf8::unicode_to_native(0x34));
22 EXPECT
23 OPTIONS regex
24 Undefined subroutine &charnames::viacode called at - line \d+.
25 Here: 3
26 ########
27 # NAME autoload doesn't get string_vianame
28 print "Here: \N{DIGIT FOUR}\n";
29 charnames::string_vianame("DIGIT FIVE");
30 EXPECT
31 OPTIONS regex
32 Undefined subroutine &charnames::string_vianame called at - line \d+.
33 Here: 4
34 ########
35 # NAME wrong type of alias (missing colon)
36 no warnings;
37 use charnames "alias";
38 "Here: \N{e_ACUTE}!\n";
39 EXPECT
40 OPTIONS regex fatal
41 Unknown charname 'e_ACUTE' at - line \d+, within string
42 ########
43 # NAME alias without an argument
44 use warnings;
45 use charnames ":alias";
46 "Here: \N{e_ACUTE}!\n";
47 EXPECT
48 OPTIONS regex
49 :alias needs an argument in charnames at
50 ########
51 # NAME reversed sequence
52 use warnings;
53 use charnames ":alias" => ":full";
54 "Here: \N{e_ACUTE}!\n";
55 EXPECT
56 OPTIONS regex
57 :alias cannot use existing pragma :full \(reversed order\?\) at
58 ########
59 # NAME alias with hashref but with :short
60 use warnings;
61 no warnings 'void';
62 use charnames ":short", ":alias" => { e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE" };
63 "Here: \N{e_ACUTE}!\n";
64 EXPECT
65 OPTIONS regex fatal
66 Unknown charname 'e_ACUTE' at - line \d+, within string
67 ########
68 # NAME alias with hashref to :full OK
69 use warnings;
70 no warnings 'void';
71 use charnames ":full", ":alias" => { e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE" };
72 "Here: \N{e_ACUTE}!\n";
73 EXPECT
74 OPTIONS regex
75 $
76 ########
77 # NAME alias with hashref to :loose OK
78 use warnings;
79 no warnings 'void';
80 use charnames ":loose", ":alias" => { e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE" };
81 "Here: \N{e_ACUTE}!\n";
82 EXPECT
83 OPTIONS regex
84 $
85 ########
86 # NAME alias with :loose requires :full type name
87 use warnings;
88 no warnings 'void';
89 use charnames ":loose", ":alias" => { e_ACUTE => "latin SMALL LETTER E WITH ACUTE" };
90 "Here: \N{e_ACUTE}!\n";
91 EXPECT
92 OPTIONS regex fatal
93 Unknown charname 'e_ACUTE' at - line \d+, within string
94 ########
95 # NAME alias with hashref to :short but using :full
96 use warnings;
97 no warnings 'void';
98 use charnames ":full", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE" };
99 "Here: \N{e_ACUTE}!\n";
100 EXPECT
101 OPTIONS regex fatal
102 Unknown charname 'e_ACUTE' at - line \d+, within string
103 ########
104 # NAME alias with hashref to :short OK
105 use warnings;
106 no warnings 'void';
107 use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE" };
108 "Here: \N{e_ACUTE}!\n";
109 EXPECT
110 OPTIONS regex
111 $
112 ########
113 # NAME alias with bad hashref
114 use warnings;
115 no warnings 'void';
116 use charnames ":short", ":alias" => "e_ACUTE";
117 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
118 EXPECT
119 OPTIONS regex
120 unicore/e_ACUTE_alias.pl cannot be used as alias file for charnames at
121 ########
122 # NAME alias with arrayref
123 use warnings;
124 no warnings 'void';
125 use charnames ":short", ":alias" => [ e_ACUTE => "LATIN:e WITH ACUTE" ];
126 "Here: \N{e_ACUTE}!\n";
127 EXPECT
128 OPTIONS regex
129 Only HASH reference supported as argument to :alias at
130 ########
131 # NAME alias with bad hashref
132 no warnings;
133 use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE", "a_ACUTE" };
134 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
135 EXPECT
136 OPTIONS regex
137 Unknown charname 'a_ACUTE' at
138 ########
139 # NAME alias with hashref two aliases
140 use warnings;
141 no warnings 'void';
142 use charnames ":short", ":alias" => {
143     e_ACUTE => "LATIN:e WITH ACUTE",
144     a_ACUTE => "",
145     };
146 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
147 EXPECT
148 OPTIONS regex fatal
149 Unknown charname 'a_ACUTE' at - line \d+, within string
150 ########
151 # NAME alias with hashref two aliases
152 use warnings;
153 no warnings 'void';
154 use charnames ":short", ":alias" => {
155     e_ACUTE => "LATIN:e WITH ACUTE",
156     a_ACUTE => "LATIN:a WITH ACUTE",
157     };
158 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
159 EXPECT
160 OPTIONS regex
161 $
162 ########
163 # NAME alias with hashref using mixed aliases
164 use warnings;
165 use charnames ":short", ":alias" => {
166     e_ACUTE => "LATIN:e WITH ACUTE",
167     a_ACUTE => "LATIN SMALL LETTER A WITH ACUT",
168     };
169 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
170 EXPECT
171 OPTIONS regex fatal
172 Unknown charname 'a_ACUTE' at - line \d+, within string
173 ########
174 # NAME alias with hashref using mixed aliases
175 use warnings;
176 use charnames ":short", ":alias" => {
177     e_ACUTE => "LATIN:e WITH ACUTE",
178     a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE",
179     };
180 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
181 EXPECT
182 OPTIONS regex fatal
183 Unknown charname 'a_ACUTE' at - line \d+, within string
184 ########
185 # NAME alias with hashref using mixed aliases
186 use warnings;
187 no warnings 'void';
188 use charnames ":full", ":alias" => {
189     e_ACUTE => "LATIN:e WITH ACUTE",
190     a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE",
191     };
192 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
193 EXPECT
194 OPTIONS regex fatal
195 Unknown charname 'e_ACUTE' at - line \d+, within string
196 ########
197 # NAME alias with nonexisting file
198 use warnings;
199 no warnings 'void';
200 use charnames ":full", ":alias" => "non_existing_xyzzy";
201 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
202 EXPECT
203 OPTIONS regex
204 unicore/non_existing_xyzzy_alias.pl cannot be used as alias file for charnames at
205 ########
206 # NAME alias with bad file name
207 use warnings;
208 no warnings 'void';
209 use charnames ":full", ":alias" => "xy 7-";
210 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
211 EXPECT
212 OPTIONS regex
213 Charnames alias file names can only have identifier characters at
214 ########
215 # NAME alias with non_absolute (existing) file name (which it should /not/ use)
216 use warnings;
217 no warnings 'void';
218 use charnames ":full", ":alias" => "perl";
219 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
220 EXPECT
221 OPTIONS regex
222 unicore/perl_alias.pl cannot be used as alias file for charnames at
223 ########
224 # NAME alias with bad file
225 --FILE-- ../../lib/unicore/xyzzy_alias.pl
226 #!perl
227 0;
228 --FILE--
229 use warnings;
230 no warnings 'void';
231 use charnames ":full", ":alias" => "xyzzy";
232 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
233 EXPECT
234 OPTIONS regex
235 unicore/xyzzy_alias.pl did not return a \(valid\) list of alias pairs at
236 ########
237 # NAME alias with file with empty list
238 --FILE-- ../../lib/unicore/xyzzy_alias.pl
239 #!perl
240 ();
241 --FILE--
242 use warnings;
243 no warnings 'void';
244 use charnames ":full", ":alias" => "xyzzy";
245 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
246 EXPECT
247 OPTIONS regex fatal
248 Unknown charname 'e_ACUTE' at - line \d+, within string
249 ########
250 # NAME alias with file OK but file has :short aliases
251 --FILE-- ../../lib/unicore/xyzzy_alias.pl
252 #!perl
253 (   e_ACUTE => "LATIN:e WITH ACUTE",
254     a_ACUTE => "LATIN:a WITH ACUTE",
255     );
256 --FILE--
257 use warnings;
258 no warnings 'void';
259 use charnames ":full", ":alias" => "xyzzy";
260 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
261 EXPECT
262 OPTIONS regex fatal
263 Unknown charname 'e_ACUTE' at - line \d+, within string
264 ########
265 # NAME alias with :short and file OK
266 --FILE-- ../../lib/unicore/xyzzy_alias.pl
267 #!perl
268 (   e_ACUTE => "LATIN:e WITH ACUTE",
269     a_ACUTE => "LATIN:a WITH ACUTE",
270     );
271 --FILE--
272 use warnings;
273 no warnings 'void';
274 use charnames ":short", ":alias" => "xyzzy";
275 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
276 EXPECT
277 OPTIONS regex
278 $
279 ########
280 # NAME alias with :short and file OK has :long aliases
281 --FILE-- ../../lib/unicore/xyzzy_alias.pl
282 #!perl
283 (   e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE",
284     a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE",
285     );
286 --FILE--
287 use warnings;
288 no warnings 'void';
289 use charnames ":short", ":alias" => "xyzzy";
290 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
291 EXPECT
292 OPTIONS regex fatal
293 Unknown charname 'e_ACUTE' at - line \d+, within string
294 ########
295 # NAME alias with file implicit :full but file has :short aliases
296 --FILE-- ../../lib/unicore/xyzzy_alias.pl
297 #!perl
298 (   e_ACUTE => "LATIN:e WITH ACUTE",
299     a_ACUTE => "LATIN:a WITH ACUTE",
300     );
301 --FILE--
302 use warnings;
303 no warnings 'void';
304 use charnames ":alias" => ":xyzzy";
305 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
306 EXPECT
307 OPTIONS regex fatal
308 Unknown charname 'e_ACUTE' at - line \d+, within string
309 ########
310 # NAME alias with file implicit :full and file has :long aliases
311 --FILE-- ../../lib/unicore/xyzzy_alias.pl
312 #!perl
313 (   e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE",
314     a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE",
315     );
316 --FILE--
317 use warnings;
318 no warnings 'void';
319 use charnames ":alias" => ":xyzzy";
320 "Here: \N{e_ACUTE}\N{a_ACUTE}!\n";
321 EXPECT
322 OPTIONS regex
323 $
324 ########
325 # NAME charnames with no import still works for runtime functions
326 use warnings;
327 no warnings 'void';
328 use charnames ();
329 charnames::vianame('SPACE');
330 charnames::viacode(utf8::unicode_to_native(0x41));
331 EXPECT
332 OPTIONS regex
333 $
334 ########
335 # NAME no extraneous warning [perl #11560]
336 use warnings;
337 use charnames ();
338 print charnames::viacode(utf8::unicode_to_native(0x80)), "\n";
339 EXPECT
340 OPTIONS regex
341 PADDING CHARACTER
342 ########
343 # NAME A wrong character in :alias is an error
344 # These next tests could be combined, but the messages can come out in
345 # different orders on EBCDIC vs ASCII, and can't have both 'random' and 'regex'
346 # options, and need 'regex' to avoid 'at line X' getting in the way.
347 use charnames ":full", ":alias" => {
348                             "4e_ACUTE" => "LATIN SMALL LETTER E WITH ACUTE",
349                     };
350 EXPECT
351 OPTIONS regex
352 Invalid character in charnames alias definition; marked by <-- HERE in '4<-- HERE e_ACUTE'
353 ########
354 # NAME Another wrong character in :alias is an error
355 use charnames ":full", ":alias" => {
356                             "e_A,CUTE" => "LATIN SMALL LETTER E WITH ACUTE",
357                     };
358 EXPECT
359 OPTIONS regex
360 Invalid character in charnames alias definition; marked by <-- HERE in 'e_A,<-- HERE CUTE'
361 ########
362 # NAME Another wrong character in :alias is an error
363 # The EXPECT regex matches both the UTF-8 and non-UTF-8 form.
364 # This is because under some circumstances the message gets output as UTF-8.
365 # We use \xab, as that is invalid in both ASCII and EBCDIC platforms, and we
366 # accept both UTF-8 and 1047 UTF-EBCDIC.
367 use charnames ":full", ":alias" => {
368                             "e_ACUT\x{ab}E" => "LATIN SMALL LETTER E WITH ACUTE",
369                     };
370 EXPECT
371 OPTIONS regex
372 Invalid character in charnames alias definition; marked by <-- HERE in 'e_ACUT(?:\x{ab}|\x{C2}\x{AB}|\x{80\x{73})<-- HERE E'
373 ########
374 # RT#73022
375 # NAME \N{...} interprets ... as octets rather than UTF-8
376 use utf8;
377 use open qw( :utf8 :std );
378 use charnames ":full", ":alias" => { "自転車に乗る人" => "BICYCLIST" };
379 print "ok\n" if "\N{自転車に乗る人}" eq "\x{1F6B4}";
380 EXPECT
381 ok
382 ########
383 # NAME Misspelled \N{} UTF-8 names are errors
384 use utf8;
385 use open qw( :utf8 :std );
386 use charnames ":full", ":alias" => { "自転車に乗る人" => "BICYCLIST" };
387 print "ok\n" if "\N{転車に乗る人}" eq "\x{1F6B4}";
388 EXPECT
389 OPTIONS regex
390 Unknown charname '転車に乗る人' at - line \d+, within string
391 ########
392 # NAME various wrong UTF-8 characters in :alias are errors
393 # First has a punctuation, KATAKANA MIDDLE DOT, in it; second begins with a
394 # digit: ARABIC-INDIC DIGIT FOUR
395 # Note that output order is alphabetical by character name
396 use utf8;
397 use open qw( :utf8 :std );
398 use charnames ":full", ":alias" => { "自転車・に乗る人" => "BICYCLIST",
399                                      "٤転車に乗る人" => "BICYCLIST",
400                                 "TOO  MANY SPACES" => "NO ENTRY SIGN",
401                                 "TRAILING SPACE " => "FACE WITH NO GOOD GESTURE"
402                                     };
403 print "ok\n" if "\N{TOO  MANY SPACES}" eq "\x{1F6AB}";
404 print "ok\n" if "\N{TRAILING SPACE }" eq "\x{1F645}";
405 print "ok\n" if "\N{自転車・に乗る人}" eq "\x{1F6B4}";
406 print "ok\n" if "\N{٤転車に乗る人}" eq "\x{1F6B4}";
407 EXPECT
408 OPTIONS regex fatal
409 charnames alias definitions may not contain a sequence of multiple spaces; marked by <-- HERE in 'TOO   <-- HERE MANY SPACES'
410 charnames alias definitions may not contain trailing white-space; marked by <-- HERE in 'TRAILING SPACE  <-- HERE '
411 Invalid character in charnames alias definition; marked by <-- HERE in '٤<-- HERE 転車に乗る人'
412 Invalid character in charnames alias definition; marked by <-- HERE in '自転車・<-- HERE に乗る人' at - line \d+
413 ########
414 # NAME Using NBSP in :alias names is deprectated
415 use utf8;
416 use open qw( :utf8 :std );
417 use charnames ":alias" => { "NBSP SEPARATED SPACE" => "BLACK SMILING FACE" };
418 print "ok\n" if "\N{NBSP SEPARATED SPACE}" eq "\x{263B}";
419 EXPECT
420 OPTIONS regex fatal
421 Invalid character in charnames alias definition; marked by <-- HERE in 'NBSP <-- HERE SEPARATED SPACE' at - line 3