add asterisks to items in POD class lists
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 26dump_use_moose.t
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',
25     result_roles => ['TestRole', 'TestRole2'],
26   },
27   warnings => [
28     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
29     qr/Schema dump completed/,
30   ],
31   regexes => {
32     schema => [
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.*/,
35     ],
36     Foo => [
37       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
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/,
39       qr/\nwith 'TestRole', 'TestRole2';\n\n/,
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/,
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/,
45       qr/\nwith 'TestRole', 'TestRole2';\n\n/,
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 => {
57     use_moose => 0,
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 => [
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.*/,
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.*/,
100       qr/# XXX This is my custom content XXX/,
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
111 # check with a fresh non-moose schema that Moose custom content added to a use_moose=0 schema is not repeated
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
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     warnings => [
149       qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
150       qr/Schema dump completed/,
151     ],
152     regexes => {
153       schema => [
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.*/,
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 => [
168 #        qr/\nuse Moose;\n.*\nuse Moose;/s, # TODO
169         qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
170       ],
171     },
172   );
173 }
174
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
190 done_testing;