use MX:T Item constraint intstead of string type specification
[gitmo/MooseX-Types.git] / t / 22_class_type.t
CommitLineData
b2a6a381 1use strict;
2use warnings;
3use Test::More;
4
5BEGIN {
6 package MyTypes;
7
aa19f5d2 8 use MooseX::Types::Moose qw( Item );
7f95d0bf 9 use MooseX::Types -declare => [ 'ClassyType', 'NoClass' ];
b2a6a381 10
cabfc8ed 11 class_type 'ClassyClass';
12
13 subtype ClassyType, as 'ClassyClass';
14
aa19f5d2 15 subtype NoClass, as Item, where { 1 };
7f95d0bf 16}
17
18BEGIN {
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');
b2a6a381 27}
28
29BEGIN {
30
31 package ClassyClass;
32
33 use Moose;
34
ee3f4093 35 sub check { die "FAIL" }
36
b2a6a381 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
48ok(my $o = ClassyClassConsumer->new, "Constructor happy");
49
50is(ref($o->om_nom), 'ClassyClass', 'Attribute happy');
51
195d6241 52ok(ClassyClassConsumer->new(om_nom => ClassyClass->new), 'Constructor happy');
53
cabfc8ed 54ok(!eval { ClassyClassConsumer->new(om_nom => 3) }, 'Type checked');
55
b2a6a381 56done_testing;