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