DBIx-DR
view release on metacpan or search on metacpan
t/000-dr-iterator.t view on Meta::CPAN
cmp_ok $ss->get('c')->value, 'eq', '3', 'value';
cmp_ok $ss->get('e')->id, 'eq', 'e', 'id';
cmp_ok $ss->get('e')->value, 'eq', '3', 'value';
cmp_ok $ss->{item_class}, 'eq', $aiter->{item_class}, 'Item class';
cmp_ok $ss->{item_constructor}, 'eq', $aiter->{item_constructor},
'Item constructor';
}
{
my ($ss1) = $hiter->grep(value => 3)->all;
my $ss2 = $hiter->find(value => 3);
is $ss1->value, $ss2->value, 'find';
}
for my $ss($aiter->grep(id => 2), $aiter->grep(sub { $_[0]->id == 2 })) {
isa_ok $ss => 'DBIx::DR::Iterator', 'Array subset';
cmp_ok $ss->count, '==', 1, 'count of elements';
ok $ss->exists(0), 'element was grepped properly';
cmp_ok $ss->get(0)->id, '==', 2, 'id';
cmp_ok $ss->{item_class}, 'eq', $aiter->{item_class}, 'Item class';
cmp_ok $ss->{item_constructor}, 'eq', $aiter->{item_constructor},
'Item constructor';
}
ok $item, 'Item extracted';
ok $item->iterator, 'Item has iterator link';
undef $hiter;
ok !$item->iterator,
'Item has undefined iterator link after iterator was destroyed';
$item = $aiter->next;
ok !$item->is_changed, "Item wasn't changed";
ok !$item->iterator->is_changed, "Iterator wasn't changed";
ok !eval { $item->value; 1 }, 'Unknown method';
ok $item->id(123) == 123, 'Change field';
ok $item->is_changed, 'Field was changed';
ok $item->iterator->is_changed, 'Iterator was changed, too';
my $o = { 1 => 2 };
$item->id($o);
$item->iterator->is_changed(0);
$item->is_changed(0);
# the same object
$item->id($o);
ok !$item->is_changed, "Item wasn't changed";
ok !$item->iterator->is_changed, "Iterator wasn't changed";
$item->id([]);
ok $item->is_changed, 'Field was changed';
ok $item->iterator->is_changed, 'Iterator was changed, too';
{
{
package TestItem;
sub new {
my ($class, $item) = @_;
return bless { %$item } => $class;
}
package TestItemD;
sub new {
my ($class, $item) = @_;
return undef if @_ > 2;
goto \&TestItem::new;
}
}
my @items = (
{ a => 'b' },
{ c => 'd' },
{ d => 'e' }
);
my $l1 = DBIx::DR::Iterator->new(\@items, -item => 'test_item#new');
my $l2 = DBIx::DR::Iterator->new(\@items, -item => 'test_item_d#new');
my $l3 = DBIx::DR::Iterator->new(\@items, -item =>
'test_item_d#new', -noitem_iter => 1);
is_deeply [ $l2->all ], [ (undef) x 3 ], 'list2 contains only undef';
is_deeply [ $l1->all ], [ $l3->all ],
'Third list did not received iterator';
}
subtest 'iterator push, pop', sub {
plan tests => 6;
{
package TestPushItem;
sub new {
my ($class, $item) = @_;
return bless { %$item } => $class;
}
}
my @items = (
{ a => 'b' },
{ c => 'd' },
{ d => 'e' }
);
my $list = DBIx::DR::Iterator->new(
[@items],
-item => 'test_push_item#new',
-noitem_iter => 1,
);
is_deeply $list->push({ f => 'h' }), TestPushItem->new({ f => 'h' }), 'iterator push';
is_deeply $list->get(-1), TestPushItem->new({ f => 'h' }), 'added element';
is $list->count, 4, 'count';
is_deeply $list->pop, TestPushItem->new({ f => 'h' }), 'iterator pop';
is_deeply $list->get(-1), TestPushItem->new({ d => 'e' }), 'last element';
is $list->count, 3, 'count';
};
=head1 COPYRIGHT
Copyright (C) 2011 Dmitry E. Oboukhov <unera@debian.org>
Copyright (C) 2011 Roman V. Nikolaev <rshadow@rambler.ru>
This program is free software, you can redistribute it and/or
modify it under the terms of the Artistic License.
=cut
( run in 1.063 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )