More tests for handling of use Moose and MX modules
[gitmo/MooseX-Compiler.git] / t / remove-use-moose.t
1 use strict;
2 use warnings;
3
4 use lib 't/lib';
5
6 use Test::Requires {
7     'MooseX::StrictConstructor' => '0.01',
8 };
9
10 use Test::MooseX::Compiler qw( save_class );
11 use Test::More 0.88;
12
13 use MooseX::Compiler;
14
15 {
16     my $code = <<'EOF';
17 package Test::Class1;
18
19 use strict;
20 use warnings;
21
22 use Moose;
23
24 sub foo { 42 }
25
26 1;
27 EOF
28
29     save_class( 'Test::Class1', $code );
30
31     my $compiler = MooseX::Compiler->new(
32         class => 'Test::Class1',
33     );
34
35     my $compiled = $compiler->compile_class();
36
37     like(
38         $compiled,
39         qr/^\#\s*use Moose;\n/m,
40         'use Moose declaration is commented out in compiled code'
41     );
42
43     unlike(
44         $compiled,
45         qr/^use Moose;\n/m,
46         'original use Moose declaration is removed from compiled code'
47     );
48 }
49
50 {
51     my $code = <<'EOF';
52 package Test::Class2;
53
54 use strict;
55 use warnings;
56
57 use Moose 0.1;
58
59 sub foo { 42 }
60
61 1;
62 EOF
63
64     save_class( 'Test::Class1', $code );
65
66     my $compiler = MooseX::Compiler->new(
67         class => 'Test::Class1',
68     );
69
70     my $compiled = $compiler->compile_class();
71
72     unlike(
73         $compiled,
74         qr/^\#\s*use Moose;\n/m,
75         'use Moose declaration is not commented out in compiled code'
76     );
77
78     like(
79         $compiled,
80         qr/^use\s+Moose\s+0\.1\s+\(\)\s*;\n/m,
81         'original use Moose declaration is preserved, but () is added to prevent importing'
82     );
83 }
84
85 {
86     my $code = <<'EOF';
87 package Test::Class3;
88
89 use strict;
90 use warnings;
91
92 use Moose;
93 use MooseX::StrictConstructor;
94
95 sub foo { 42 }
96
97 1;
98 EOF
99
100     save_class( 'Test::Class1', $code );
101
102     my $compiler = MooseX::Compiler->new(
103         class => 'Test::Class1',
104     );
105
106     my $compiled = $compiler->compile_class();
107
108     like(
109         $compiled,
110         qr/^\#\s*use Moose;\n/m,
111         'use Moose declaration is commented out in compiled code'
112     );
113
114     like(
115         $compiled,
116         qr/^\#\s*use MooseX::StrictConstructor;\n/m,
117         'use MooseX::StrictConstructor declaration is commented out in compiled code'
118     );
119
120     unlike(
121         $compiled,
122         qr/^use Moose;\n/m,
123         'original use Moose declaration is removed from compiled code'
124     );
125
126     unlike(
127         $compiled,
128         qr/^use MooseX::StrictConstructor;\n/m,
129         'original use MooseX::StrictConstructor declaration is removed from compiled code'
130     );
131 }
132
133 {
134     my $code = <<'EOF';
135 package Test::Class4;
136
137 use strict;
138 use warnings;
139
140 use Moose;
141 use MooseX::StrictConstructor 0.01;
142
143 sub foo { 42 }
144
145 1;
146 EOF
147
148     save_class( 'Test::Class1', $code );
149
150     my $compiler = MooseX::Compiler->new(
151         class => 'Test::Class1',
152     );
153
154     my $compiled = $compiler->compile_class();
155
156     like(
157         $compiled,
158         qr/^\#\s*use Moose;\n/m,
159         'use Moose declaration is commented out in compiled code'
160     );
161
162     unlike(
163         $compiled,
164         qr/^use Moose;\n/m,
165         'original use Moose declaration is removed from compiled code'
166     );
167
168     unlike(
169         $compiled,
170         qr/^\#\s*use MooseX::StrictConstructor;\n/m,
171         'use MooseX::StrictConstructor declaration is not commented out in compiled code'
172     );
173
174     like(
175         $compiled,
176         qr/^use\s+MooseX::StrictConstructor\s+0\.01\s+\(\)\s*;\n/m,
177         'original use MooseX::StrictConstructor declaration is preserved, but () is added to prevent importing'
178     );
179 }
180
181 done_testing();