Add author test for use strict/warnings
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 26dump_use_moose.t
1 use DBIx::Class::Schema::Loader::Optional::Dependencies
2     -skip_all_without => 'use_moose';
3
4 use strict;
5 use warnings;
6
7 use Test::More;
8
9 use lib qw(t/lib);
10 use dbixcsl_dumper_tests;
11 my $t = 'dbixcsl_dumper_tests';
12
13 $t->cleanup;
14
15 # first dump a fresh use_moose=1 schema
16 $t->dump_test(
17   classname => 'DBICTest::DumpMore::1',
18   options => {
19     use_moose => 1,
20     result_base_class => 'My::ResultBaseClass',
21     schema_base_class => 'My::SchemaBaseClass',
22     result_roles => ['TestRole', 'TestRole2'],
23   },
24   regexes => {
25     schema => [
26       qr/\nuse Moose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::SchemaBaseClass';\n\n/,
27       qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
28     ],
29     Foo => [
30       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/,
31       qr/=head1 L<Moose> ROLES APPLIED\n\n=over 4\n\n=item \* L<TestRole>\n\n=item \* L<TestRole2>\n\n=back\n\n=cut\n\n/,
32       qr/\nwith 'TestRole', 'TestRole2';\n\n/,
33       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
34     ],
35     Bar => [
36       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/,
37       qr/=head1 L<Moose> ROLES APPLIED\n\n=over 4\n\n=item \* L<TestRole>\n\n=item \* L<TestRole2>\n\n=back\n\n=cut\n\n/,
38       qr/\nwith 'TestRole', 'TestRole2';\n\n/,
39       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
40     ],
41   },
42 );
43
44 $t->cleanup;
45
46 # check protect_overloads works as expected
47 $t->dump_test(
48   classname => 'DBICTest::DumpMore::1',
49   options => {
50     use_moose      => 1,
51     only_autoclean => 1,
52   },
53   regexes => {
54     schema => [
55       qr/\nuse namespace::autoclean;\n/,
56     ],
57     Foo => [
58       qr/\nuse namespace::autoclean;\n/,
59     ],
60   },
61 );
62
63 $t->cleanup;
64
65 # now upgrade a fresh non-moose schema to use_moose=1
66 $t->dump_test(
67   classname => 'DBICTest::DumpMore::1',
68   options => {
69     use_moose => 0,
70     result_base_class => 'My::ResultBaseClass',
71     schema_base_class => 'My::SchemaBaseClass',
72   },
73   regexes => {
74     schema => [
75       qr/\nuse base 'My::SchemaBaseClass';\n/,
76     ],
77     Foo => [
78       qr/\nuse base 'My::ResultBaseClass';\n/,
79     ],
80     Bar => [
81       qr/\nuse base 'My::ResultBaseClass';\n/,
82     ],
83   },
84 );
85
86 # check that changed custom content is upgraded for Moose bits
87 $t->append_to_class('DBICTest::DumpMore::1::Foo', q{# XXX This is my custom content XXX});
88
89 $t->dump_test(
90   classname => 'DBICTest::DumpMore::1',
91   options => {
92     use_moose => 1,
93     result_base_class => 'My::ResultBaseClass',
94     schema_base_class => 'My::SchemaBaseClass',
95   },
96   regexes => {
97     schema => [
98       qr/\nuse Moose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::SchemaBaseClass';\n\n/,
99       qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
100     ],
101     Foo => [
102       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/,
103       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
104       qr/# XXX This is my custom content XXX/,
105     ],
106     Bar => [
107       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/,
108       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
109     ],
110   },
111 );
112
113 $t->cleanup;
114
115 # check with a fresh non-moose schema that Moose custom content added to a use_moose=0 schema is not repeated
116 $t->dump_test(
117   classname => 'DBICTest::DumpMore::1',
118   options => {
119     result_base_class => 'My::ResultBaseClass',
120     schema_base_class => 'My::SchemaBaseClass',
121   },
122   regexes => {
123     schema => [
124       qr/\nuse base 'My::SchemaBaseClass';\n/,
125     ],
126     Foo => [
127       qr/\nuse base 'My::ResultBaseClass';\n/,
128     ],
129     Bar => [
130       qr/\nuse base 'My::ResultBaseClass';\n/,
131     ],
132   },
133 );
134
135 # add Moose custom content then check it is not repeated
136 # after that regen again *without* the use_moose flag, make
137 # sure moose isn't stripped away
138 $t->append_to_class('DBICTest::DumpMore::1::Foo', qq{use Moose;\n__PACKAGE__->meta->make_immutable;\n1;\n});
139
140 for my $supply_use_moose (1, 0) {
141   $t->dump_test(
142     classname => 'DBICTest::DumpMore::1',
143     options => {
144       $supply_use_moose ? (use_moose => 1) : (),
145       result_base_class => 'My::ResultBaseClass',
146       schema_base_class => 'My::SchemaBaseClass',
147     },
148     regexes => {
149       schema => [
150         qr/\nuse Moose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::SchemaBaseClass';\n\n/,
151         qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
152       ],
153       Foo => [
154         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/,
155         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
156       ],
157       Bar => [
158         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/,
159         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
160       ],
161     },
162     neg_regexes => {
163       Foo => [
164 #        qr/\nuse Moose;\n.*\nuse Moose;/s, # TODO
165         qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
166       ],
167     },
168   );
169 }
170
171 # check that a moose schema can *not* be downgraded
172
173 $t->dump_test (
174   classname => 'DBICTest::DumpMore::1',
175   options => {
176     use_moose => 0,
177     result_base_class => 'My::ResultBaseClass',
178     schema_base_class => 'My::SchemaBaseClass',
179   },
180   error => qr/\QIt is not possible to "downgrade" a schema that was loaded with use_moose => 1\E/,
181 );
182
183 done_testing;