use Test::More tests => 14;
use strict;
use warnings;
use Iterator::Simple qw(:all);
my $itr;
#1-2 iarray($arrayref)
{
ok(($itr = iarray [10,2,3,'foo',5]), 'iarray creation');
my @res;
while(<$itr>) {
push @res, $_;
}
is_deeply \@res => [10,2,3,'foo',5], 'iarray result';
}
#3-4 iter($arrayref)
{
ok(($itr = iter([10,'foo','bar','buz'])), 'arrayref iter creation');
is_deeply list($itr) => [10, 'foo', 'bar', 'buz'], 'arrayref iter result';
}
#5-6 iter($iohandle)
{
use IO::Handle;
ok(($itr = iter(\*DATA)), 'GLOB iter creation');
is_deeply list($itr) => ["foo\n", "bar\n", "10\n", "who\n"], 'GLOB iter result';
}
#7-8 iter($__iter__implemented_object)
{
my $foo = Foo->new(1,2,'three',4,5);
ok(($itr = iter($foo)), '__iter__ method iter creation');
is_deeply list($itr) => ['1_', '2_', 'three_', '4_', '5_'], '__iter__ method iter creation';
}
#9-10 iter($<>overloaded_object)
{
my $bar = Bar->new('bow-wow', 'oink', 'quack');
ok(($itr = iter($bar)), '"<>" overload iter creation' );
is_deeply list($itr) => ['bow-wow', 'oink', 'quack'], '"<>" overload iter creation';
}
#11-12 iter($code);
{
my @array = ('a','b','c');
my $foo = sub { shift @array; };
ok(($itr = iter($foo)), 'code ref iter creation');
is_deeply list($itr) => ['a', 'b', 'c'] , 'code ref iter result';
}
#13-14 iter()
{
ok(($itr = eval{iter()}), 'empty iter creation');
is_deeply list($itr) => [], 'empty iter result';
}
{
package Foo;
use Iterator::Simple qw(iterator);
sub new {
my $class = shift;
bless [@_], $class;
}
sub __iter__ {
my($self) = @_;
my $idx =0;
iterator {
return unless exists $self->[$idx];
return $self->[$idx++] . '_';
}
}
}
{
package Bar;
my $i = 0;
use overload (
'<>' => sub { my $s = shift; $s->{events}[$s->{pointer}++] }
);
sub new {
my $class =shift;
bless { events => [@_], pointer => 0 }, $class;
}
}
__DATA__
foo
bar
10
who