Commit | Line | Data |
8aab053a |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 34; |
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 $Defined = find_type_constraint('Defined'); |
17 | isa_ok($Defined, '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($Defined->check('String'), '... Defined can accept an Str value'); |
22 | ok(!$Defined->check(undef), '... Defined cannot accept an undef value'); |
23 | |
24 | my $Str_and_Defined = Moose::Meta::TypeConstraint::Intersection->new(type_constraints => [$Str, $Defined]); |
25 | isa_ok($Str_and_Defined, 'Moose::Meta::TypeConstraint::Intersection'); |
26 | |
27 | ok($Str_and_Defined->check(''), '... (Str & Defined) can accept a Defined value'); |
28 | ok($Str_and_Defined->check('String'), '... (Str & Defined) can accept a String value'); |
29 | ok(!$Str_and_Defined->check([]), '... (Str & Defined) cannot accept an array reference'); |
30 | |
31 | ok($Str_and_Defined->is_a_type_of($Str), "subtype of Str"); |
32 | ok($Str_and_Defined->is_a_type_of($Defined), "subtype of Defined"); |
33 | |
34 | ok( !$Str_and_Defined->equals($Str), "not equal to Str" ); |
35 | ok( $Str_and_Defined->equals($Str_and_Defined), "equal to self" ); |
36 | ok( $Str_and_Defined->equals(Moose::Meta::TypeConstraint::Intersection->new(type_constraints => [ $Str, $Defined ])), "equal to clone" ); |
37 | ok( $Str_and_Defined->equals(Moose::Meta::TypeConstraint::Intersection->new(type_constraints => [ $Defined, $Str ])), "equal to reversed clone" ); |
38 | |
39 | ok( !$Str_and_Defined->is_a_type_of("ThisTypeDoesNotExist"), "not type of non existant type" ); |
40 | ok( !$Str_and_Defined->is_subtype_of("ThisTypeDoesNotExist"), "not subtype of non existant type" ); |
41 | |
42 | # another .... |
43 | |
44 | my $ArrayRef = find_type_constraint('ArrayRef'); |
45 | isa_ok($ArrayRef, 'Moose::Meta::TypeConstraint'); |
46 | |
47 | my $Ref = find_type_constraint('Ref'); |
48 | isa_ok($Ref, 'Moose::Meta::TypeConstraint'); |
49 | |
50 | ok($ArrayRef->check([]), '... ArrayRef can accept an [] value'); |
51 | ok(!$ArrayRef->check({}), '... ArrayRef cannot accept an {} value'); |
52 | ok($Ref->check({}), '... Ref can accept an {} value'); |
53 | ok(!$Ref->check(5), '... Ref cannot accept a 5 value'); |
54 | |
55 | my $RefAndArray = Moose::Meta::TypeConstraint::Intersection->new(type_constraints => [$ArrayRef, $Ref]); |
56 | isa_ok($RefAndArray, 'Moose::Meta::TypeConstraint::Intersection'); |
57 | |
58 | ok($RefAndArray->check([]), '... (ArrayRef & Ref) can accept []'); |
59 | ok(!$RefAndArray->check({}), '... (ArrayRef & Ref) cannot accept {}'); |
60 | |
61 | ok(!$RefAndArray->check(\(my $var1)), '... (ArrayRef & Ref) cannot accept scalar refs'); |
62 | ok(!$RefAndArray->check(sub {}), '... (ArrayRef & Ref) cannot accept code refs'); |
63 | ok(!$RefAndArray->check(50), '... (ArrayRef & Ref) cannot accept Numbers'); |
64 | |
65 | diag $RefAndArray->validate([]); |
66 | |
67 | ok(!defined($RefAndArray->validate([])), '... (ArrayRef & Ref) can accept []'); |
68 | ok(defined($RefAndArray->validate(undef)), '... (ArrayRef & Ref) cannot accept undef'); |
69 | |
70 | like($RefAndArray->validate(undef), |
cb6d4b32 |
71 | qr/Validation failed for \'ArrayRef\' with value undef and Validation failed for \'Ref\' with value undef in \(ArrayRef&Ref\)/, |
8aab053a |
72 | '... (ArrayRef & Ref) cannot accept undef'); |
73 | |