workaround for common tests for MySQL on Win32
[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',
06e06245 25 result_roles => ['TestRole', 'TestRole2'],
71130750 26 },
27 warnings => [
28 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
29 qr/Schema dump completed/,
30 ],
31 regexes => {
32 schema => [
49643e1d 33 qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
34 qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
71130750 35 ],
36 Foo => [
37 qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
017d9734 38 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 39 qr/\nwith 'TestRole', 'TestRole2';\n\n/,
71130750 40 qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
41 ],
42 Bar => [
43 qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
017d9734 44 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 45 qr/\nwith 'TestRole', 'TestRole2';\n\n/,
71130750 46 qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
47 ],
48 },
49);
50
51$t->cleanup;
52
53# now upgrade a fresh non-moose schema to use_moose=1
54$t->dump_test(
55 classname => 'DBICTest::DumpMore::1',
56 options => {
22edddda 57 use_moose => 0,
71130750 58 result_base_class => 'My::ResultBaseClass',
59 schema_base_class => 'My::SchemaBaseClass',
60 },
61 warnings => [
62 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
63 qr/Schema dump completed/,
64 ],
65 regexes => {
66 schema => [
67 qr/\nuse base 'My::SchemaBaseClass';\n/,
68 ],
69 Foo => [
70 qr/\nuse base 'My::ResultBaseClass';\n/,
71 ],
72 Bar => [
73 qr/\nuse base 'My::ResultBaseClass';\n/,
74 ],
75 },
76);
77
78# check that changed custom content is upgraded for Moose bits
79$t->append_to_class('DBICTest::DumpMore::1::Foo', q{# XXX This is my custom content XXX});
80
81$t->dump_test(
82 classname => 'DBICTest::DumpMore::1',
83 options => {
84 use_moose => 1,
85 result_base_class => 'My::ResultBaseClass',
86 schema_base_class => 'My::SchemaBaseClass',
87 },
88 warnings => [
89 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
90 qr/Schema dump completed/,
91 ],
92 regexes => {
93 schema => [
49643e1d 94 qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
95 qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
71130750 96 ],
97 Foo => [
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.*/,
1a8fd949 100 qr/# XXX This is my custom content XXX/,
71130750 101 ],
102 Bar => [
103 qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
104 qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
105 ],
106 },
107);
108
109$t->cleanup;
110
1a8fd949 111# check with a fresh non-moose schema that Moose custom content added to a use_moose=0 schema is not repeated
71130750 112$t->dump_test(
113 classname => 'DBICTest::DumpMore::1',
114 options => {
115 result_base_class => 'My::ResultBaseClass',
116 schema_base_class => 'My::SchemaBaseClass',
117 },
118 warnings => [
119 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
120 qr/Schema dump completed/,
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
8de81918 136# after that regen again *without* the use_moose flag, make
137# sure moose isn't stripped away
1a8fd949 138$t->append_to_class('DBICTest::DumpMore::1::Foo', qq{use Moose;\n__PACKAGE__->meta->make_immutable;\n1;\n});
71130750 139
8de81918 140for 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 warnings => [
149 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
150 qr/Schema dump completed/,
151 ],
152 regexes => {
153 schema => [
49643e1d 154 qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
155 qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
8de81918 156 ],
157 Foo => [
158 qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
159 qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
160 ],
161 Bar => [
162 qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
163 qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
164 ],
165 },
166 neg_regexes => {
167 Foo => [
1a8fd949 168# qr/\nuse Moose;\n.*\nuse Moose;/s, # TODO
8de81918 169 qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
170 ],
171 },
172 );
173}
71130750 174
22edddda 175# check that a moose schema can *not* be downgraded
176
177$t->dump_test (
178 classname => 'DBICTest::DumpMore::1',
179 options => {
180 use_moose => 0,
181 result_base_class => 'My::ResultBaseClass',
182 schema_base_class => 'My::SchemaBaseClass',
183 },
184 warnings => [
185 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
186 ],
187 error => qr/\QIt is not possible to "downgrade" a schema that was loaded with use_moose => 1\E/,
188);
189
71130750 190done_testing;