1*5759b3d2Safresh1use strict; 2*5759b3d2Safresh1use warnings; 3*5759b3d2Safresh1use Test2::Tools::Tiny; 4*5759b3d2Safresh1 5*5759b3d2Safresh1{ 6*5759b3d2Safresh1 package Foo::Bar; 7*5759b3d2Safresh1 8*5759b3d2Safresh1 use Test2::Util::ExternalMeta; 9*5759b3d2Safresh1 use Test2::Util::HashBase qw/foo bar/; 10*5759b3d2Safresh1} 11*5759b3d2Safresh1 12*5759b3d2Safresh1ok(Foo::Bar->can($_), "Imported '$_'") for qw/meta get_meta set_meta delete_meta/; 13*5759b3d2Safresh1 14*5759b3d2Safresh1my $one = Foo::Bar->new(foo => 1, bar => 2); 15*5759b3d2Safresh1ok($one->isa('Foo::Bar'), "Got instance"); 16*5759b3d2Safresh1 17*5759b3d2Safresh1is_deeply($one, {foo => 1, bar => 2}, "nothing fishy.. yet"); 18*5759b3d2Safresh1 19*5759b3d2Safresh1is($one->get_meta('foo'), undef, "no meta-data for foo"); 20*5759b3d2Safresh1is($one->get_meta('bar'), undef, "no meta-data for bar"); 21*5759b3d2Safresh1is($one->get_meta('baz'), undef, "no meta-data for baz"); 22*5759b3d2Safresh1 23*5759b3d2Safresh1is($one->meta('foo'), undef, "no meta-data for foo"); 24*5759b3d2Safresh1is($one->meta('bar'), undef, "no meta-data for bar"); 25*5759b3d2Safresh1is($one->meta('baz'), undef, "no meta-data for baz"); 26*5759b3d2Safresh1 27*5759b3d2Safresh1is_deeply($one, {foo => 1, bar => 2}, "Still have not modified instance"); 28*5759b3d2Safresh1 29*5759b3d2Safresh1$one->set_meta('foo' => 123); 30*5759b3d2Safresh1is($one->foo, 1, "did not change attribute"); 31*5759b3d2Safresh1is($one->meta('foo'), 123, "get meta-data for foo"); 32*5759b3d2Safresh1is($one->get_meta('foo'), 123, "get meta-data for foo again"); 33*5759b3d2Safresh1 34*5759b3d2Safresh1$one->meta('foo', 345); 35*5759b3d2Safresh1is($one->foo, 1, "did not change attribute"); 36*5759b3d2Safresh1is($one->meta('foo', 678), 123, "did not alter already set meta-attribute"); 37*5759b3d2Safresh1is($one->get_meta('foo'), 123, "still did not alter already set meta-attribute"); 38*5759b3d2Safresh1 39*5759b3d2Safresh1is($one->meta('bar', 789), 789, "used default for bar"); 40*5759b3d2Safresh1is($one->bar, 2, "did not change attribute"); 41*5759b3d2Safresh1 42*5759b3d2Safresh1is_deeply( 43*5759b3d2Safresh1 $one, 44*5759b3d2Safresh1 { 45*5759b3d2Safresh1 foo => 1, 46*5759b3d2Safresh1 bar => 2, 47*5759b3d2Safresh1 Test2::Util::ExternalMeta::META_KEY() => { 48*5759b3d2Safresh1 foo => 123, 49*5759b3d2Safresh1 bar => 789, 50*5759b3d2Safresh1 }, 51*5759b3d2Safresh1 }, 52*5759b3d2Safresh1 "Stored meta-data" 53*5759b3d2Safresh1); 54*5759b3d2Safresh1 55*5759b3d2Safresh1is($one->delete_meta('foo'), 123, "got old value on delete"); 56*5759b3d2Safresh1is($one->meta('foo'), undef, "no more value"); 57*5759b3d2Safresh1 58*5759b3d2Safresh1is_deeply( 59*5759b3d2Safresh1 $one, 60*5759b3d2Safresh1 { 61*5759b3d2Safresh1 foo => 1, 62*5759b3d2Safresh1 bar => 2, 63*5759b3d2Safresh1 Test2::Util::ExternalMeta::META_KEY() => { 64*5759b3d2Safresh1 bar => 789, 65*5759b3d2Safresh1 }, 66*5759b3d2Safresh1 }, 67*5759b3d2Safresh1 "Deleted the meta key" 68*5759b3d2Safresh1); 69*5759b3d2Safresh1 70*5759b3d2Safresh1done_testing; 71