#!./perl
BEGIN {
chdir
't'
if
-d
't'
;
@INC
=
'../lib'
;
require
"./test.pl"
;
}
{
my
$dh
;
ok(
opendir
(
$dh
,
"."
) == 1,
"able to opendir('.')"
);
my
@p_f
;
while
(1) {
my
$p
=
telldir
$dh
;
my
$f
=
readdir
$dh
;
last
unless
defined
$f
;
push
@p_f
, [
$p
,
$f
];
}
my
$test
=
sub
{
my
(
$p_f
,
$type
) =
@_
;
my
(
$p
,
$f
) =
@$p_f
;
ok(
seekdir
(
$dh
,
$p
),
"$type seekdir($p)"
);
ok(
readdir
(
$dh
) eq
$f
,
"$type readdir() -> $f \tas expected"
);
};
$test
->(
$_
,
"forward"
)
for
@p_f
;
$test
->(
$_
,
"backward"
)
for
reverse
@p_f
;
my
@sorted_p_f
=
sort
{
length
$b
->[1] <=>
length
$a
->[1]
or
$a
->[1] cmp
$b
->[1]
}
@p_f
;
$test
->(
$_
,
"mixed"
)
for
@sorted_p_f
;
ok(
seekdir
(
$dh
, -1),
"seekdir(-1) returns true..."
);
ok(!
defined
readdir
(
$dh
),
"...but next readdir() gives undef"
);
my
$final_p_f
=
$p_f
[-1];
my
$end_pos
=
$final_p_f
->[0] +
length
$final_p_f
->[1];
ok(
seekdir
(
$dh
,
$end_pos
),
"seekdir($end_pos) possible"
);
ok(
telldir
(
$dh
) ==
$end_pos
,
"telldir() equal to where we seekdir()d"
);
ok(
readdir
(
$dh
) eq
''
,
"readdir() here gives an empty string"
);
ok(
telldir
(
$dh
) == -1,
"telldir() now equal to -1"
);
ok(!
defined
readdir
(
$dh
),
"next readdir() gives undef"
);
ok(
seekdir
(
$dh
,
$end_pos
+ 1),
"seekdir($end_pos + 1) returns true..."
);
ok(
telldir
(
$dh
) == -1,
"....but telldir() == -1 indicating out of range"
);
ok(!
defined
readdir
(
$dh
),
"... and next readdir() gives undef"
);
ok(
closedir
(
$dh
) == 1,
"Finally. closedir() returns true"
);
}
done_testing();