This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
sv.c: glob_assign_glob is now UTF-8 aware.
[perl5.git] / t / uni / parser.t
CommitLineData
1a96a5b7
BF
1#!./perl
2
3# Checks if the parser behaves correctly in edge cases
4# (including weird syntax errors)
5
6BEGIN {
7 require './test.pl';
8}
9
10plan (tests => 33);
11
12use utf8;
13use open qw( :utf8 :std );
14
15ok *tèst, "*main::tèst", "sanity check.";
16ok $::{"tèst"}, "gets the right glob in the stash.";
17
18my $glob_by_sub = sub { *main::method }->();
19
20is *main::method, "*main::method", "glob stringy works";
21is "" . *main::method, "*main::method", "glob stringify-through-concat works";
22is $glob_by_sub, "*main::method", "glob stringy works";
23is "" . $glob_by_sub, "*main::method", "";
24
25sub gimme_glob {
26 no strict 'refs';
27 is *{$_[0]}, "*main::$_[0]";
28 *{$_[0]};
29}
30
31is "" . gimme_glob("下郎"), "*main::下郎";
32$a = *下郎;
33is "" . $a, "*main::下郎";
34
35*{gimme_glob("下郎")} = sub {};
36
37{
38 ok defined *{"下郎"}{CODE};
39 ok !defined *{"\344\270\213\351\203\216"}{CODE};
40}
41
42$Lèon = 1;
43is ${*Lèon{SCALAR}}, 1, "scalar define in the right glob,";
44ok !${*{"L\303\250on"}{SCALAR}}, "..and nothing in the wrong one.";
45
46my $a = "foo" . chr(190);
47my $b = $a . chr(256);
48chop $b; # $b is $a with utf8 on
49
50is $a, $b, '$a equals $b';
51
52*$b = sub { 5 };
53
54is eval { main->$a }, 5, q!$a can call $b's sub!;
55ok !$@, "..and there's no error.";
56
57my $c = $b;
58utf8::encode($c);
59ok $b ne $c, '$b unequal $c';
60eval { main->$c };
61ok $@, q!$c can't call $b's sub.!;
62
63# Now define another sub under the downgraded name:
64*$a = sub { 6 };
65# Call it:
66is eval { main->$a }, 6, "Adding a new sub to *a and calling it works,";
67ok !$@, "..without errors.";
68eval { main->$c };
69ok $@, "but it's still unreachable through *c";
70
71*$b = \10;
72is ${*$a{SCALAR}}, 10;
73is ${*$b{SCALAR}}, 10;
74is ${*$c{SCALAR}}, undef;
75
76opendir FÒÒ, ".";
77closedir FÒÒ;
78::ok($::{"FÒÒ"}, "Bareword generates the right glob.");
79::ok(!$::{"F\303\222\303\222"});
80
81sub участники { 1 }
82
83ok $::{"участники"}, "non-const sub declarations generate the right glob";
84ok *{$::{"участники"}}{CODE};
85is *{$::{"участники"}}{CODE}->(), 1;
86
87TODO: {
88 our $TODO = "our isn't clean in this branch";
89 our $問 = 10;
90 is $問, 10;
91 is $main::問, 10;
92 is ${"main::\345\225\217"}, undef;
93}