bump version
[gitmo/Moo.git] / xt / moo-role-types.t
CommitLineData
f37e26e8 1use strict;
2use warnings;
3use Test::More;
4use Test::Fatal;
5
6{
7 package TestClientClass;
8 use Moo;
9 use namespace::clean -except => 'meta';
10
11 sub consume {}
12}
13
14{
15 package TestBadClientClass;
16 use Moo;
17 use namespace::clean -except => 'meta';
18
19 sub not_consume {}
20}
21
22{
23 package TestRole;
24 use Moo::Role;
25 use Sub::Quote;
26 use namespace::clean -except => 'meta';
27
28
29 has output_to => (
30 isa => quote_sub(q{
9dc13bea 31 use Scalar::Util ();
32 die $_[0] . "Does not have a ->consume method" unless Scalar::Util::blessed($_[0]) && $_[0]->can('consume'); }),
f37e26e8 33 is => 'ro',
34 required => 1,
35 coerce => quote_sub(q{
9dc13bea 36 use Scalar::Util ();
37 if (Scalar::Util::blessed($_[0]) && $_[0]->can('consume')) {
38 $_[0];
39 } else {
40 my %stuff = %{$_[0]};
41 my $class = delete($stuff{class});
42 $class->new(%stuff);
43 }
f37e26e8 44 }),
45 );
46}
47
48{
49 package TestMooClass;
50 use Moo;
51
52 with 'TestRole';
53}
54
55{
56 package TestMooseClass;
57 use Moose;
58
59 with 'TestRole';
60}
61
62foreach my $name (qw/ TestMooClass TestMooseClass /) {
63 my $i = $name->new(output_to => TestClientClass->new());
64 ok $i->output_to->can('consume');
65 $i = $name->new(output_to => { class => 'TestClientClass' });
66 ok $i->output_to->can('consume');
67};
68
69foreach my $name (qw/ TestMooClass TestMooseClass /) {
70 ok !exception { TestBadClientClass->new };
71 ok exception { $name->new(output_to => TestBadClientClass->new()) };
72 ok exception { $name->new(output_to => { class => 'TestBadClientClass' }) };
73}
74
75done_testing;
76