xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/Util/ExternalMeta.t (revision 5759b3d249badf144a6240f7eec4dcf9df003e6b)
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