Commit | Line | Data |
451c8248 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 27; |
7 | use Test::Exception; |
8 | |
9 | BEGIN { |
10 | use_ok('Moose::Util::TypeConstraints'); |
11 | } |
12 | |
13 | my $Str = find_type_constraint('Str'); |
14 | isa_ok($Str, 'Moose::Meta::TypeConstraint'); |
15 | |
16 | my $Undef = find_type_constraint('Undef'); |
17 | isa_ok($Undef, 'Moose::Meta::TypeConstraint'); |
18 | |
19 | ok(!$Str->check(undef), '... Str cannot accept an Undef value'); |
20 | ok($Str->check('String'), '... Str can accept an String value'); |
21 | ok(!$Undef->check('String'), '... Undef cannot accept an Str value'); |
22 | ok($Undef->check(undef), '... Undef can accept an Undef value'); |
23 | |
24 | my $Str_or_Undef = Moose::Meta::TypeConstraint->union($Str, $Undef); |
25 | isa_ok($Str_or_Undef, 'Moose::Meta::TypeConstraint::Union'); |
26 | |
27 | ok($Str_or_Undef->check(undef), '... (Str | Undef) can accept an Undef value'); |
28 | ok($Str_or_Undef->check('String'), '... (Str | Undef) can accept a String value'); |
29 | |
30 | # another .... |
31 | |
32 | my $ArrayRef = find_type_constraint('ArrayRef'); |
33 | isa_ok($ArrayRef, 'Moose::Meta::TypeConstraint'); |
34 | |
35 | my $HashRef = find_type_constraint('HashRef'); |
36 | isa_ok($HashRef, 'Moose::Meta::TypeConstraint'); |
37 | |
38 | ok($ArrayRef->check([]), '... ArrayRef can accept an [] value'); |
39 | ok(!$ArrayRef->check({}), '... ArrayRef cannot accept an {} value'); |
40 | ok($HashRef->check({}), '... HashRef can accept an {} value'); |
41 | ok(!$HashRef->check([]), '... HashRef cannot accept an [] value'); |
42 | |
43 | my $HashOrArray = Moose::Meta::TypeConstraint->union($ArrayRef, $HashRef); |
44 | isa_ok($HashOrArray, 'Moose::Meta::TypeConstraint::Union'); |
45 | |
46 | ok($HashOrArray->check([]), '... (ArrayRef | HashRef) can accept []'); |
47 | ok($HashOrArray->check({}), '... (ArrayRef | HashRef) can accept {}'); |
48 | |
49 | ok(!$HashOrArray->check(\(my $var1)), '... (ArrayRef | HashRef) cannot accept scalar refs'); |
50 | ok(!$HashOrArray->check(sub {}), '... (ArrayRef | HashRef) cannot accept code refs'); |
51 | ok(!$HashOrArray->check(50), '... (ArrayRef | HashRef) cannot accept Numbers'); |
52 | |
53 | diag $HashOrArray->validate([]); |
54 | |
55 | ok(!defined($HashOrArray->validate([])), '... (ArrayRef | HashRef) can accept []'); |
56 | ok(!defined($HashOrArray->validate({})), '... (ArrayRef | HashRef) can accept {}'); |
57 | |
58 | is($HashOrArray->validate(\(my $var2)), 'Validation failed for \'ArrayRef\' failed and Validation failed for \'HashRef\' failed in (ArrayRef | HashRef)', '... (ArrayRef | HashRef) cannot accept scalar refs'); |
59 | is($HashOrArray->validate(sub {}), 'Validation failed for \'ArrayRef\' failed and Validation failed for \'HashRef\' failed in (ArrayRef | HashRef)', '... (ArrayRef | HashRef) cannot accept code refs'); |
60 | is($HashOrArray->validate(50), 'Validation failed for \'ArrayRef\' failed and Validation failed for \'HashRef\' failed in (ArrayRef | HashRef)', '... (ArrayRef | HashRef) cannot accept Numbers'); |
61 | |