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