#!./perl
BEGIN {
chdir
catdir
$FindBin::Bin
, (updir)x3,
't'
;
@INC
=
'../lib'
;
}
my
$expected
;
$expected
=
$_
=
"op/a*.t"
;
my
@r
=
glob
;
is (
$_
,
$expected
,
'test if $_ takes as the default'
);
cmp_ok(
@r
,
'>='
, 9) or diag(
"|@r|"
);
@r
= <*/a*.t>;
cmp_ok(
@r
,
'>='
, 9,
'check <*/*>'
) or diag(
"|@r|"
);
my
$r
=
scalar
@r
;
@r
= ();
while
(
defined
(
$_
= <*/a*.t>)) {
print
"# $_\n"
;
push
@r
,
$_
;
}
is(
scalar
@r
,
$r
,
'check scalar context'
);
@r
= ();
for
(<*/a*.t>) {
print
"# $_\n"
;
push
@r
,
$_
;
}
is(
scalar
@r
,
$r
,
'check list context'
);
@r
= ();
while
(<*/a*.t>) {
print
"# $_\n"
;
push
@r
,
$_
;
}
is(
scalar
@r
,
$r
,
'implicit assign to $_ in while()'
);
my
@s
= ();
my
$pat
=
'*/a*.t'
;
while
(
glob
(
$pat
)) {
print
"# $_\n"
;
push
@s
,
$_
;
}
is(
"@r"
,
"@s"
,
'explicit glob() gets assign magic too'
);
@s
= ();
$pat
=
'*/a*.t'
;
while
(
glob
(
$pat
)) {
print
"# $_\n"
;
push
@s
,
$_
;
}
is(
"@r"
,
"@s"
,
'in a different package'
);
@s
= ();
while
(<*/a*.t>) {
my
$i
= 0;
print
"# $_ <"
;
push
@s
,
$_
;
while
(<*/b*.t>) {
print
" $_"
;
$i
++;
}
print
" >\n"
;
}
is(
"@r"
,
"@s"
,
'different glob ops maintain independent contexts'
);
@s
= ();
eval
<<'EOT';
use File::DosGlob 'GLOBAL_glob';
package Bar;
while (<*/a*.t>) {
my $i = 0;
print "# $_ <";
push @s, $_;
while (glob '*/b*.t') {
print " $_";
$i++;
}
print " >\n";
}
EOT
is(
"@r"
,
"@s"
,
'global override'
);
my
$filename_containing_parens
=
"foo (123) bar"
;
SKIP: {
skip(
"can't create '$filename_containing_parens': $!"
, 9)
unless
open
my
$touch
,
">"
,
$filename_containing_parens
;
close
$touch
;
foreach
my
$pattern
(
"foo\\ (*"
,
"*)\\ bar"
,
"foo\\ (1*3)\\ bar"
) {
@r
= ();
eval
{
@r
= File::DosGlob::
glob
(
$pattern
) };
is($@,
""
,
"eval for glob($pattern)"
);
is(
scalar
@r
, 1);
is(
$r
[0],
$filename_containing_parens
);
}
1
while
unlink
$filename_containing_parens
;
}
my
$cwd
= Cwd::cwd();
if
(
$cwd
=~ /^([a-zA-Z]:)/) {
my
$drive
= $1;
@r
= ();
eval
{
@r
= File::DosGlob::
glob
(
"${drive}io/*.t"
) };
ok(
@r
and !
grep
!m|^${drive}io/[^/]*\.t$|,
@r
);
}
else
{
pass();
}
SKIP: {
skip
"no XS::APItest"
unless
eval
{
require
XS::APItest; XS::APItest->
import
(
"sv_count"
); 1 };
my
(
$count
,
$count2
);
eval
'$x+'
x(1+
rand
() * 100) .
'<*>'
;
$count
= sv_count();
eval
'$x+'
x(1+
rand
() * 100) .
'<*>'
;
$count2
= sv_count();
cmp_ok
$count2
,
'<='
,
$count
,
'no leak when partly iterated caller is freed'
;
}