1 package VPIT::TestHelpers;
11 while (my ($name, $code) = each %$subs) {
13 *{$pkg.'::'.$name} = $code;
20 load_or_skip => \&load_or_skip,
21 load_or_skip_all => \&load_or_skip_all,
22 run_perl => \&run_perl,
23 skip_all => \&skip_all,
29 export_to_pkg \%exports => $pkg;
36 if ($INC{'Test/Leaner.pm'}) {
37 $stash = \%Test::Leaner::;
40 $stash = \%Test::More::;
43 my $glob = $stash->{$sub};
44 return $glob ? *$glob{CODE} : undef;
47 sub skip { $test_sub->('skip')->(@_) }
49 sub skip_all { $test_sub->('plan')->(skip_all => $_[0]) }
52 my $diag = $test_sub->('diag');
60 my ($pkg, $ver, $imports) = @_;
62 my $spec = $ver && $ver !~ /^[0._]*$/ ? "$pkg $ver" : $pkg;
66 if (eval "use $spec (); 1") {
67 $ver = do { no strict 'refs'; ${"${pkg}::VERSION"} };
68 $ver = 'undef' unless defined $ver;
71 my @imports = @$imports;
72 my $caller = (caller 1)[0];
74 my $res = eval <<"IMPORTER";
77 BEGIN { \$pkg->import(\@imports) }
80 $err = "Could not import '@imports' from $pkg $ver: $@" unless $res;
83 (my $file = "$pkg.pm") =~ s{::}{/}g;
85 $err = "Could not load $spec";
89 return wantarray ? (0, $err) : 0;
91 diag "Using $pkg $ver";
97 my ($pkg, $ver, $imports, $tests) = @_;
99 die 'You must specify how many tests to skip' unless defined $tests;
101 my ($loaded, $err) = load($pkg, $ver, $imports);
102 skip $err => $tests unless $loaded;
107 sub load_or_skip_all {
108 my ($pkg, $ver, $imports) = @_;
110 my ($loaded, $err) = load($pkg, $ver, $imports);
111 skip_all $err unless $loaded;
119 my ($SystemRoot, $PATH) = @ENV{qw<SystemRoot PATH>};
120 my $ld_name = $Config::Config{ldlibpthname};
121 my $ldlibpth = $ENV{$ld_name};
124 $ENV{$ld_name} = $ldlibpth if defined $ldlibpth;
125 $ENV{SystemRoot} = $SystemRoot if $^O eq 'MSWin32' and defined $SystemRoot;
126 $ENV{PATH} = $PATH if $^O eq 'cygwin' and defined $PATH;
128 system { $^X } $^X, '-T', map("-I$_", @INC), '-e', $code;
131 package VPIT::TestHelpers::Guard;
134 my ($class, $code) = @_;
136 bless { code => $code }, $class;
139 sub DESTROY { $_[0]->{code}->() }