Fix [perl #66970] Incorrect coderef in MODIFY_CODE_ATTRIBUTES
[p5sagit/p5-mst-13.2.git] / ext / List-Util / t / readonly.t
1 #!./perl
2
3 BEGIN {
4     unless (-d 'blib') {
5         chdir 't' if -d 't';
6         @INC = '../lib';
7         require Config; import Config;
8         keys %Config; # Silence warning
9         if ($Config{extensions} !~ /\bList\/Util\b/) {
10             print "1..0 # Skip: List::Util was not built\n";
11             exit 0;
12         }
13     }
14 }
15
16 use Scalar::Util qw(readonly);
17 use Test::More tests => 11;
18
19 ok( readonly(1),        'number constant');
20
21 my $var = 2;
22
23 ok( !readonly($var),    'number variable');
24 is( $var,       2,      'no change to number variable');
25
26 ok( readonly("fred"),   'string constant');
27
28 $var = "fred";
29
30 ok( !readonly($var),    'string variable');
31 is( $var,       'fred', 'no change to string variable');
32
33 $var = \2;
34
35 ok( !readonly($var),    'reference to constant');
36 ok( readonly($$var),    'de-reference to constant');
37
38 ok( !readonly(*STDOUT), 'glob');
39
40 sub try
41 {
42     my $v = \$_[0];
43     return readonly $$v;
44 }
45
46 $var = 123;
47 {
48     local $TODO = $Config::Config{useithreads} ? "doesn't work with threads" : undef;
49     ok( try ("abc"), 'reference a constant in a sub');
50 }
51 ok( !try ($var), 'reference a non-constant in a sub');