This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
5ade6208e01ebde9e98121c3a887c0a52ffece9e
[perl5.git] / t / uni / lex_utf8.t
1 #!./perl -w
2 #
3 # This script is written intentionally in UTF-8
4
5 BEGIN {
6     $| = 1;
7
8     chdir 't';
9     @INC = '../lib';
10     require './test.pl';
11     skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader;
12     skip_all_without_unicode_tables();
13     skip_all('EBCDIC') if $::IS_EBCDIC;
14 }
15
16 use strict;
17
18 plan (tests => 16);
19 use charnames ':full';
20
21 use utf8;
22
23 my $A_with_ogonek = "Ą";
24 my $micro_sign = "µ";
25 my $hex_first = "a\x{A2}Ą";
26 my $hex_last = "aĄ\x{A2}";
27 my $name_first = "b\N{MICRO SIGN}Ɓ";
28 my $name_last = "bƁ\N{MICRO SIGN}";
29 my $uname_first = "b\N{U+00B5}Ɓ";
30 my $uname_last = "bƁ\N{U+00B5}";
31 my $octal_first = "c\377Ć";
32 my $octal_last = "cĆ\377";
33
34 do {
35         use bytes;
36         is((join "", unpack("C*", $A_with_ogonek)), "196" . "132", 'single char above 0x100');
37         is((join "", unpack("C*", $micro_sign)), "194" . "181", 'single char in 0x80 .. 0xFF');
38         is((join "", unpack("C*", $hex_first)), "97" . "194" . "162" . "196" . "132", 'a . \x{A2} . char above 0x100');
39         is((join "", unpack("C*", $hex_last)), "97" . "196" . "132" . "194" . "162", 'a . char above 0x100 . \x{A2}');
40         is((join "", unpack("C*", $name_first)), "98" . "194" . "181" . "198" . "129", 'b . \N{MICRO SIGN} . char above 0x100');
41         is((join "", unpack("C*", $name_last)), "98" . "198" . "129" . "194" . "181", 'b . char above 0x100 . \N{MICRO SIGN}');
42         is((join "", unpack("C*", $uname_first)), "98" . "194" . "181" . "198" . "129", 'b . \N{U+00B5} . char above 0x100');
43         is((join "", unpack("C*", $uname_last)), "98" . "198" . "129" . "194" . "181", 'b . char above 0x100 . \N{U+00B5}');
44         is((join "", unpack("C*", $octal_first)), "99" . "195" . "191" . "196" . "134", 'c . \377 . char above 0x100');
45         is((join "", unpack("C*", $octal_last)), "99" . "196" . "134" . "195" . "191", 'c . char above 0x100 . \377');
46 };
47
48 {
49     local $SIG{__WARN__} = sub {};
50     eval "our $::\xe9; $\xe9";
51     unlike $@, qr/utf8_heavy/,
52         'No utf8_heavy errors with our() syntax errors';
53 }
54
55 # [perl #120463]
56 $_ = "a";
57 eval 's αaαbα';
58 is $@, "", 's/// compiles, where / is actually a wide character';
59 is $_, "b", 'substitution worked';
60 $_ = "a";
61 eval 'tr νaνbν';
62 is $@, "", 'y/// compiles, where / is actually a wide character';
63 is $_, "b", 'transliteration worked';
64
65 use constant foofoo=>qq|\xc4\xb5|;
66 { no strict; ()=${"\xc4\xb5::foo"} } # vivify Äµ package
67 eval 'my foofoo $dog'; # foofoo was resolving to ĵ, not Äµ
68 is $@, '', 'my constant $var in utf8 scope where constant is not utf8';
69
70 __END__
71