This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Regen modlib.
[perl5.git] / lib / charnames.t
1 #!./perl
2
3 BEGIN {
4     unless(grep /blib/, @INC) {
5         chdir 't' if -d 't';
6         @INC = '../lib';
7     }
8 }
9
10 $| = 1;
11 print "1..25\n";
12
13 use charnames ':full';
14
15 print "not " unless "Here\N{EXCLAMATION MARK}?" eq "Here!?";
16 print "ok 1\n";
17
18 {
19   use bytes;                    # TEST -utf8 can switch utf8 on
20
21   print "# \$res=$res \$\@='$@'\nnot "
22     if $res = eval <<'EOE'
23 use charnames ":full";
24 "Here: \N{CYRILLIC SMALL LETTER BE}!";
25 1
26 EOE
27       or $@ !~ /above 0xFF/;
28   print "ok 2\n";
29   # print "# \$res=$res \$\@='$@'\n";
30
31   print "# \$res=$res \$\@='$@'\nnot "
32     if $res = eval <<'EOE'
33 use charnames 'cyrillic';
34 "Here: \N{Be}!";
35 1
36 EOE
37       or $@ !~ /CYRILLIC CAPITAL LETTER BE.*above 0xFF/;
38   print "ok 3\n";
39 }
40
41 # If octal representation of unicode char is \0xyzt, then the utf8 is \3xy\2zt
42 if (ord('A') == 65) { # as on ASCII or UTF-8 machines
43     $encoded_be = "\320\261";
44     $encoded_alpha = "\316\261";
45     $encoded_bet = "\327\221";
46     $encoded_deseng = "\360\220\221\215";
47 }
48 else { # EBCDIC where UTF-EBCDIC may be used (this may be 1047 specific since
49        # UTF-EBCDIC is codepage specific)
50     $encoded_be = "\270\102\130";
51     $encoded_alpha = "\264\130";
52     $encoded_bet = "\270\125\130";
53     $encoded_deseng = "\336\102\103\124";
54 }
55
56 sub to_bytes {
57     pack"a*", shift;
58 }
59
60 {
61   use charnames ':full';
62
63   print "not " unless to_bytes("\N{CYRILLIC SMALL LETTER BE}") eq $encoded_be;
64   print "ok 4\n";
65
66   use charnames qw(cyrillic greek :short);
67
68   print "not " unless to_bytes("\N{be},\N{alpha},\N{hebrew:bet}")
69     eq "$encoded_be,$encoded_alpha,$encoded_bet";
70   print "ok 5\n";
71 }
72
73 {
74     use charnames ':full';
75     print "not " unless "\x{263a}" eq "\N{WHITE SMILING FACE}";
76     print "ok 6\n";
77     print "not " unless length("\x{263a}") == 1;
78     print "ok 7\n";
79     print "not " unless length("\N{WHITE SMILING FACE}") == 1;
80     print "ok 8\n";
81     print "not " unless sprintf("%vx", "\x{263a}") eq "263a";
82     print "ok 9\n";
83     print "not " unless sprintf("%vx", "\N{WHITE SMILING FACE}") eq "263a";
84     print "ok 10\n";
85     print "not " unless sprintf("%vx", "\xFF\N{WHITE SMILING FACE}") eq "ff.263a";
86     print "ok 11\n";
87     print "not " unless sprintf("%vx", "\x{ff}\N{WHITE SMILING FACE}") eq "ff.263a";
88     print "ok 12\n";
89 }
90
91 {
92    use charnames qw(:full);
93    use utf8;
94    
95     my $x = "\x{221b}";
96     my $named = "\N{CUBE ROOT}";
97
98     print "not " unless ord($x) == ord($named);
99     print "ok 13\n";
100 }
101
102 {
103    use charnames qw(:full);
104    use utf8;
105    print "not " unless "\x{100}\N{CENT SIGN}" eq "\x{100}"."\N{CENT SIGN}";
106    print "ok 14\n";
107 }
108
109 {
110   use charnames ':full';
111
112   print "not "
113       unless to_bytes("\N{DESERET SMALL LETTER ENG}") eq $encoded_deseng;
114   print "ok 15\n";
115 }
116
117 {
118   # 20001114.001        
119
120   no utf8; # naked Latin-1
121
122   if (ord("Ä") == 0xc4) { # Try to do this only on Latin-1.
123       use charnames ':full';
124       my $text = "\N{LATIN CAPITAL LETTER A WITH DIAERESIS}";
125       print "not " unless $text eq "\xc4" && ord($text) == 0xc4;
126       print "ok 16\n";
127   } else {
128       print "ok 16 # Skip: not Latin-1\n";
129   }
130 }
131
132 {
133     print "not " unless charnames::viacode(0x1234) eq "ETHIOPIC SYLLABLE SEE";
134     print "ok 17\n";
135
136     print "not " if defined charnames::viacode(0x0590); # unused Hebrew
137     print "ok 18\n";
138 }
139
140 {
141     print "not " unless
142         sprintf "%04X\n", charnames::vianame("GOTHIC LETTER AHSA") eq "10330";
143     print "ok 19\n";
144
145     print "not " if
146         defined charnames::vianame("NONE SUCH");
147     print "ok 20\n";
148 }
149
150 {
151     # check that caching at least hasn't broken anything
152
153     print "not " unless charnames::viacode(0x1234) eq "ETHIOPIC SYLLABLE SEE";
154     print "ok 21\n";
155
156     print "not " unless
157         sprintf "%04X\n", charnames::vianame("GOTHIC LETTER AHSA") eq "10330";
158     print "ok 22\n";
159
160 }
161
162 print "not " unless "\N{HORIZONTAL TABULATION}" eq "\t";
163 print "ok 23\n";
164
165 print "not " unless "\N{ESCAPE}" eq "\e";
166 print "ok 24\n";
167
168 print "not " unless "\N{NULL}" eq "\c@";
169 print "ok 25\n";
170
171 # TODO: when Unicode 3.2 comes along some names will change
172 # HORIZONTAL TABULATION -> CHARACTER TABULATION (since ISO 6429
173 # has been updated), and some names will have shorter aliases
174 # LINEFEED (LF).  Update the tests, and also update the charnames
175 # pragma to support the 3.1 names, and the shorter aliases.