Commit | Line | Data |
6cbf4a23 |
1 | #!/usr/bin/perl |
2 | use strict; |
3 | use warnings; |
4 | |
a28e50e4 |
5 | use Test::More; |
6cbf4a23 |
6 | use Test::Exception; |
7 | |
8 | my @phonograph; |
9 | { |
10 | package Duck; |
11 | use Moose; |
12 | |
13 | sub walk { |
14 | push @phonograph, 'footsteps', |
15 | } |
16 | |
17 | sub quack { |
18 | push @phonograph, 'quack'; |
19 | } |
20 | |
21 | package Swan; |
22 | use Moose; |
23 | |
24 | sub honk { |
25 | push @phonograph, 'honk'; |
26 | } |
27 | |
28 | package DucktypeTest; |
29 | use Moose; |
30 | use Moose::Util::TypeConstraints; |
31 | |
32 | my $ducktype = duck_type 'DuckType' => qw(walk quack); |
33 | |
34 | has duck => ( |
35 | isa => $ducktype, |
36 | handles => $ducktype, |
37 | ); |
38 | } |
39 | |
40 | my $t = DucktypeTest->new(duck => Duck->new); |
41 | $t->quack; |
42 | is_deeply([splice @phonograph], ['quack']); |
43 | |
44 | $t->walk; |
45 | is_deeply([splice @phonograph], ['footsteps']); |
46 | |
a28e50e4 |
47 | done_testing; |