X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2Fdbixcsl_dumper_tests.pm;h=912cb1717ca493d8310f35a097352bf61088f186;hb=46e71a1b3527936e885facc87a97c586d25ecc67;hp=32bf28ce2478e77950b4c8d01883ed7835d3e2f0;hpb=8fc55df0ce3bcd9fbcb73db7d3c8ec3f7b9b1b4d;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/lib/dbixcsl_dumper_tests.pm b/t/lib/dbixcsl_dumper_tests.pm index 32bf28c..912cb17 100644 --- a/t/lib/dbixcsl_dumper_tests.pm +++ b/t/lib/dbixcsl_dumper_tests.pm @@ -1,13 +1,15 @@ package dbixcsl_dumper_tests; use strict; +use warnings; use Test::More; use File::Path; use IPC::Open3; use IO::Handle; -use List::MoreUtils 'any'; +use List::Util 'any'; use DBIx::Class::Schema::Loader::Utils 'dumper_squashed'; use DBIx::Class::Schema::Loader (); +use Class::Unload (); use namespace::clean; use dbixcsl_test_dir '$tdir'; @@ -18,12 +20,24 @@ sub cleanup { rmtree($DUMP_PATH, 1, 1); } -sub append_to_class { - my ($self, $class, $string) = @_; +sub class_file { + my ($self, $class) = @_; + $class =~ s{::}{/}g; $class = $DUMP_PATH . '/' . $class . '.pm'; + + return $class; +} + +sub append_to_class { + my ($self, $class, $string) = @_; + + $class = $self->class_file($class); + open(my $appendfh, '>>', $class) or die "Failed to open '$class' for append: $!"; + print $appendfh $string; + close($appendfh); } @@ -35,12 +49,8 @@ sub dump_test { $tdata{options}{use_namespaces} ||= 0; SKIP: for my $dumper (\&_dump_directly, \&_dump_dbicdump) { - skip 'fucking pigs broke my Win32 perl', 1, - if $dumper == \&_dump_dbicdump - && $^O eq 'MSWin32' - && $ENV{FUCKING_PIGS} - && ( (any { ref $_ } values %{ $tdata{options} }) - || any { ref $_ } _get_connect_info(\%tdata)); + skip 'skipping dbicdump tests on Win32', 1, + if $dumper == \&_dump_dbicdump && $^O eq 'MSWin32'; _test_dumps(\%tdata, $dumper->(%tdata)); } @@ -55,8 +65,8 @@ sub _dump_directly { no strict 'refs'; @{$schema_class . '::ISA'} = ('DBIx::Class::Schema::Loader'); $schema_class->loader_options( - quiet => 1, - %{$tdata{options}}, + quiet => 1, + %{$tdata{options}}, ); my @warns; @@ -66,12 +76,13 @@ sub _dump_directly { }; my $err = $@; - $schema_class->storage->disconnect if !$err && $schema_class->storage; - undef *{$schema_class}; + my $classes = !$err && $schema_class->loader->generated_classes; + + Class::Unload->unload($schema_class); _check_error($err, $tdata{error}); - return @warns; + return \@warns, $classes; } sub _dump_dbicdump { @@ -84,7 +95,14 @@ sub _dump_dbicdump { while (my ($opt, $val) = each(%{ $tdata{options} })) { $val = dumper_squashed $val if ref $val; - push @cmd, '-o', "$opt=$val"; + + my $param = "$opt=$val"; + + if ($^O eq 'MSWin32') { + $param = q{"} . $param . q{"}; # that's not nearly enough... + } + + push @cmd, '-o', $param; } my @connect_info = _get_connect_info(\%tdata); @@ -113,7 +131,7 @@ sub _dump_dbicdump { _check_error($exception, $tdata{error}); } - return @warnings; + return \@warnings; } sub _get_connect_info { @@ -151,18 +169,27 @@ sub _check_error { } sub _test_dumps { - my ($tdata, @warns) = @_; + my ($tdata, $warns, $classes) = @_; my %tdata = %{$tdata}; my $schema_class = $tdata{classname}; my $check_warns = $tdata{warnings}; - is(@warns, @$check_warns, "$schema_class warning count") - or diag @warns; + is(@$warns, @$check_warns, "$schema_class warning count") + or diag @$warns; for(my $i = 0; $i <= $#$check_warns; $i++) { - like(($warns[$i] || ''), $check_warns->[$i], "$schema_class warning $i"); + like(($warns->[$i] || ''), $check_warns->[$i], "$schema_class warning $i"); + } + + if ($classes && (my $results = $tdata{generated_results})) { + my $ns = $tdata{options}{use_namespaces} ? ("::".($tdata{result_namespace} || "Result")) : ""; + is_deeply( + [ sort grep { $_ ne $schema_class } @$classes ], + [ sort map { "${schema_class}${ns}::$_" } @$results ], + "$schema_class generated_classes set correctly", + ); } my $file_regexes = $tdata{regexes}; @@ -184,19 +211,21 @@ sub _test_dumps { } } -sub _dump_file_like { +sub _slurp { my $path = shift; - open(my $dumpfh, '<', $path) or die "Failed to open '$path': $!"; + open(my $dumpfh, '<:raw', $path) or die "Failed to open '$path': $!"; my $contents = do { local $/; <$dumpfh>; }; close($dumpfh); + return ($path, $contents); +} + +sub _dump_file_like { + my ($path, $contents) = _slurp shift; like($contents, $_, "$path matches $_") for @_; } sub _dump_file_not_like { - my $path = shift; - open(my $dumpfh, '<', $path) or die "Failed to open '$path': $!"; - my $contents = do { local $/; <$dumpfh>; }; - close($dumpfh); + my ($path, $contents) = _slurp shift; unlike($contents, $_, "$path does not match $_") for @_; }