Special case new to avoid unexpected exceptions on unloaded classes
[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 -declare => [ 'ClassyType', 'NoClass' ];
9
10   class_type 'ClassyClass';
11
12   subtype ClassyType, as 'ClassyClass';
13
14   subtype NoClass, as 'Item', where { 1 };
15 }
16
17 BEGIN {
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');
26 }
27
28 BEGIN {
29
30   package ClassyClass;
31
32   use Moose;
33
34   sub check { die "FAIL" }
35
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
47 ok(my $o = ClassyClassConsumer->new, "Constructor happy");
48
49 is(ref($o->om_nom), 'ClassyClass', 'Attribute happy');
50
51 ok(ClassyClassConsumer->new(om_nom => ClassyClass->new), 'Constructor happy');
52
53 ok(!eval { ClassyClassConsumer->new(om_nom => 3) }, 'Type checked');
54
55 done_testing;