no strict and no warnings when 'no Moose' is called
[gitmo/Moose.git] / t / 010_basics / 007_always_strict_warnings.t
1 #!/usr/bin/perl
2
3 use Test::More;
4
5 # for classes ...
6 {
7     package Foo;
8     use Moose;
9
10     eval '$foo = 5;';
11     ::ok($@, '... got an error because strict is on');
12     ::like($@, qr/Global symbol \"\$foo\" requires explicit package name at/, '... got the right error');
13
14     {
15         my $warn;
16         local $SIG{__WARN__} = sub { $warn = $_[0] };
17
18         ::ok(!$warn, '... no warning yet');
19
20         eval 'my $bar = 1 + "hello"';
21
22         ::ok($warn, '... got a warning');
23         ::like($warn, qr/Argument \"hello\" isn\'t numeric in addition \(\+\)/, '.. and it is the right warning');
24     }
25
26     no Moose;
27     undef $@;
28     eval '$foo = 5;';
29     ::ok(!$@, "... no error after no Moose");
30
31     {
32         my $warn;
33         local $SIG{__WARN__} = sub { $warn = $_[0] };
34
35         ::ok(!$warn, '... no warning yet');
36
37         eval 'my $bar = 1 + "hello"';
38
39         ::ok(!$warn, '... still no warning');
40     }
41 }
42
43 # and for roles ...
44 {
45     package Bar;
46     use Moose::Role;
47
48     eval '$foo = 5;';
49     ::ok($@, '... got an error because strict is on');
50     ::like($@, qr/Global symbol \"\$foo\" requires explicit package name at/, '... got the right error');
51
52     {
53         my $warn;
54         local $SIG{__WARN__} = sub { $warn = $_[0] };
55
56         ::ok(!$warn, '... no warning yet');
57
58         eval 'my $bar = 1 + "hello"';
59
60         ::ok($warn, '... got a warning');
61         ::like($warn, qr/Argument \"hello\" isn\'t numeric in addition \(\+\)/, '.. and it is the right warning');
62     }
63
64     no Moose::Role;
65     undef $@;
66     eval '$foo = 5;';
67     ::ok(!$@, "... no error after no Moose::Role");
68
69     {
70         my $warn;
71         local $SIG{__WARN__} = sub { $warn = $_[0] };
72
73         ::ok(!$warn, '... no warning yet');
74
75         eval 'my $bar = 1 + "hello"';
76
77         ::ok(!$warn, '... still no warning');
78     }
79 }
80
81 # and for exporters
82 {
83     package Bar;
84     use Moose::Exporter;
85
86     eval '$foo2 = 5;';
87     ::ok($@, '... got an error because strict is on');
88     ::like($@, qr/Global symbol \"\$foo2\" requires explicit package name at/, '... got the right error');
89
90     {
91         my $warn;
92         local $SIG{__WARN__} = sub { $warn = $_[0] };
93
94         ::ok(!$warn, '... no warning yet');
95
96         eval 'my $bar = 1 + "hello"';
97
98         ::ok($warn, '... got a warning');
99         ::like($warn, qr/Argument \"hello\" isn\'t numeric in addition \(\+\)/, '.. and it is the right warning');
100     }
101
102     no Moose::Exporter;
103     undef $@;
104     eval '$foo = 5;';
105     ::ok(!$@, "... no error after no Moose::Exporter");
106
107     {
108         my $warn;
109         local $SIG{__WARN__} = sub { $warn = $_[0] };
110
111         ::ok(!$warn, '... no warning yet');
112
113         eval 'my $bar = 1 + "hello"';
114
115         ::ok(!$warn, '... still no warning');
116     }
117 }
118
119 done_testing;