complete re-organization of the test suite
[gitmo/Moose.git] / t / 040_type_constraints / 008_union_types.t
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