ecf91ca8be5e057e1dfab98ced0c7b2965da8377
[gitmo/Role-Tiny.git] / t / accessor-mixed.t
1 use strictures 1;
2 use Test::More;
3
4 my @result;
5
6 {
7   package Foo;
8
9   use Moo;
10
11   my @isa = (isa => sub { push @result, 'isa', $_[0] });
12   my @trigger = (trigger => sub { push @result, 'trigger', $_[1] });
13   sub _mkdefault {
14     my $val = shift;
15     (default => sub { push @result, 'default', $val; $val; })
16   }
17
18   has a1 => (
19     is => 'rw', @isa
20   );
21   has a2 => (
22     is => 'rw', @isa, @trigger
23   );
24   has a3 => (
25     is => 'rw', @isa, @trigger
26   );
27   has a4 => (
28     is => 'rw', @trigger, _mkdefault('a4')
29   );
30   has a5 => (
31     is => 'rw', @trigger, _mkdefault('a5')
32   );
33   has a6 => (
34     is => 'rw', @isa, @trigger, _mkdefault('a6')
35   );
36   has a7 => (
37     is => 'rw', @isa, @trigger, _mkdefault('a7')
38   );
39 }
40
41 my $foo = Foo->new(a1 => 'a1', a2 => 'a2', a4 => 'a4', a6 => 'a6');
42
43 is_deeply(
44   \@result,
45   [ qw(isa a1 isa a2 trigger a2 trigger a4 default a5 isa a6 trigger a6
46     default a7 isa a7) ],
47   'Stuff fired in expected order'
48 );
49
50 done_testing;