BEGIN {
push
@INC
,
$FindBin::Bin
}
chdir
$FindBin::RealBin
;
unless
( -w
$FindBin::RealBin
) {
plan
skip_all
=>
"Can't write to $FindBin::RealBin"
;
exit
;
}
plan
tests
=> 6;
*::DumpFile =
*YAML::Syck::DumpFile
;
sub
file_contents_is {
my
(
$fn
,
$expected
,
$test_name
) =
@_
;
local
*FH
;
open
FH,
$fn
or
die
$!;
my
$contents
=
do
{
local
$/; <FH> };
is(
$contents
,
$expected
,
$test_name
);
close
FH;
}
my
$scalar
=
'a simple scalar'
;
my
$expected_yaml
=
<<YAML;
--- a simple scalar
YAML
{
DumpFile(
'dumpfile.yml'
,
$scalar
);
file_contents_is(
'dumpfile.yml'
,
$expected_yaml
,
'DumpFile works with filenames'
);
unlink
'dumpfile.yml'
or
die
$!;
}
{
my
$h
= IO::File->new(
'>dumpfile.yml'
);
DumpFile(
$h
,
$scalar
);
close
$h
;
file_contents_is(
'dumpfile.yml'
,
$expected_yaml
,
'DumpFile works with IO::File'
);
unlink
'dumpfile.yml'
or
die
$!;
}
SKIP: {
skip
"indirect file handles require 5.6 or later"
, 1
unless
$] >= 5.006000;
eval
q[
open(my $h, '>', 'dumpfile.yml');
DumpFile($h, $scalar);
close $h;
file_contents_is('dumpfile.yml', $expected_yaml, 'DumpFile works with indirect file handles');
unlink 'dumpfile.yml' or die $!;
]
;
}
{
local
*H
;
open
( H,
'>dumpfile.yml'
);
DumpFile(
*H
,
$scalar
);
close
(H);
file_contents_is(
'dumpfile.yml'
,
$expected_yaml
,
'DumpFile works with ordinary file handles'
);
unlink
'dumpfile.yml'
or
die
$!;
}
{
local
*H
;
open
( H,
'>dumpfile.yml'
);
DumpFile( \
*H
,
$scalar
);
close
(H);
file_contents_is(
'dumpfile.yml'
,
$expected_yaml
,
'DumpFile works with glob refs'
);
unlink
'dumpfile.yml'
or
die
$!;
}
SKIP: {
skip
"in-memory files require 5.8 or later"
, 1
unless
$] >= 5.00800;
eval
q[
open(my $h, '>', \my $s);
DumpFile($h, $scalar);
close($h);
is($s, $expected_yaml, 'DumpFile works with in-memory files');
]
;
}