]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Update how author tests load their dependencies
authorVincent Pit <vince@profvince.com>
Mon, 20 Aug 2012 17:03:06 +0000 (19:03 +0200)
committerVincent Pit <vince@profvince.com>
Mon, 20 Aug 2012 17:22:27 +0000 (19:22 +0200)
Also make sure that the kwalitee test unlinks its byproducts.

MANIFEST
t/16-huf.t
t/34-glob.t
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/99-kwalitee.t
t/lib/VPIT/TestHelpers.pm [new file with mode: 0644]
t/lib/Variable/Magic/TestThreads.pm

index 8d8762f2a3330dde41a27f3ca0ad96a7c7eaa10c..98872646148ae31fbcdfceb9defe5ef746c3fcc0 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -41,8 +41,10 @@ t/41-clone.t
 t/80-leaks.t
 t/91-pod.t
 t/92-pod-coverage.t
+t/93-pod-spelling.t
 t/95-portability-files.t
 t/99-kwalitee.t
+t/lib/VPIT/TestHelpers.pm
 t/lib/Variable/Magic/TestDestroyRequired.pm
 t/lib/Variable/Magic/TestGlobalDestruction.pm
 t/lib/Variable/Magic/TestScopeEnd.pm
index af9e74022a62ef2513bc2731c114f18ccd364f49..0f9215c689a217f38af86d135a516ae8ed3bc179 100644 (file)
@@ -7,22 +7,17 @@ use Test::More;
 
 use Variable::Magic qw<wizard cast dispell VMG_UVAR>;
 
-if (!VMG_UVAR) {
- plan skip_all => 'No nice uvar magic for this perl';
-}
-
-{
- local $@;
- if (eval { require Hash::Util::FieldHash; 1 }) {
-  plan tests => 2 * 5 + 7 + 1;
-  defined and diag "Using Hash::Util::FieldHash $_"
-                                            for $Hash::Util::FieldHash::VERSION;
- } else {
-  plan skip_all => 'Hash::Util::FieldHash required for testing uvar interaction'
- }
+use lib 't/lib';
+use VPIT::TestHelpers;
+
+if (VMG_UVAR) {
+ load_or_skip('Hash::Util::FieldHash', undef, [ ],
+              'required for testing uvar interaction');
+ plan tests => 2 * 5 + 7 + 1;
+} else {
+ skip_all 'No nice uvar magic for this perl';
 }
 
-use lib 't/lib';
 use Variable::Magic::TestWatcher;
 
 my $wiz = init_watcher [ qw<fetch store> ], 'huf';
index 1fe3df7b2cbc2b6030fcbecf19bec05c7af7a862..2e1a441a56b3c9cb10e5825cf5a1d8af4bb26339 100644 (file)
@@ -5,14 +5,14 @@ use warnings;
 
 use Test::More;
 
+use lib 't/lib';
+use VPIT::TestHelpers;
+
 BEGIN {
- local $@;
- if (eval "use Symbol qw<gensym>; 1") {
-  plan tests => 2 * 17 + 1;
-  defined and diag "Using Symbol $_" for $Symbol::VERSION;
- } else {
-  plan skip_all => "Symbol::gensym required for testing magic for globs";
- }
+ load_or_skip('Symbol', undef, [ 'gensym' ],
+              'required for testing magic for globs');
+
+ plan tests => 2 * 17 + 1;
 }
 
 use Variable::Magic qw<cast dispell VMG_COMPAT_GLOB_GET>;
index f1e1d3e375d2b802ad35abd32ba55f7f5eddacae..3b6c320f4344b67bfba37c6b35aa35d0894492e8 100644 (file)
@@ -5,6 +5,12 @@ use warnings;
 
 use Test::More;
 
-eval "use Test::Pod 1.14";
-plan skip_all => "Test::Pod 1.14 required for testing POD" if $@;
+use lib 't/lib';
+use VPIT::TestHelpers;
+
+load_or_skip('Test::Pod', '1.14', [ ],
+             'required for testing POD syntax');
+
+eval 'use Test::Pod'; # Make Kwalitee test happy
+
 all_pod_files_ok();
index 2f7bde28f155796dc4d9635b1a6af951666472d2..4ee6317e8e1bae62b03e4dedca6efd241d4acca9 100644 (file)
@@ -5,6 +5,12 @@ use warnings;
 
 use Test::More;
 
-eval "use Test::Pod::Coverage 1.04";
-plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage" if $@;
+use lib 't/lib';
+use VPIT::TestHelpers;
+
+load_or_skip('Test::Pod::Coverage', '1.04', [ ],
+             'required for testing POD coverage');
+
+eval 'use Test::Pod::Coverage'; # Make Kwalitee test happy
+
 all_pod_coverage_ok( { also_private => [ qr/^_/, qr/^CLONE(_SKIP)?$/ ] } );
diff --git a/t/93-pod-spelling.t b/t/93-pod-spelling.t
new file mode 100644 (file)
index 0000000..acb2587
--- /dev/null
@@ -0,0 +1,14 @@
+#!perl -T
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use lib 't/lib';
+use VPIT::TestHelpers;
+
+load_or_skip('Test::Pod::Spelling::CommonMistakes', '1.0', [ ],
+             'required for testing POD spelling');
+
+all_pod_files_ok();
index ab541f3035c5a7691de45403760618ab068e83a5..55a900519fec914952ad4fbb9a6ed6fee0944f68 100644 (file)
@@ -5,6 +5,10 @@ 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('Test::Portability::Files', undef, [ ],
+             'required for testing filenames portability');
+
 run_tests();
index 4a664573fa9b2090bad47cd5c9343c7b509121ff..a448a64368e35ff541ac57eb463e0ab06989b674 100644 (file)
@@ -5,14 +5,18 @@ use warnings;
 
 use Test::More;
 
-eval { require Parse::RecDescent; 'Parse::RecDescent'->VERSION('1.967006') }
-  or plan skip_all => 'Parse::RecDescent version 1.967006 or greater required';
+use lib 't/lib';
+use VPIT::TestHelpers;
 
-eval { require Module::ExtractUse; 'Module::ExtractUse'->VERSION('0.24') }
-  or plan skip_all => 'Module::ExtractUse version 0.24 or greater required';
+my $guard = VPIT::TestHelpers::Guard->new(
+ sub { unlink for glob 'Debian_CPANTS.txt*' }
+);
 
-eval { require Test::Kwalitee; 1 }
-  or plan skip_all => 'Test::Kwalitee required';
+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',     undef,      undef, $desc);
 
 SKIP: {
  eval { Test::Kwalitee->import(); };
diff --git a/t/lib/VPIT/TestHelpers.pm b/t/lib/VPIT/TestHelpers.pm
new file mode 100644 (file)
index 0000000..18f2b17
--- /dev/null
@@ -0,0 +1,68 @@
+package VPIT::TestHelpers;
+
+use strict;
+use warnings;
+
+my %exports = (
+ load_or_skip => \&load_or_skip,
+ skip_all     => \&skip_all,
+);
+
+sub import {
+ my $pkg = caller;
+ while (my ($name, $code) = each %exports) {
+  no strict 'refs';
+  *{$pkg.'::'.$name} = $code;
+ }
+}
+
+sub skip_all {
+ my ($msg) = @_;
+ require Test::More;
+ Test::More::plan(skip_all => $msg);
+}
+
+sub diag {
+ require Test::More;
+ Test::More::diag($_) for @_;
+}
+
+our $TODO;
+local $TODO;
+
+sub load_or_skip {
+ my ($pkg, $ver, $imports, $desc) = @_;
+ my $spec = $ver && $ver !~ /^[0._]*$/ ? "$pkg $ver" : $pkg;
+ 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];
+   local $@;
+   my $res = eval <<"IMPORTER";
+package
+        $caller;
+BEGIN { \$pkg->import(\@imports) }
+1;
+IMPORTER
+   skip_all "Could not import '@imports' from $pkg $ver: $@" unless $res;
+  }
+  diag "Using $pkg $ver";
+ } else {
+  skip_all "$spec $desc";
+ }
+}
+
+package VPIT::TestHelpers::Guard;
+
+sub new {
+ my ($class, $code) = @_;
+
+ bless { code => $code }, $class;
+}
+
+sub DESTROY { $_[0]->{code}->() }
+
+1;
index f3ebc5d0960f33062af66395fec7c143e9fe0a88..a11bae7bf815cee39f2584fb2074eb5e34322b17 100644 (file)
@@ -7,11 +7,7 @@ use Config qw<%Config>;
 
 use Variable::Magic qw<VMG_THREADSAFE>;
 
-sub skipall {
- my ($msg) = @_;
- require Test::More;
- Test::More::plan(skip_all => $msg);
-}
+use VPIT::TestHelpers;
 
 sub diag {
  require Test::More;
@@ -21,31 +17,17 @@ sub diag {
 sub import {
  shift;
 
- skipall 'This Variable::Magic isn\'t thread safe' unless VMG_THREADSAFE;
+ skip_all 'This Variable::Magic isn\'t thread safe' unless VMG_THREADSAFE;
 
  my $force = $ENV{PERL_VARIABLE_MAGIC_TEST_THREADS} ? 1 : !1;
- skipall 'This perl wasn\'t built to support threads'
+ skip_all 'This perl wasn\'t built to support threads'
                                                     unless $Config{useithreads};
- skipall 'perl 5.13.4 required to test thread safety'
+ skip_all 'perl 5.13.4 required to test thread safety'
                                              unless $force or "$]" >= 5.013_004;
 
- my $t_v = $force ? '0' : '1.67';
- my $has_threads =  do {
-  local $@;
-  eval "use threads $t_v; 1";
- };
- skipall "threads $t_v required to test thread safety" unless $has_threads;
-
- my $ts_v = $force ? '0' : '1.14';
- my $has_threads_shared =  do {
-  local $@;
-  eval "use threads::shared $ts_v; 1";
- };
- skipall "threads::shared $ts_v required to test thread safety"
-                                                     unless $has_threads_shared;
-
- defined and diag "Using threads $_"         for $threads::VERSION;
- defined and diag "Using threads::shared $_" for $threads::shared::VERSION;
+ my $desc = 'required to test thread safety';
+ load_or_skip('threads',         $force ? '0' : '1.67', [ ], $desc);
+ load_or_skip('threads::shared', $force ? '0' : '1.14', [ ], $desc);
 
  my %exports = (
   spawn => \&spawn,