]> git.vpit.fr Git - perl/modules/VPIT-TestHelpers.git/commitdiff
Initial commit
authorVincent Pit <vince@profvince.com>
Fri, 7 Sep 2012 11:26:28 +0000 (13:26 +0200)
committerVincent Pit <vince@profvince.com>
Fri, 7 Sep 2012 11:26:28 +0000 (13:26 +0200)
lib/VPIT/TestHelpers.pm [new file with mode: 0644]

diff --git a/lib/VPIT/TestHelpers.pm b/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;