From: Vincent Pit Date: Wed, 7 Aug 2013 15:54:22 +0000 (-0300) Subject: Update author tests X-Git-Tag: v0.06~6 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FB-RecDeparse.git;a=commitdiff_plain;h=b8e55a18f36d68951a8c75a8b39bd6b05c368eb7 Update author tests --- diff --git a/MANIFEST b/MANIFEST index f6cb4cb..79569d9 100644 --- a/MANIFEST +++ b/MANIFEST @@ -19,4 +19,6 @@ t/20-compile.t t/21-single_delim.t t/91-pod.t t/92-pod-coverage.t +t/93-pod-spelling.t t/95-portability-files.t +t/lib/VPIT/TestHelpers.pm diff --git a/t/91-pod.t b/t/91-pod.t index ee8b18a..3431665 100644 --- a/t/91-pod.t +++ b/t/91-pod.t @@ -2,11 +2,14 @@ use strict; use warnings; + use Test::More; -# Ensure a recent version of Test::Pod -my $min_tp = 1.22; -eval "use Test::Pod $min_tp"; -plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; +use lib 't/lib'; +use VPIT::TestHelpers; + +load_or_skip_all('Test::Pod', '1.22', [ ]); + +eval 'use Test::Pod'; # Make Kwalitee test happy all_pod_files_ok(); diff --git a/t/92-pod-coverage.t b/t/92-pod-coverage.t index b19fa54..e46a14a 100644 --- a/t/92-pod-coverage.t +++ b/t/92-pod-coverage.t @@ -1,16 +1,16 @@ +#!perl -T + use strict; use warnings; + use Test::More; -# Ensure a recent version of Test::Pod::Coverage -my $min_tpc = 1.08; -eval "use Test::Pod::Coverage $min_tpc"; -plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage" if $@; +use lib 't/lib'; +use VPIT::TestHelpers; + +load_or_skip_all('Test::Pod::Coverage', '1.08', [ ]); +load_or_skip_all('Pod::Coverage', '0.18' ); -# Test::Pod::Coverage doesn't require a minimum Pod::Coverage version, -# but older versions don't recognize some common documentation styles -my $min_pc = 0.18; -eval "use Pod::Coverage $min_pc"; -plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" if $@; +eval 'use Test::Pod::Coverage'; # Make Kwalitee test happy all_pod_coverage_ok(); diff --git a/t/93-pod-spelling.t b/t/93-pod-spelling.t new file mode 100644 index 0000000..8173209 --- /dev/null +++ b/t/93-pod-spelling.t @@ -0,0 +1,13 @@ +#!perl + +use strict; +use warnings; + +use Test::More; + +use lib 't/lib'; +use VPIT::TestHelpers; + +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 ab541f3..7119271 100644 --- a/t/95-portability-files.t +++ b/t/95-portability-files.t @@ -5,6 +5,9 @@ use warnings; use Test::More; -eval "use Test::Portability::Files"; -plan skip_all => "Test::Portability::Files required for testing filenames portability" if $@; +use lib 't/lib'; +use VPIT::TestHelpers; + +load_or_skip_all('Test::Portability::Files', undef, [ ]); + run_tests(); diff --git a/t/lib/VPIT/TestHelpers.pm b/t/lib/VPIT/TestHelpers.pm new file mode 100644 index 0000000..3d545e8 --- /dev/null +++ b/t/lib/VPIT/TestHelpers.pm @@ -0,0 +1,115 @@ +package VPIT::TestHelpers; + +use strict; +use warnings; + +my %exports = ( + 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; + } +} + +my $test_sub = sub { + my $sub = shift; + + my $stash; + if ($INC{'Test/Leaner.pm'}) { + $stash = \%Test::Leaner::; + } else { + 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 { + my $diag = $test_sub->('diag'); + $diag->($_) for @_; +} + +our $TODO; +local $TODO; + +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 1)[0]; + local $@; + my $res = eval <<"IMPORTER"; +package + $caller; +BEGIN { \$pkg->import(\@imports) } +1; +IMPORTER + $err = "Could not import '@imports' from $pkg $ver: $@" unless $res; + } + } else { + (my $file = "$pkg.pm") =~ s{::}{/}g; + delete $INC{$file}; + $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; + +sub new { + my ($class, $code) = @_; + + bless { code => $code }, $class; +} + +sub DESTROY { $_[0]->{code}->() } + +1;