Commit | Line | Data |
be9f5a89 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
be9f5a89 |
5 | |
6 | { |
7 | |
8 | package Foo; |
9 | use Moose; |
10 | |
11 | our @TriggerArgs; |
12 | |
13 | has hash => ( |
14 | traits => ['Hash'], |
15 | is => 'rw', |
16 | isa => 'HashRef', |
17 | handles => { |
18 | delete_key => 'delete', |
19 | set_key => 'set', |
20 | }, |
21 | clearer => 'clear_key', |
22 | trigger => sub { @TriggerArgs = @_ }, |
23 | ); |
24 | } |
25 | |
26 | my $foo = Foo->new; |
27 | |
28 | { |
29 | $foo->hash( { x => 1, y => 2 } ); |
30 | |
31 | is_deeply( |
32 | \@Foo::TriggerArgs, |
33 | [ $foo, { x => 1, y => 2 } ], |
34 | 'trigger was called for normal writer' |
35 | ); |
36 | |
37 | $foo->set_key( z => 5 ); |
38 | |
39 | is_deeply( |
40 | \@Foo::TriggerArgs, |
41 | [ $foo, { x => 1, y => 2, z => 5 }, { x => 1, y => 2 } ], |
42 | 'trigger was called on set' |
43 | ); |
44 | |
45 | $foo->delete_key('y'); |
46 | |
47 | is_deeply( |
48 | \@Foo::TriggerArgs, |
49 | [ $foo, { x => 1, z => 5 }, { x => 1, y => 2, z => 5 } ], |
50 | 'trigger was called on delete' |
51 | ); |
52 | } |
53 | |
54 | done_testing; |