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