Tests for use charnames with compilation errors and aliases. __END__ # NAME illegal :pragma use warnings; use charnames ":scoobydoo"; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex unsupported special ':scoobydoo' in charnames at ######## # NAME autoload doesn't get vianame print "Here: \N{DIGIT ONE}\n"; charnames::vianame("DIGIT TWO"); EXPECT OPTIONS regex Undefined subroutine &charnames::vianame called at - line \d+. Here: 1 ######## # NAME autoload doesn't get viacode print "Here: \N{DIGIT THREE}\n"; charnames::viacode(0x34); EXPECT OPTIONS regex Undefined subroutine &charnames::viacode called at - line \d+. Here: 3 ######## # NAME autoload doesn't get string_vianame print "Here: \N{DIGIT FOUR}\n"; charnames::string_vianame("DIGIT FIVE"); EXPECT OPTIONS regex Undefined subroutine &charnames::string_vianame called at - line \d+. Here: 4 ######## # NAME wrong type of alias (missing colon) no warnings; use charnames "alias"; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias without an argument use warnings; use charnames ":alias"; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex :alias needs an argument in charnames at ######## # NAME reversed sequence use warnings; use charnames ":alias" => ":full"; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex :alias cannot use existing pragma :full \(reversed order\?\) at ######## # NAME alias with hashref but no :full use warnings; use charnames ":alias" => { e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE" }; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with hashref but with :short use warnings; no warnings 'void'; use charnames ":short", ":alias" => { e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE" }; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with hashref to :full OK use warnings; no warnings 'void'; use charnames ":full", ":alias" => { e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE" }; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex $ ######## # NAME alias with hashref to :loose OK use warnings; no warnings 'void'; use charnames ":loose", ":alias" => { e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE" }; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex $ ######## # NAME alias with :loose requires :full type name use warnings; no warnings 'void'; use charnames ":loose", ":alias" => { e_ACUTE => "latin SMALL LETTER E WITH ACUTE" }; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with hashref to :short but using :full use warnings; no warnings 'void'; use charnames ":full", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE" }; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with hashref to :short OK use warnings; no warnings 'void'; use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE" }; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex $ ######## # NAME alias with bad hashref use warnings; no warnings 'void'; use charnames ":short", ":alias" => "e_ACUTE"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex unicore/e_ACUTE_alias.pl cannot be used as alias file for charnames at ######## # NAME alias with arrayref use warnings; no warnings 'void'; use charnames ":short", ":alias" => [ e_ACUTE => "LATIN:e WITH ACUTE" ]; "Here: \N{e_ACUTE}!\n"; EXPECT OPTIONS regex Only HASH reference supported as argument to :alias at ######## # NAME alias with bad hashref no warnings; use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE", "a_ACUTE" }; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex Unknown charname 'a_ACUTE' at ######## # NAME alias with hashref two aliases use warnings; no warnings 'void'; use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "", }; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'a_ACUTE' at - line \d+, within string ######## # NAME alias with hashref two aliases use warnings; no warnings 'void'; use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "LATIN:a WITH ACUTE", }; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex $ ######## # NAME alias with hashref using mixed aliases use warnings; use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "LATIN SMALL LETTER A WITH ACUT", }; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'a_ACUTE' at - line \d+, within string ######## # NAME alias with hashref using mixed aliases use warnings; use charnames ":short", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE", }; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'a_ACUTE' at - line \d+, within string ######## # NAME alias with hashref using mixed aliases use warnings; no warnings 'void'; use charnames ":full", ":alias" => { e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE", }; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with nonexisting file use warnings; no warnings 'void'; use charnames ":full", ":alias" => "non_existing_xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex unicore/non_existing_xyzzy_alias.pl cannot be used as alias file for charnames at ######## # NAME alias with bad file name use warnings; no warnings 'void'; use charnames ":full", ":alias" => "xy 7-"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex Charnames alias files can only have identifier characters at ######## # NAME alias with non_absolute (existing) file name (which it should /not/ use) use warnings; no warnings 'void'; use charnames ":full", ":alias" => "perl"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex unicore/perl_alias.pl cannot be used as alias file for charnames at ######## # NAME alias with bad file --FILE-- ../../lib/unicore/xyzzy_alias.pl #!perl 0; --FILE-- use warnings; no warnings 'void'; use charnames ":full", ":alias" => "xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex unicore/xyzzy_alias.pl did not return a \(valid\) list of alias pairs at ######## # NAME alias with file with empty list --FILE-- ../../lib/unicore/xyzzy_alias.pl #!perl (); --FILE-- use warnings; no warnings 'void'; use charnames ":full", ":alias" => "xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with file OK but file has :short aliases --FILE-- ../../lib/unicore/xyzzy_alias.pl #!perl ( e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "LATIN:a WITH ACUTE", ); --FILE-- use warnings; no warnings 'void'; use charnames ":full", ":alias" => "xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with :short and file OK --FILE-- ../../lib/unicore/xyzzy_alias.pl #!perl ( e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "LATIN:a WITH ACUTE", ); --FILE-- use warnings; no warnings 'void'; use charnames ":short", ":alias" => "xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex $ ######## # NAME alias with :short and file OK has :long aliases --FILE-- ../../lib/unicore/xyzzy_alias.pl #!perl ( e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE", a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE", ); --FILE-- use warnings; no warnings 'void'; use charnames ":short", ":alias" => "xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with file implicit :full but file has :short aliases --FILE-- ../../lib/unicore/xyzzy_alias.pl #!perl ( e_ACUTE => "LATIN:e WITH ACUTE", a_ACUTE => "LATIN:a WITH ACUTE", ); --FILE-- use warnings; no warnings 'void'; use charnames ":alias" => ":xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex fatal Unknown charname 'e_ACUTE' at - line \d+, within string ######## # NAME alias with file implicit :full and file has :long aliases --FILE-- ../../lib/unicore/xyzzy_alias.pl #!perl ( e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE", a_ACUTE => "LATIN SMALL LETTER A WITH ACUTE", ); --FILE-- use warnings; no warnings 'void'; use charnames ":alias" => ":xyzzy"; "Here: \N{e_ACUTE}\N{a_ACUTE}!\n"; EXPECT OPTIONS regex $ ######## # NAME charnames with no import still works for runtime functions use warnings; no warnings 'void'; use charnames (); charnames::vianame('SPACE'); charnames::viacode(0x41); EXPECT OPTIONS regex $ ######## # NAME no extraneous warning [perl #11560] use warnings; use charnames (); print charnames::viacode(0x80), "\n"; EXPECT OPTIONS regex PADDING CHARACTER ######## # NAME various wrong characters in :alias are errors # Below, one of the EXPECT regexes matches both the UTF-8 and non-UTF-8 form. # This is because under some circumstances the message gets output as UTF-8. use charnames ":full", ":alias" => { "4e_ACUTE" => "LATIN SMALL LETTER E WITH ACUTE", "e_A,CUTE" => "LATIN SMALL LETTER E WITH ACUTE", "e_ACUT\x{d7}E" => "LATIN SMALL LETTER E WITH ACUTE", }; EXPECT OPTIONS regex Invalid character in charnames alias definition; marked by <-- HERE in '4<-- HERE e_ACUTE' Invalid character in charnames alias definition; marked by <-- HERE in 'e_A,<-- HERE CUTE' Invalid character in charnames alias definition; marked by <-- HERE in 'e_ACUT(?:\x{d7}|\x{C3}\x{97})<-- HERE E' ######## # RT#73022 # NAME \N{...} interprets ... as octets rather than UTF-8 use utf8; use open qw( :utf8 :std ); use charnames ":full", ":alias" => { "自転車に乗る人" => "BICYCLIST" }; print "ok\n" if "\N{自転車に乗る人}" eq "\x{1F6B4}"; EXPECT ok ######## # NAME Misspelled \N{} UTF-8 names are errors use utf8; use open qw( :utf8 :std ); use charnames ":full", ":alias" => { "自転車に乗る人" => "BICYCLIST" }; print "ok\n" if "\N{転車に乗る人}" eq "\x{1F6B4}"; EXPECT OPTIONS regex Unknown charname '転車に乗る人' at - line \d+, within string ######## # NAME various wrong UTF-8 characters in :alias are errors # First has a punctuation, KATAKANA MIDDLE DOT, in it; second begins with a # digit: ARABIC-INDIC DIGIT FOUR use utf8; use open qw( :utf8 :std ); use charnames ":full", ":alias" => { "自転車・に乗る人" => "BICYCLIST", "٤転車に乗る人" => "BICYCLIST", }; print "ok\n" if "\N{自転車・に乗る人}" eq "\x{1F6B4}"; print "ok\n" if "\N{٤転車に乗る人}" eq "\x{1F6B4}"; EXPECT OPTIONS regex Invalid character in charnames alias definition; marked by <-- HERE in '٤<-- HERE 転車に乗る人' Invalid character in charnames alias definition; marked by <-- HERE in '自転車・<-- HERE に乗る人' at - line \d+