remove bad coderef tests (not how we want to handle vivification)
[gitmo/Package-Stash-PP.git] / t / 04-get.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More;
5
6 use Package::Stash;
7
8 {
9     BEGIN {
10         my $stash = Package::Stash->new('Hash');
11         my $val = $stash->get_package_symbol('%foo');
12         is($val, undef, "got nothing yet");
13     }
14     {
15         no warnings 'void', 'once';
16         %Hash::foo;
17     }
18     BEGIN {
19         my $stash = Package::Stash->new('Hash');
20         my $val = $stash->get_package_symbol('%foo');
21         is(ref($val), 'HASH', "got something");
22         $val->{bar} = 1;
23         is_deeply($stash->get_package_symbol('%foo'), {bar => 1},
24                   "got the right variable");
25         is_deeply(\%Hash::foo, {bar => 1},
26                   "stash has the right variable");
27     }
28 }
29
30 {
31     BEGIN {
32         my $stash = Package::Stash->new('Array');
33         my $val = $stash->get_package_symbol('@foo');
34         is($val, undef, "got nothing yet");
35     }
36     {
37         no warnings 'void', 'once';
38         @Array::foo;
39     }
40     BEGIN {
41         my $stash = Package::Stash->new('Array');
42         my $val = $stash->get_package_symbol('@foo');
43         is(ref($val), 'ARRAY', "got something");
44         push @$val, 1;
45         is_deeply($stash->get_package_symbol('@foo'), [1],
46                   "got the right variable");
47         is_deeply(\@Array::foo, [1],
48                   "stash has the right variable");
49     }
50 }
51
52 {
53     BEGIN {
54         my $stash = Package::Stash->new('Scalar');
55         my $val = $stash->get_package_symbol('$foo');
56         is($val, undef, "got nothing yet");
57     }
58     {
59         no warnings 'void', 'once';
60         $Scalar::foo;
61     }
62     BEGIN {
63         my $stash = Package::Stash->new('Scalar');
64         my $val = $stash->get_package_symbol('$foo');
65         is(ref($val), 'SCALAR', "got something");
66         $$val = 1;
67         is_deeply($stash->get_package_symbol('$foo'), \1,
68                   "got the right variable");
69         is($Scalar::foo, 1,
70            "stash has the right variable");
71     }
72 }
73
74 {
75     BEGIN {
76         my $stash = Package::Stash->new('Io');
77         my $val = $stash->get_package_symbol('FOO');
78         is($val, undef, "got nothing yet");
79     }
80     {
81         no warnings 'void', 'once';
82         package Io;
83         fileno(FOO);
84     }
85     BEGIN {
86         my $stash = Package::Stash->new('Io');
87         my $val = $stash->get_package_symbol('FOO');
88         isa_ok($val, 'IO');
89         my $str = "foo";
90         open $val, '<', \$str;
91         is(readline($stash->get_package_symbol('FOO')), "foo",
92            "got the right variable");
93         seek($stash->get_package_symbol('FOO'), 0, 0);
94         {
95             package Io;
96             ::isa_ok(*FOO{IO}, 'IO');
97             ::is(<FOO>, "foo",
98                  "stash has the right variable");
99         }
100     }
101 }
102
103 {
104     my $stash = Package::Stash->new('Hash::Vivify');
105     my $val = $stash->get_or_add_package_symbol('%foo');
106     is(ref($val), 'HASH', "got something");
107     $val->{bar} = 1;
108     is_deeply($stash->get_or_add_package_symbol('%foo'), {bar => 1},
109               "got the right variable");
110     no warnings 'once';
111     is_deeply(\%Hash::Vivify::foo, {bar => 1},
112               "stash has the right variable");
113 }
114
115 {
116     my $stash = Package::Stash->new('Array::Vivify');
117     my $val = $stash->get_or_add_package_symbol('@foo');
118     is(ref($val), 'ARRAY', "got something");
119     push @$val, 1;
120     is_deeply($stash->get_or_add_package_symbol('@foo'), [1],
121               "got the right variable");
122     no warnings 'once';
123     is_deeply(\@Array::Vivify::foo, [1],
124               "stash has the right variable");
125 }
126
127 {
128     my $stash = Package::Stash->new('Scalar::Vivify');
129     my $val = $stash->get_or_add_package_symbol('$foo');
130     is(ref($val), 'SCALAR', "got something");
131     $$val = 1;
132     is_deeply($stash->get_or_add_package_symbol('$foo'), \1,
133               "got the right variable");
134     no warnings 'once';
135     is($Scalar::Vivify::foo, 1,
136        "stash has the right variable");
137 }
138
139 {
140     BEGIN {
141         my $stash = Package::Stash->new('Io::Vivify');
142         my $val = $stash->get_or_add_package_symbol('FOO');
143         isa_ok($val, 'IO');
144         my $str = "foo";
145         open $val, '<', \$str;
146         is(readline($stash->get_package_symbol('FOO')), "foo",
147            "got the right variable");
148         seek($stash->get_package_symbol('FOO'), 0, 0);
149     }
150     {
151         package Io::Vivify;
152         no warnings 'once';
153         ::isa_ok(*FOO{IO}, 'IO');
154         ::is(<FOO>, "foo",
155              "stash has the right variable");
156     }
157 }
158
159 done_testing;