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