0.04001, dump_overwrite -> really_erase_my_files
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 23dumpmore.t
CommitLineData
605fcea8 1use strict;
2use Test::More;
3use lib qw(t/lib);
4use File::Path;
5use make_dbictest_db;
6require DBIx::Class::Schema::Loader;
7
a4187fdf 8plan tests => 40;
605fcea8 9
a4187fdf 10plan skip_all => "ActiveState perl produces additional warnings, and this test uses unix paths"
605fcea8 11 if ($^O eq 'MSWin32');
12
a4187fdf 13my $DUMP_PATH = './t/_dump';
605fcea8 14
15sub do_dump_test {
a4187fdf 16 my %tdata = @_;
605fcea8 17
a4187fdf 18 my $schema_class = $tdata{classname};
605fcea8 19
20 no strict 'refs';
21 @{$schema_class . '::ISA'} = ('DBIx::Class::Schema::Loader');
a4187fdf 22 $schema_class->loader_options(dump_directory => $DUMP_PATH, %{$tdata{options}});
605fcea8 23
a4187fdf 24 my @warns;
605fcea8 25 eval {
a4187fdf 26 local $SIG{__WARN__} = sub { push(@warns, @_) };
605fcea8 27 $schema_class->connect($make_dbictest_db::dsn);
28 };
29 my $err = $@;
30 $schema_class->storage->disconnect if !$err && $schema_class->storage;
31 undef *{$schema_class};
a4187fdf 32
33 is($err, $tdata{error});
34
35 my $check_warns = $tdata{warnings};
36 is(@warns, @$check_warns);
37 for(my $i = 0; $i <= $#$check_warns; $i++) {
38 like($warns[$i], $check_warns->[$i]);
39 }
40
41 my $file_regexes = $tdata{regexes};
42 my $file_neg_regexes = $tdata{neg_regexes} || {};
43 my $schema_regexes = delete $file_regexes->{schema};
44
45 my $schema_path = $DUMP_PATH . '/' . $schema_class;
46 $schema_path =~ s{::}{/}g;
47 dump_file_like($schema_path . '.pm', @$schema_regexes);
48 foreach my $src (keys %$file_regexes) {
49 my $src_file = $schema_path . '/' . $src . '.pm';
50 dump_file_like($src_file, @{$file_regexes->{$src}});
51 }
52 foreach my $src (keys %$file_neg_regexes) {
53 my $src_file = $schema_path . '/' . $src . '.pm';
54 dump_file_not_like($src_file, @{$file_neg_regexes->{$src}});
55 }
605fcea8 56}
57
a4187fdf 58sub dump_file_like {
59 my $path = shift;
60 open(my $dumpfh, '<', $path) or die "Failed to open '$path': $!";
61 my $contents = do { local $/; <$dumpfh>; };
62 close($dumpfh);
63 like($contents, $_) for @_;
64}
605fcea8 65
a4187fdf 66sub dump_file_not_like {
67 my $path = shift;
68 open(my $dumpfh, '<', $path) or die "Failed to open '$path': $!";
69 my $contents = do { local $/; <$dumpfh>; };
70 close($dumpfh);
71 unlike($contents, $_) for @_;
605fcea8 72}
73
a4187fdf 74sub append_to_class {
75 my ($class, $string) = @_;
76 $class =~ s{::}{/}g;
77 $class = $DUMP_PATH . '/' . $class . '.pm';
78 open(my $appendfh, '>>', $class) or die "Failed to open '$class' for append: $!";
79 print $appendfh $string;
80 close($appendfh);
81}
82
83rmtree($DUMP_PATH, 1, 1);
84
85do_dump_test(
86 classname => 'DBICTest::DumpMore::1',
87 options => { },
88 error => '',
89 warnings => [
90 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
91 qr/Schema dump completed/,
92 ],
93 regexes => {
94 schema => [
95 qr/package DBICTest::DumpMore::1;/,
96 qr/->load_classes/,
97 ],
98 Foo => [
99 qr/package DBICTest::DumpMore::1::Foo;/,
100 qr/->set_primary_key/,
101 qr/1;\n$/,
102 ],
103 Bar => [
104 qr/package DBICTest::DumpMore::1::Bar;/,
105 qr/->set_primary_key/,
106 qr/1;\n$/,
107 ],
108 },
109);
110
111append_to_class('DBICTest::DumpMore::1::Foo',q{# XXX This is my custom content XXX});
112
113do_dump_test(
114 classname => 'DBICTest::DumpMore::1',
115 options => { },
116 error => '',
117 warnings => [
118 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
119 qr/Schema dump completed/,
120 ],
121 regexes => {
122 schema => [
123 qr/package DBICTest::DumpMore::1;/,
124 qr/->load_classes/,
125 ],
126 Foo => [
127 qr/package DBICTest::DumpMore::1::Foo;/,
128 qr/->set_primary_key/,
129 qr/1;\n# XXX This is my custom content XXX/,
130 ],
131 Bar => [
132 qr/package DBICTest::DumpMore::1::Bar;/,
133 qr/->set_primary_key/,
134 qr/1;\n$/,
135 ],
136 },
137);
605fcea8 138
a4187fdf 139do_dump_test(
140 classname => 'DBICTest::DumpMore::1',
28b4691d 141 options => { really_erase_my_files => 1 },
a4187fdf 142 error => '',
143 warnings => [
144 qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
145 qr/Deleting existing file /,
146 qr/Deleting existing file /,
147 qr/Deleting existing file /,
148 qr/Schema dump completed/,
149 ],
150 regexes => {
151 schema => [
152 qr/package DBICTest::DumpMore::1;/,
153 qr/->load_classes/,
154 ],
155 Foo => [
156 qr/package DBICTest::DumpMore::1::Foo;/,
157 qr/->set_primary_key/,
158 qr/1;\n$/,
159 ],
160 Bar => [
161 qr/package DBICTest::DumpMore::1::Bar;/,
162 qr/->set_primary_key/,
163 qr/1;\n$/,
164 ],
165 },
166 neg_regexes => {
167 Foo => [
168 qr/# XXX This is my custom content XXX/,
169 ],
170 },
171);
605fcea8 172
a4187fdf 173END { rmtree($DUMP_PATH, 1, 1); }