#! perl
use strict;
use warnings;
use Test::More tests => 24;
use File::Spec;
use Iterator::Files;
-d 't' && chdir 't';
my $id = "20-user";
open(my $f, '>', "$id.tmp")
or die("$id.tmp: $!\n");
print { $f } "Hello, World!\n";
close($f);
@ARGV = qw( foo bar );
$ARGV = "foobar";
my @files = ( "$id.tmp" );
my $it = Iterator::Files->new( files => \@files );
ok(@ARGV == 2, "\@ARGV untouched");
is($ARGV, "foobar", "\$ARGV untouched");
# Initially, eof is false.
ok($it->is_eof, "eof at start");
# Testing has_next will set things going.
ok($it->has_next, "has next at start");
is($it->current_file, "$id.tmp", "current file");
ok(@files == 0, "file list exhausted");
my $line = <$it>;
is($line, "Hello, World!\n", "line1");
is($it->current_file, "$id.tmp", "current file");
ok($it->is_eof, "eof");
ok(!$it->has_next, "no next");
$line = <$it>;
ok(!defined $line, "nothing left");
undef $f;
open($f, '>', "$id.tmp")
or die("$id.tmp: $!\n");
print { $f } "Hello, World1!\n";
print { $f } "Hello, World2!\n";
print { $f } "Hello, World3!\n";
close($f);
@files = ( "$id.tmp" );
$it = Iterator::Files->new( files => \@files );
$line = <$it>;
is($line, "Hello, World1!\n", "line1");
is($it->current_file, "$id.tmp", "current file");
ok(@files == 0, "file list exhausted");
ok(!$it->is_eof, "!eof");
ok($it->has_next, "has next");
# From overload.pm: Even in list context, the iterator is currently
# called only once and with scalar context.
my @lines = $it->readline;
is($lines[0], "Hello, World2!\n", "line2");
is($lines[1], "Hello, World3!\n", "line3");
@files = ( "$id.tmp", "$id.tmp" );
$it = Iterator::Files->new( files => \@files );
@lines = ();
while ( <$it> ) {
push(@lines, $_);
}
for my $i ( 0..1 ) {
for my $j ( 1 .. 3 ) {
is(shift(@lines), "Hello, World$j!\n", "line$j-$i");
}
}
unlink( "$id.tmp" );