#!/usr/bin/perl use strict; use warnings; use Test::More qw(no_plan); use Test::Exception; use Test::Deep; my $pkg; BEGIN { $pkg = q{Email::Moose::Iterator}; use_ok $pkg; can_ok $pkg, qw(new first last next count index data all reset slice); } Object_initiation: { ok( my $iter = $pkg->new(), q{New Iterator} ); isa_ok($iter, $pkg); } my $data = [ 0 .. 9 ]; Object_data_attribute: { ok ( my $iter = $pkg->new(data => $data), q{New Iterator with data} ); isa_ok($iter, $pkg); is $iter->data(), $data, q{Data returned}; ok ( my $iter2 = $pkg->new(), q{New Iterator without data} ); isa_ok($iter2, $pkg); is $iter2->first(), undef, q{No data returned from first}; ok( $iter2->data($data), q{add data to Iterator} ); is $iter2->data(), $data, q{Data returned}; dies_ok { $iter2->data("Non array-ref should fail") } qr/erple/; } Object_first: { my $iter = $pkg->new(data => $data); is $iter->first(), 0, q{Return first() item}; } Object_next: { my $iter = $pkg->new(data => $data); for my $c (0 .. 9) { is $iter->next(), $c, qq{Return item $c}; } is $iter->next(), undef, q{Return undef at end}; } Object_index: { my $iter = $pkg->new(data => $data); is $iter->index(), undef, q{Return undef at start}; for my $c (0 .. 9) { $iter->next(); is $iter->index(), $c, qq{Current item for \$data[$c]}; } is $iter->index(), 9, q{Current item still maintained}; } Object_count: { my $iter = $pkg->new(data => $data); is $iter->count(), 10, q{Count returned}; } Object_last: { my $iter = $pkg->new(data => $data); is $iter->last(), 9, q{Last item returned}; is $iter->index(), 9, q{Correct current integer}; } Object_all: { my $iter = $pkg->new(data => $data); is_deeply [ $iter->all() ], $data, q{All items returned}; } Object_reset: { my $iter = $pkg->new(data => $data); for(0 .. 3){ $iter->next(); } is $iter->index(), 3, q{Current position}; $iter->reset(); is $iter->index(), undef, q{New position}; is $iter->next(), 0, q{New item}; } Object_slice: { my $iter = $pkg->new(data => $data); is_deeply [ $iter->slice(3, 6) ], [ 3 .. 6 ], q{Sliced}; is $iter->index(), undef, q{Current undef}; $iter->next(); is_deeply [ $iter->slice(0, 7) ], [ 0 .. 7 ], q{Sliced again}; is $iter->index(), 0, q{Current maintained}; }