]> git.vpit.fr Git - perl/modules/VPIT-TestHelpers.git/commitdiff
Rename load_or_skip to load_or_skip_all, and implement the real load_or_skip
authorVincent Pit <vince@profvince.com>
Wed, 30 Jan 2013 15:59:16 +0000 (13:59 -0200)
committerVincent Pit <vince@profvince.com>
Wed, 30 Jan 2013 16:20:34 +0000 (14:20 -0200)
lib/VPIT/TestHelpers.pm

index 8e056293f5ab422177c0b0fe65a4a4c9bf423a44..3d545e887a78dbdccb62c79c423618bbd12a0629 100644 (file)
@@ -4,8 +4,9 @@ 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 {
@@ -32,6 +33,8 @@ my $test_sub = sub {
  return $glob ? *$glob{CODE} : undef;
 };
 
+sub skip { $test_sub->('skip')->(@_) }
+
 sub skip_all { $test_sub->('plan')->(skip_all => $_[0]) }
 
 sub diag {
@@ -42,9 +45,12 @@ 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"} };
@@ -52,7 +58,7 @@ sub load_or_skip {
 
   if ($imports) {
    my @imports = @$imports;
-   my $caller  = (caller 0)[0];
+   my $caller  = (caller 1)[0];
    local $@;
    my $res = eval <<"IMPORTER";
 package
@@ -60,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;