diff options
author | dakkar <dakkar@thenautilus.net> | 2016-06-10 15:59:20 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2016-06-10 15:59:20 +0100 |
commit | 7e0432d6af889d0343f129dec7060ae0c782d2bc (patch) | |
tree | 7995b9e4e795b3239282e80a6d28c9d0cbf76eca /t/tests/test2/compare-bag.t | |
parent | more tests! (diff) | |
download | Sietima-7e0432d6af889d0343f129dec7060ae0c782d2bc.tar.gz Sietima-7e0432d6af889d0343f129dec7060ae0c782d2bc.tar.bz2 Sietima-7e0432d6af889d0343f129dec7060ae0c782d2bc.zip |
move Test2::* tests to subdir
Diffstat (limited to 't/tests/test2/compare-bag.t')
-rw-r--r-- | t/tests/test2/compare-bag.t | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/t/tests/test2/compare-bag.t b/t/tests/test2/compare-bag.t new file mode 100644 index 0000000..80a7bc3 --- /dev/null +++ b/t/tests/test2/compare-bag.t @@ -0,0 +1,147 @@ +#!perl +use strict; +use warnings; +use 5.020; +use lib 't/lib'; +use Test2::Bundle::Extended -target => 'Test2::Compare::Bag'; + +isa_ok($CLASS, 'Test2::Compare::Base'); +is($CLASS->name, '<BAG>', "got name"); + +subtest construction => sub { + my $one = $CLASS->new(); + isa_ok($one, $CLASS); + is($one->items, [], "created items as an array"); +}; + +subtest verify => sub { + my $one = $CLASS->new; + + is($one->verify(exists => 0), 0, "did not get anything"); + is($one->verify(exists => 1, got => undef), 0, "undef is not an array"); + is($one->verify(exists => 1, got => 0), 0, "0 is not an array"); + is($one->verify(exists => 1, got => 1), 0, "1 is not an array"); + is($one->verify(exists => 1, got => 'string'), 0, "'string' is not an array"); + is($one->verify(exists => 1, got => {}), 0, "a hash is not an array"); + is($one->verify(exists => 1, got => []), 1, "an array is an array"); +}; + +subtest add_item => sub { + my $one = $CLASS->new(); + + $one->add_item('a'); + $one->add_item(1 => 'b'); + $one->add_item(3 => 'd'); + + ok( + lives { $one->add_item(2 => 'c') }, + "Indexes are ignored", + ); + + $one->add_item(8 => 'x'); + $one->add_item('y'); + + is( + $one->items, + [ 'a', 'b', 'd', 'c', 'x', 'y' ], + "Expected items", + ); +}; + +subtest deltas => sub { + my $conv = Test2::Compare->can('strict_convert'); + + my %params = (exists => 1, convert => $conv, seen => {}); + + my $items = ['a', 'b']; + my $one = $CLASS->new(items => $items); + + like( + [$one->deltas(%params, got => ['a', 'b'])], + [], + "No delta, no diff" + ); + + like( + [$one->deltas(%params, got => ['b', 'a'])], + [], + "No delta, no diff, order is ignored" + ); + + like( + [$one->deltas(%params, got => ['a'])], + [ + { + dne => 'got', + id => [ARRAY => '*'], + got => undef,, + chk => {input => 'b'}, + children => [ + { + dne => DNE, + id => [ARRAY => 0], + got => 'a', + chk => {input => 'b'}, + }, + ], + } + ], + "Got the delta for the missing value" + ); + + like( + [$one->deltas(%params, got => ['a', 'a'])], + [ + { + dne => 'got', + id => [ARRAY => '*'], + got => undef, + chk => {input => 'b'}, + children => [ + { + dne => DNE, + id => [ARRAY => 0], + got => 'a', + chk => {input => 'b'}, + }, + { + dne => DNE, + id => [ARRAY => 1], + got => 'a', + chk => {input => 'b'}, + }, + ], + } + ], + "Got the delta for the incorrect value" + ); + + like( + [$one->deltas(%params, got => ['a', 'b', 'a', 'a'])], + [], + "No delta, not checking ending" + ); + + $one->set_ending(1); + like( + [$one->deltas(%params, got => ['a', 'b', 'a', 'x'])], + array { + item 0 => { + dne => 'check', + id => [ARRAY => 2], + got => 'a', + check => DNE, + }; + item 1 => { + dne => 'check', + id => [ARRAY => 3], + got => 'x', + check => DNE, + }; + end(), + }, + "Got 2 deltas for extra items" + ); +}; + +done_testing; |