release 0.07
[gitmo/MooseX-AlwaysCoerce.git] / t / 04-parameterized-roles.t
CommitLineData
a193e05d 1#!/usr/bin/env perl
13005566 2
a193e05d 3use strict;
4use warnings;
a193e05d 5use Test::More;
13005566 6use Test::Exception;
a193e05d 7
13005566 8unless (eval { require MooseX::Role::Parameterized }) {
9 plan skip_all => 'This test needs MooseX::Role::Parameterized';
a193e05d 10}
11
13005566 12eval <<'EOF';
a193e05d 13 package Role;
14 use MooseX::Role::Parameterized;
15 use MooseX::AlwaysCoerce;
16 use Moose::Util::TypeConstraints;
17
18 # I do nothing!
19 role {};
a193e05d 20
21 subtype 'MyType', as 'Int';
22 coerce 'MyType', from 'Str', via { length $_ };
23
24 subtype 'Uncoerced', as 'Int';
25
26 has foo => (is => 'rw', isa => 'MyType');
27
28 class_has bar => (is => 'rw', isa => 'MyType');
29
30 class_has baz => (is => 'rw', isa => 'MyType', coerce => 0);
31
32 has quux => (is => 'rw', isa => 'MyType', coerce => 0);
33
34 has uncoerced_attr => (is => 'rw', isa => 'Uncoerced');
35
36 class_has uncoerced_class_attr => (is => 'rw', isa => 'Uncoerced');
a193e05d 37
a193e05d 38 package Foo;
39 use Moose;
40 with 'Role';
13005566 41EOF
42
43if ($@) {
44 plan skip_all =>
45'MooseX::ClassAttribute is currently incompatible with MooseX::Role::Parameterized';
a193e05d 46}
47
13005566 48plan tests => 8;
49
50eval 'use Test::NoWarnings';
a193e05d 51
52ok( (my $instance = MyClass->new), 'instance' );
53
54lives_ok { $instance->foo('bar') } 'attribute coercion ran';
55
56lives_ok { $instance->bar('baz') } 'class attribute coercion ran';
57
58dies_ok { $instance->baz('quux') }
59 'class attribute coercion did not run with coerce => 0';
60
61dies_ok { $instance->quux('mtfnpy') }
62 'attribute coercion did not run with coerce => 0';
63
64lives_ok { $instance->uncoerced_attr(10) }
65 'set attribute having type with no coercion and no coerce=0';
66
67lives_ok { $instance->uncoerced_class_attr(10) }
68 'set class attribute having type with no coercion and no coerce=0';