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