X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F22dump.t;h=1f4e0dbbbb64d781485cce31d391df04f695a4cb;hb=494e020541e534ac7a097872eeeb344a0b13ec5a;hp=47106a9a6d9691f4de461b42fd9d766395e41639;hpb=e682950b7639702c19753fd0d9a80778083c6bd7;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/22dump.t b/t/22dump.t index 47106a9..1f4e0db 100644 --- a/t/22dump.t +++ b/t/22dump.t @@ -1,16 +1,20 @@ use strict; +use warnings; use Test::More; +use Test::Exception; +use Test::Warn; use lib qw(t/lib); use File::Path; use make_dbictest_db; +use dbixcsl_test_dir qw/$tdir/; + +my $dump_path = "$tdir/dump"; -my $dump_path = './t/_dump'; { package DBICTest::Schema::1; use base qw/ DBIx::Class::Schema::Loader /; __PACKAGE__->loader_options( - relationships => 1, dump_directory => $dump_path, ); } @@ -19,48 +23,72 @@ my $dump_path = './t/_dump'; package DBICTest::Schema::2; use base qw/ DBIx::Class::Schema::Loader /; __PACKAGE__->loader_options( - relationships => 1, dump_directory => $dump_path, - dump_overwrite => 1, + really_erase_my_files => 1, ); } -plan tests => 8; - rmtree($dump_path, 1, 1); -eval { DBICTest::Schema::1->connect($make_dbictest_db::dsn) }; -ok(!$@, 'no death with dump_directory set') or diag "Dump failed: $@"; +lives_ok { + warnings_exist { DBICTest::Schema::1->connect($make_dbictest_db::dsn) } + [ qr|^Dumping manual schema|, qr|^Schema dump completed| ]; +} 'no death with dump_directory set' or diag "Dump failed: $@"; + +is_deeply( + [ sort @{ DBICTest::Schema::1->loader->generated_classes } ], + [ sort 'DBICTest::Schema::1', map "DBICTest::Schema::1::Result::$_", qw(Foo Bar) ], + 'generated_classes has schema and result classes' +); -DBICTest::Schema::1->loader(undef); +DBICTest::Schema::1->_loader_invoked(undef); SKIP: { - skip "ActiveState perl produces additional warnings", 5 - if ($^O eq 'MSWin32'); - - my @warn_output; - { - local $SIG{__WARN__} = sub { push(@warn_output, @_) }; - DBICTest::Schema::1->connect($make_dbictest_db::dsn); - } - my @warnings_regexes = ( - qr|Dumping manual schema|, - (qr|DBICTest/Schema/1.*?.pm exists, will not overwrite|) x 3, - qr|Schema dump completed|, - ); - - like(shift @warn_output, $_) foreach (@warnings_regexes); - - rmtree($dump_path, 1, 1); + skip "ActiveState perl produces additional warnings", 1 + if ($^O eq 'MSWin32'); + + warnings_exist { DBICTest::Schema::1->connect($make_dbictest_db::dsn) } + [ qr|^Dumping manual schema|, qr|^Schema dump completed| ]; + + is_deeply( + [ sort @{ DBICTest::Schema::1->loader->generated_classes } ], + [ ], + 'no classes generated on second dump' + ); + + rmtree($dump_path, 1, 1); } -eval { DBICTest::Schema::2->connect($make_dbictest_db::dsn) }; -ok(!$@, 'no death with dump_directory set (overwrite1)') - or diag "Dump failed: $@"; +lives_ok { + warnings_exist { DBICTest::Schema::2->connect($make_dbictest_db::dsn) } + [ qr|^Dumping manual schema|, qr|^Schema dump completed| ]; +} 'no death with dump_directory set (overwrite1)' or diag "Dump failed: $@"; + +is_deeply( + [ sort @{ DBICTest::Schema::2->loader->generated_classes } ], + [ sort 'DBICTest::Schema::2', map "DBICTest::Schema::2::Result::$_", qw(Foo Bar) ], + 'generated_classes has schema and result classes' +); + +DBICTest::Schema::2->_loader_invoked(undef); + +lives_ok { + warnings_exist { DBICTest::Schema::2->connect($make_dbictest_db::dsn) } + [ + qr/^Dumping manual schema/, + qr|^Deleting .+Schema/2.+ due to 'really_erase_my_files'|, + qr|^Deleting .+Schema/2/Result/Foo.+ due to 'really_erase_my_files'|, + qr|^Deleting .+Schema/2/Result/Bar.+ due to 'really_erase_my_files'|, + qr/^Schema dump completed/ + ]; +} 'no death with dump_directory set (overwrite2)' or diag "Dump failed: $@"; + +is_deeply( + [ sort @{ DBICTest::Schema::2->loader->generated_classes } ], + [ sort 'DBICTest::Schema::2', map "DBICTest::Schema::2::Result::$_", qw(Foo Bar) ], + 'all classes regenerated with really_erase_my_files', +); -DBICTest::Schema::2->loader(undef); -eval { DBICTest::Schema::2->connect($make_dbictest_db::dsn) }; -ok(!$@, 'no death with dump_directory set (overwrite2)') - or diag "Dump failed: $@"; +done_testing(); END { rmtree($dump_path, 1, 1); }