From: Vincent Pit Date: Wed, 30 Jan 2013 16:23:31 +0000 (-0200) Subject: Update VPIT::TestHelpers to e8344578 X-Git-Tag: rt82562~1 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=commitdiff_plain;h=0d3bbce6be850fc6a0f709e7dfb0c5d8d3718ae3 Update VPIT::TestHelpers to e8344578 --- diff --git a/t/91-pod.t b/t/91-pod.t index c2d16af..3431665 100644 --- a/t/91-pod.t +++ b/t/91-pod.t @@ -8,8 +8,7 @@ use Test::More; use lib 't/lib'; use VPIT::TestHelpers; -load_or_skip('Test::Pod', '1.22', [ ], - 'required for testing POD syntax'); +load_or_skip_all('Test::Pod', '1.22', [ ]); eval 'use Test::Pod'; # Make Kwalitee test happy diff --git a/t/92-pod-coverage.t b/t/92-pod-coverage.t index 6399021..ff5a3d1 100644 --- a/t/92-pod-coverage.t +++ b/t/92-pod-coverage.t @@ -8,10 +8,8 @@ use Test::More; use lib 't/lib'; use VPIT::TestHelpers; -my $desc = 'required for testing POD coverage'; - -load_or_skip('Test::Pod::Coverage', '1.08', [ ], $desc); -load_or_skip('Pod::Coverage', '0.18', undef, $desc); +load_or_skip_all('Test::Pod::Coverage', '1.08', [ ]); +load_or_skip_all('Pod::Coverage', '0.18' ); eval 'use Test::Pod::Coverage'; # Make Kwalitee test happy diff --git a/t/93-pod-spelling.t b/t/93-pod-spelling.t index 1636764..8173209 100644 --- a/t/93-pod-spelling.t +++ b/t/93-pod-spelling.t @@ -8,7 +8,6 @@ use Test::More; use lib 't/lib'; use VPIT::TestHelpers; -load_or_skip('Test::Pod::Spelling::CommonMistakes', '1.0', [ ], - 'required for testing POD spelling'); +load_or_skip_all('Test::Pod::Spelling::CommonMistakes', '1.0', [ ]); all_pod_files_ok(); diff --git a/t/95-portability-files.t b/t/95-portability-files.t index 55a9005..7119271 100644 --- a/t/95-portability-files.t +++ b/t/95-portability-files.t @@ -8,7 +8,6 @@ use Test::More; use lib 't/lib'; use VPIT::TestHelpers; -load_or_skip('Test::Portability::Files', undef, [ ], - 'required for testing filenames portability'); +load_or_skip_all('Test::Portability::Files', undef, [ ]); run_tests(); diff --git a/t/99-kwalitee.t b/t/99-kwalitee.t index 796fe61..337d917 100644 --- a/t/99-kwalitee.t +++ b/t/99-kwalitee.t @@ -12,11 +12,9 @@ my $guard = VPIT::TestHelpers::Guard->new( sub { unlink for glob 'Debian_CPANTS.txt*' } ); -my $desc = 'required to test kwalitee'; - -load_or_skip('Parse::RecDescent', '1.967006', undef, $desc); -load_or_skip('Module::ExtractUse', '0.24', undef, $desc); -load_or_skip('Test::Kwalitee', '1.01', undef, $desc); +load_or_skip_all('Parse::RecDescent', '1.967006'); +load_or_skip_all('Module::ExtractUse', '0.24' ); +load_or_skip_all('Test::Kwalitee', '1.01' ); SKIP: { eval { Test::Kwalitee->import(); }; diff --git a/t/lib/VPIT/TestHelpers.pm b/t/lib/VPIT/TestHelpers.pm index 42ff189..3d545e8 100644 --- a/t/lib/VPIT/TestHelpers.pm +++ b/t/lib/VPIT/TestHelpers.pm @@ -4,12 +4,14 @@ use strict; use warnings; my %exports = ( - load_or_skip => \&load_or_skip, - skip_all => \&skip_all, + load_or_skip => \&load_or_skip, + load_or_skip_all => \&load_or_skip_all, + skip_all => \&skip_all, ); sub import { my $pkg = caller; + while (my ($name, $code) = each %exports) { no strict 'refs'; *{$pkg.'::'.$name} = $code; @@ -18,6 +20,7 @@ sub import { my $test_sub = sub { my $sub = shift; + my $stash; if ($INC{'Test/Leaner.pm'}) { $stash = \%Test::Leaner::; @@ -25,10 +28,13 @@ my $test_sub = sub { require Test::More; $stash = \%Test::More::; } + my $glob = $stash->{$sub}; return $glob ? *$glob{CODE} : undef; }; +sub skip { $test_sub->('skip')->(@_) } + sub skip_all { $test_sub->('plan')->(skip_all => $_[0]) } sub diag { @@ -39,16 +45,20 @@ sub diag { our $TODO; local $TODO; -sub load_or_skip { - my ($pkg, $ver, $imports, $desc) = @_; +sub load { + my ($pkg, $ver, $imports) = @_; + my $spec = $ver && $ver !~ /^[0._]*$/ ? "$pkg $ver" : $pkg; + my $err; + local $@; if (eval "use $spec (); 1") { $ver = do { no strict 'refs'; ${"${pkg}::VERSION"} }; $ver = 'undef' unless defined $ver; + if ($imports) { my @imports = @$imports; - my $caller = (caller 0)[0]; + my $caller = (caller 1)[0]; local $@; my $res = eval <<"IMPORTER"; package @@ -56,14 +66,40 @@ package BEGIN { \$pkg->import(\@imports) } 1; IMPORTER - skip_all "Could not import '@imports' from $pkg $ver: $@" unless $res; + $err = "Could not import '@imports' from $pkg $ver: $@" unless $res; } - diag "Using $pkg $ver"; } else { (my $file = "$pkg.pm") =~ s{::}{/}g; delete $INC{$file}; - skip_all "$spec $desc"; + $err = "Could not load $spec"; } + + if ($err) { + return wantarray ? (0, $err) : 0; + } else { + diag "Using $pkg $ver"; + return 1; + } +} + +sub load_or_skip { + my ($pkg, $ver, $imports, $tests) = @_; + + die 'You must specify how many tests to skip' unless defined $tests; + + my ($loaded, $err) = load($pkg, $ver, $imports); + skip $err => $tests unless $loaded; + + return $loaded; +} + +sub load_or_skip_all { + my ($pkg, $ver, $imports) = @_; + + my ($loaded, $err) = load($pkg, $ver, $imports); + skip_all $err unless $loaded; + + return $loaded; } package VPIT::TestHelpers::Guard; diff --git a/t/lib/indirect/TestThreads.pm b/t/lib/indirect/TestThreads.pm index 8a93dca..da805c0 100644 --- a/t/lib/indirect/TestThreads.pm +++ b/t/lib/indirect/TestThreads.pm @@ -20,8 +20,7 @@ sub import { skip_all 'perl 5.13.4 required to test thread safety' unless $force or "$]" >= 5.013004; - load_or_skip('threads', $force ? '0' : '1.67', [ ], - 'required to test thread safety'); + load_or_skip_all('threads', $force ? '0' : '1.67', [ ]); my %exports = ( spawn => \&spawn,