add self to credits
[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;