1use strict; 2use Test::More; 3 4BEGIN { 5 eval "use DBD::SQLite"; 6 plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 33); 7} 8 9use lib 't/testlib'; 10use Film; 11 12Film->retrieve_all->delete_all; 13 14my @film = ( 15 Film->insert({ Title => 'Film 1' }), 16 Film->insert({ Title => 'Film 2' }), 17 Film->insert({ Title => 'Film 3' }), 18 Film->insert({ Title => 'Film 4' }), 19 Film->insert({ Title => 'Film 5' }), 20 Film->insert({ Title => 'Film 6' }), 21); 22 23{ 24 my $it1 = Film->retrieve_all; 25 isa_ok $it1, "Class::DBI::Iterator"; 26 27 my $it2 = Film->retrieve_all; 28 isa_ok $it2, "Class::DBI::Iterator"; 29 30 while (my $from1 = $it1->next) { 31 my $from2 = $it2->next; 32 is $from1->id, $from2->id, "Both iterators get $from1"; 33 } 34} 35 36{ 37 my $it = Film->retrieve_all; 38 is $it->first->title, "Film 1", "Film 1 first"; 39 is $it->next->title, "Film 2", "Film 2 next"; 40 is $it->first->title, "Film 1", "First goes back to 1"; 41 is $it->next->title, "Film 2", "With 2 still next"; 42 $it->reset; 43 is $it->next->title, "Film 1", "Reset brings us to film 1 again"; 44 is $it->next->title, "Film 2", "And 2 is still next"; 45} 46 47 48{ 49 my $it = Film->retrieve_all; 50 my @slice = $it->slice(2,4); 51 is @slice, 3, "correct slice size (array)"; 52 is $slice[0]->title, "Film 3", "Film 3 first"; 53 is $slice[2]->title, "Film 5", "Film 5 last"; 54} 55 56{ 57 my $it = Film->retrieve_all; 58 my $slice = $it->slice(2,4); 59 isa_ok $slice, "Class::DBI::Iterator", "slice as iterator"; 60 is $slice->count, 3,"correct slice size (array)"; 61 is $slice->first->title, "Film 3", "Film 3 first"; 62 is $slice->next->title, "Film 4", "Film 4 next"; 63 is $slice->first->title, "Film 3", "First goes back to 3"; 64 is $slice->next->title, "Film 4", "With 4 still next"; 65 $slice->reset; 66 is $slice->next->title, "Film 3", "Reset brings us to film 3 again"; 67 is $slice->next->title, "Film 4", "And 4 is still next"; 68 69 # check if the original iterator still works 70 is $it->count, 6, "back to the original iterator, is of right size"; 71 is $it->first->title, "Film 1", "Film 1 first"; 72 is $it->next->title, "Film 2", "Film 2 next"; 73 is $it->first->title, "Film 1", "First goes back to 1"; 74 is $it->next->title, "Film 2", "With 2 still next"; 75 is $it->next->title, "Film 3", "Film 3 is still in original Iterator"; 76 $it->reset; 77 is $it->next->title, "Film 1", "Reset brings us to film 1 again"; 78 is $it->next->title, "Film 2", "And 2 is still next"; 79} 80