use
5.008001;
our
@ISA
=
qw/Exporter/
;
our
@EXPORT
=
qw(
exception
pushd
tempd
has_symlinks
)
;
BEGIN {
}
sub
has_symlinks {
return
$Config
{d_symlink}
unless
$^O eq
'msys'
|| $^O eq
'MSWin32'
;
if
($^O eq
'msys'
) {
return
unless
$Config
{d_symlink};
return
$ENV
{MSYS} =~ /winsymlinks:nativestrict/;
}
elsif
($^O eq
'MSWin32'
) {
my
$wd
=tempd();
open
my
$fh
,
">"
,
"foo"
;
return
eval
{
symlink
"foo"
,
"bar"
};
}
}
sub
exception(&) {
my
$code
=
shift
;
my
$success
=
eval
{
$code
->(); 1 };
my
$err
= $@;
return
''
if
$success
;
croak
"Execution died, but the error was lost"
unless
$@;
return
$@;
}
sub
tempd {
return
pushd( File::Temp->newdir );
}
sub
pushd {
my
$temp
=
shift
;
my
$guard
= TestUtils::_Guard->new(
{
temp
=>
$temp
,
origin
=> getcwd(),
code
=>
sub
{
chdir
$_
[0]{origin} },
}
);
chdir
$guard
->{temp}
or croak(
"Couldn't chdir: $!"
);
return
$guard
;
}
sub
new {
bless
$_
[1],
$_
[0] }
sub
DESTROY {
$_
[0]{code}->(
$_
[0] ) }
1;