uploadin
[gitmo/Moose.git] / t / 054_util_type_coercion.t
CommitLineData
182134e8 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
e90c03d0 6use Test::More tests => 14;
182134e8 7use Test::Exception;
8
9BEGIN {
10 use_ok('Moose::Util::TypeConstraints');
11}
12
13{
14 package HTTPHeader;
15 use strict;
16 use warnings;
17 use Moose;
18
19 has 'array' => (is => 'ro');
20 has 'hash' => (is => 'ro');
21}
22
23subtype Header =>
24 => as Object
25 => where { $_->isa('HTTPHeader') };
26
27coerce Header
28 => as ArrayRef
29 => to { HTTPHeader->new(array => $_[0]) }
30 => as HashRef
31 => to { HTTPHeader->new(hash => $_[0]) };
32
33Moose::Util::TypeConstraints::export_type_contstraints_as_functions();
34
35my $header = HTTPHeader->new();
36isa_ok($header, 'HTTPHeader');
37
38ok(Header($header), '... this passed the type test');
39ok(!Header([]), '... this did not pass the type test');
40ok(!Header({}), '... this did not pass the type test');
41
42my $coercion = Moose::Util::TypeConstraints::find_type_coercion('Header');
43is(ref($coercion), 'CODE', '... got the right type of coercion');
44
e90c03d0 45{
46 my $coerced = $coercion->([ 1, 2, 3 ]);
47 isa_ok($coerced, 'HTTPHeader');
48
49 is_deeply(
50 $coerced->array(),
51 [ 1, 2, 3 ],
52 '... got the right array');
53 is($coerced->hash(), undef, '... nothing assigned to the hash');
54}
55
56{
57 my $coerced = $coercion->({ one => 1, two => 2, three => 3 });
58 isa_ok($coerced, 'HTTPHeader');
59
60 is_deeply(
61 $coerced->hash(),
62 { one => 1, two => 2, three => 3 },
63 '... got the right hash');
64 is($coerced->array(), undef, '... nothing assigned to the array');
65}
66
67{
68 my $scalar_ref = \(my $var);
69 my $coerced = $coercion->($scalar_ref);
70 is($coerced, $scalar_ref, '... got back what we put in');
71}
72
73{
74 my $coerced = $coercion->("Foo");
75 is($coerced, "Foo", '... got back what we put in');
76}
77