Commit | Line | Data |
b2b106d7 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 11; |
7 | use Test::Exception; |
8 | |
9 | BEGIN { |
10 | use_ok('Mouse::Util::TypeConstraints'); |
11 | } |
12 | |
13 | # subtype 'aliasing' ... |
14 | |
15 | lives_ok { |
16 | subtype 'Numb3rs' => as 'Num'; |
17 | } '... create bare subtype fine'; |
18 | |
19 | my $numb3rs = find_type_constraint('Numb3rs'); |
20 | isa_ok($numb3rs, 'Mouse::Meta::TypeConstraint'); |
21 | |
22 | # subtype with unions |
23 | |
24 | { |
25 | package Test::Mouse::Meta::TypeConstraint::Union; |
26 | |
27 | use overload '""' => sub {'Broken|Test'}, fallback => 1; |
28 | use Mouse; |
29 | |
30 | extends 'Mouse::Meta::TypeConstraint'; |
31 | } |
32 | |
33 | my $dummy_instance = Test::Mouse::Meta::TypeConstraint::Union->new; |
34 | |
35 | ok $dummy_instance => "Created Instance"; |
36 | |
37 | isa_ok $dummy_instance, |
38 | 'Test::Mouse::Meta::TypeConstraint::Union' => 'isa correct type'; |
39 | |
40 | is "$dummy_instance", "Broken|Test" => |
41 | 'Got expected stringification result'; |
42 | |
43 | my $subtype1 = subtype 'New1' => as $dummy_instance; |
44 | |
45 | ok $subtype1 => 'made a subtype from our type object'; |
46 | |
47 | my $subtype2 = subtype 'New2' => as $subtype1; |
48 | |
49 | ok $subtype2 => 'made a subtype of our subtype'; |
50 | |
51 | # assert_valid |
52 | |
53 | { |
54 | my $type = find_type_constraint('Num'); |
55 | |
56 | my $ok_1 = eval { $type->assert_valid(1); }; |
57 | ok($ok_1, "we can assert_valid that 1 is of type $type"); |
58 | |
59 | my $ok_2 = eval { $type->assert_valid('foo'); }; |
60 | my $error = $@; |
61 | ok(! $ok_2, "'foo' is not of type $type"); |
62 | like( |
63 | $error, |
64 | qr{validation failed for .\Q$type\E.}i, |
65 | "correct error thrown" |
66 | ); |
67 | } |