Commit | Line | Data |
71130750 |
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', |
06e06245 |
25 | result_roles => ['TestRole', 'TestRole2'], |
71130750 |
26 | }, |
71130750 |
27 | regexes => { |
28 | schema => [ |
7d265d7f |
29 | qr/\nuse Moose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::SchemaBaseClass';\n\n/, |
49643e1d |
30 | qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/, |
71130750 |
31 | ], |
32 | Foo => [ |
7d265d7f |
33 | qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/, |
017d9734 |
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/, |
06e06245 |
35 | qr/\nwith 'TestRole', 'TestRole2';\n\n/, |
71130750 |
36 | qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/, |
37 | ], |
38 | Bar => [ |
7d265d7f |
39 | qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/, |
017d9734 |
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/, |
06e06245 |
41 | qr/\nwith 'TestRole', 'TestRole2';\n\n/, |
71130750 |
42 | qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/, |
43 | ], |
44 | }, |
45 | ); |
46 | |
47 | $t->cleanup; |
48 | |
7d265d7f |
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 | |
71130750 |
68 | # now upgrade a fresh non-moose schema to use_moose=1 |
69 | $t->dump_test( |
70 | classname => 'DBICTest::DumpMore::1', |
71 | options => { |
22edddda |
72 | use_moose => 0, |
71130750 |
73 | result_base_class => 'My::ResultBaseClass', |
74 | schema_base_class => 'My::SchemaBaseClass', |
75 | }, |
71130750 |
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 | }, |
71130750 |
99 | regexes => { |
100 | schema => [ |
7d265d7f |
101 | qr/\nuse Moose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::SchemaBaseClass';\n\n/, |
49643e1d |
102 | qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/, |
71130750 |
103 | ], |
104 | Foo => [ |
7d265d7f |
105 | qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/, |
71130750 |
106 | qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/, |
1a8fd949 |
107 | qr/# XXX This is my custom content XXX/, |
71130750 |
108 | ], |
109 | Bar => [ |
7d265d7f |
110 | qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/, |
71130750 |
111 | qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/, |
112 | ], |
113 | }, |
114 | ); |
115 | |
116 | $t->cleanup; |
117 | |
1a8fd949 |
118 | # check with a fresh non-moose schema that Moose custom content added to a use_moose=0 schema is not repeated |
71130750 |
119 | $t->dump_test( |
120 | classname => 'DBICTest::DumpMore::1', |
121 | options => { |
122 | result_base_class => 'My::ResultBaseClass', |
123 | schema_base_class => 'My::SchemaBaseClass', |
124 | }, |
71130750 |
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 |
8de81918 |
139 | # after that regen again *without* the use_moose flag, make |
140 | # sure moose isn't stripped away |
1a8fd949 |
141 | $t->append_to_class('DBICTest::DumpMore::1::Foo', qq{use Moose;\n__PACKAGE__->meta->make_immutable;\n1;\n}); |
71130750 |
142 | |
8de81918 |
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 | }, |
8de81918 |
151 | regexes => { |
152 | schema => [ |
7d265d7f |
153 | qr/\nuse Moose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::SchemaBaseClass';\n\n/, |
49643e1d |
154 | qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/, |
8de81918 |
155 | ], |
156 | Foo => [ |
7d265d7f |
157 | qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/, |
8de81918 |
158 | qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/, |
159 | ], |
160 | Bar => [ |
7d265d7f |
161 | qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse MooseX::MarkAsMethods autoclean => 1;\nextends 'My::ResultBaseClass';\n\n/, |
8de81918 |
162 | qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/, |
163 | ], |
164 | }, |
165 | neg_regexes => { |
166 | Foo => [ |
1a8fd949 |
167 | # qr/\nuse Moose;\n.*\nuse Moose;/s, # TODO |
8de81918 |
168 | qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s, |
169 | ], |
170 | }, |
171 | ); |
172 | } |
71130750 |
173 | |
22edddda |
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 | }, |
22edddda |
183 | error => qr/\QIt is not possible to "downgrade" a schema that was loaded with use_moose => 1\E/, |
184 | ); |
185 | |
71130750 |
186 | done_testing; |