]> git.vpit.fr Git - perl/modules/with.git/commitdiff
Update author tests
authorVincent Pit <vince@profvince.com>
Wed, 7 Aug 2013 17:05:17 +0000 (14:05 -0300)
committerVincent Pit <vince@profvince.com>
Wed, 7 Aug 2013 17:05:17 +0000 (14:05 -0300)
MANIFEST
t/91-pod.t
t/92-pod-coverage.t
t/93-pod-spelling.t [new file with mode: 0644]
t/95-portability-files.t
t/lib/VPIT/TestHelpers.pm [new file with mode: 0644]

index 9011d4bb96cdfefedf5ca0a78bb8438b4e9cd383..8e81b40d3a4b9ff09bf10859a07319a8dd8e564e 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -14,5 +14,7 @@ t/13-scope.t
 t/14-defer.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
 t/lib/with/TestClass.pm
index ee8b18ade667c3590c01bc64001d4f9cd19e6bf1..34316658f5439cd1e333a7e2d76246555a7b8987 100644 (file)
@@ -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();
index 4cd3e2fd1436d8976db45afe010a0ff71477ba02..0007dfcd6b85c4b0c8f50d67e006d5a9b12c46ef 100644 (file)
@@ -2,18 +2,16 @@
 
 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(
  { also_private => [ qr/import$/, qw/code corewrap subwrap defer/ ] }
diff --git a/t/93-pod-spelling.t b/t/93-pod-spelling.t
new file mode 100644 (file)
index 0000000..8173209
--- /dev/null
@@ -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();
index ab541f3035c5a7691de45403760618ab068e83a5..711927148554b29fc35624362080396da64d9108 100644 (file)
@@ -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 (file)
index 0000000..3d545e8
--- /dev/null
@@ -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;