use MX:T Item constraint intstead of string type specification
[gitmo/MooseX-Types.git] / t / 22_class_type.t
1 use strict;
2 use warnings;
3 use Test::More;
4
5 BEGIN {
6   package MyTypes;
7
8   use MooseX::Types::Moose qw( Item );
9   use MooseX::Types -declare => [ 'ClassyType', 'NoClass' ];
10
11   class_type 'ClassyClass';
12
13   subtype ClassyType, as 'ClassyClass';
14
15   subtype NoClass, as Item, where { 1 };
16 }
17
18 BEGIN {
19
20   ok(!eval { MyTypes::ClassyType->new }, 'new without class loaded explodes');
21
22   like($@, qr/does not provide/, 'right exception');
23
24   ok(!eval { MyTypes::NoClass->new }, 'new on non-class type');
25
26   like($@, qr/non-class-type/, 'right exception');
27 }
28
29 BEGIN {
30
31   package ClassyClass;
32
33   use Moose;
34
35   sub check { die "FAIL" }
36
37   package ClassyClassConsumer;
38
39   BEGIN { MyTypes->import('ClassyType') }
40   use Moose;
41
42   has om_nom => (
43     is => 'ro', isa => ClassyType, default => sub { ClassyType->new }
44   );
45
46 }
47
48 ok(my $o = ClassyClassConsumer->new, "Constructor happy");
49
50 is(ref($o->om_nom), 'ClassyClass', 'Attribute happy');
51
52 ok(ClassyClassConsumer->new(om_nom => ClassyClass->new), 'Constructor happy');
53
54 ok(!eval { ClassyClassConsumer->new(om_nom => 3) }, 'Type checked');
55
56 done_testing;