1use Test2::Bundle::Extended -target => 'Test2::Compare::Meta'; 2 3local *convert = Test2::Compare->can('strict_convert'); 4 5subtest simple => sub { 6 my $one = $CLASS->new(); 7 isa_ok($one, $CLASS, 'Test2::Compare::Base'); 8 is($one->items, [], "generated an empty items array"); 9 is($one->name, '<META CHECKS>', "sane name"); 10 is($one->verify(exists => 0), 0, "Does not verify for non-existent values"); 11 is($one->verify(exists => 1), 1, "always verifies for existing values"); 12 ok(defined $CLASS->new(items => []), "Can provide items"); 13}; 14 15subtest add_prop => sub { 16 my $one = $CLASS->new(); 17 18 like( 19 dies { $one->add_prop(undef, convert(1)) }, 20 qr/prop name is required/, 21 "property name is required" 22 ); 23 24 like( 25 dies { $one->add_prop('fake' => convert(1)) }, 26 qr/'fake' is not a known property/, 27 "Must use valid property" 28 ); 29 30 like( 31 dies { $one->add_prop('blessed') }, 32 qr/check is required/, 33 "Must use valid property" 34 ); 35 36 ok($one->add_prop('blessed' => convert('xxx')), "normal"); 37}; 38 39{ 40 package FooBase; 41 42 package Foo; 43 our @ISA = 'FooBase'; 44} 45 46subtest deltas => sub { 47 my $one = $CLASS->new(); 48 49 my $it = bless {a => 1, b => 2, c => 3}, 'Foo'; 50 51 $one->add_prop('blessed' => 'Foo'); 52 $one->add_prop('reftype' => 'HASH'); 53 $one->add_prop('isa' => 'FooBase'); 54 $one->add_prop('this' => exact_ref($it)); 55 $one->add_prop('size' => 3); 56 57 is( 58 [$one->deltas(got => $it, convert => \&convert, seen => {})], 59 [], 60 "Everything matches" 61 ); 62 63 my $not_it = bless ['a'], 'Bar'; 64 65 like( 66 [$one->deltas(got => $not_it, convert => \&convert, seen => {})], 67 [ 68 { verified => F(), got => 'Bar' }, 69 { verified => F(), got => 'ARRAY' }, 70 { verified => F(), got => $not_it }, 71 { verified => F(), got => $not_it }, 72 { verified => F(), got => 1 }, 73 ], 74 "Nothing matches" 75 ); 76 77 like( 78 [$one->deltas(got => 'a', convert => \&convert, seen => {})], 79 [ 80 { verified => F(), got => undef }, 81 { verified => F(), got => undef }, 82 { verified => F(), got => 'a' }, 83 { verified => F(), got => 'a' }, 84 { verified => F(), got => undef }, 85 ], 86 "Nothing matches, wrong everything" 87 ); 88}; 89 90done_testing; 91