1 package VPIT::TestHelpers;
7 load_or_skip => \&load_or_skip,
8 load_or_skip_all => \&load_or_skip_all,
9 run_perl => \&run_perl,
10 skip_all => \&skip_all,
16 while (my ($name, $code) = each %exports) {
18 *{$pkg.'::'.$name} = $code;
26 if ($INC{'Test/Leaner.pm'}) {
27 $stash = \%Test::Leaner::;
30 $stash = \%Test::More::;
33 my $glob = $stash->{$sub};
34 return $glob ? *$glob{CODE} : undef;
37 sub skip { $test_sub->('skip')->(@_) }
39 sub skip_all { $test_sub->('plan')->(skip_all => $_[0]) }
42 my $diag = $test_sub->('diag');
50 my ($pkg, $ver, $imports) = @_;
52 my $spec = $ver && $ver !~ /^[0._]*$/ ? "$pkg $ver" : $pkg;
56 if (eval "use $spec (); 1") {
57 $ver = do { no strict 'refs'; ${"${pkg}::VERSION"} };
58 $ver = 'undef' unless defined $ver;
61 my @imports = @$imports;
62 my $caller = (caller 1)[0];
64 my $res = eval <<"IMPORTER";
67 BEGIN { \$pkg->import(\@imports) }
70 $err = "Could not import '@imports' from $pkg $ver: $@" unless $res;
73 (my $file = "$pkg.pm") =~ s{::}{/}g;
75 $err = "Could not load $spec";
79 return wantarray ? (0, $err) : 0;
81 diag "Using $pkg $ver";
87 my ($pkg, $ver, $imports, $tests) = @_;
89 die 'You must specify how many tests to skip' unless defined $tests;
91 my ($loaded, $err) = load($pkg, $ver, $imports);
92 skip $err => $tests unless $loaded;
97 sub load_or_skip_all {
98 my ($pkg, $ver, $imports) = @_;
100 my ($loaded, $err) = load($pkg, $ver, $imports);
101 skip_all $err unless $loaded;
109 my ($SystemRoot, $PATH) = @ENV{qw<SystemRoot PATH>};
111 $ENV{SystemRoot} = $SystemRoot if $^O eq 'MSWin32' and defined $SystemRoot;
112 $ENV{PATH} = $PATH if $^O eq 'cygwin' and defined $PATH;
114 system { $^X } $^X, '-T', map("-I$_", @INC), '-e', $code;
117 package VPIT::TestHelpers::Guard;
120 my ($class, $code) = @_;
122 bless { code => $code }, $class;
125 sub DESTROY { $_[0]->{code}->() }