DEATH TO ALL zionist ELLIPSES
[gitmo/Moose.git] / t / 040_type_constraints / 007_util_more_type_coercion.t
CommitLineData
471c4f09 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
7ff56534 6use Test::More tests => 25;
471c4f09 7use Test::Exception;
8
7ff56534 9
471c4f09 10
11{
12 package HTTPHeader;
471c4f09 13 use Moose;
05d9eaf6 14 use Moose::Util::TypeConstraints;
d03bd989 15
471c4f09 16 coerce 'HTTPHeader'
d03bd989 17 => from ArrayRef
41e007e4 18 => via { HTTPHeader->new(array => $_[0]) };
d03bd989 19
41e007e4 20 coerce 'HTTPHeader'
d03bd989 21 => from HashRef
22 => via { HTTPHeader->new(hash => $_[0]) };
23
471c4f09 24 has 'array' => (is => 'ro');
d03bd989 25 has 'hash' => (is => 'ro');
471c4f09 26
27 package Engine;
28 use strict;
29 use warnings;
30 use Moose;
d03bd989 31
32 has 'header' => (is => 'rw', isa => 'HTTPHeader', coerce => 1);
471c4f09 33}
34
35{
36 my $engine = Engine->new();
37 isa_ok($engine, 'Engine');
38
39 # try with arrays
40
41 lives_ok {
42 $engine->header([ 1, 2, 3 ]);
1808c2da 43 } 'type was coerced without incident';
471c4f09 44 isa_ok($engine->header, 'HTTPHeader');
45
46 is_deeply(
47 $engine->header->array,
48 [ 1, 2, 3 ],
1808c2da 49 'got the right array value of the header');
50 ok(!defined($engine->header->hash), 'no hash value set');
471c4f09 51
52 # try with hash
53
54 lives_ok {
55 $engine->header({ one => 1, two => 2, three => 3 });
1808c2da 56 } 'type was coerced without incident';
471c4f09 57 isa_ok($engine->header, 'HTTPHeader');
58
59 is_deeply(
60 $engine->header->hash,
61 { one => 1, two => 2, three => 3 },
1808c2da 62 'got the right hash value of the header');
63 ok(!defined($engine->header->array), 'no array value set');
471c4f09 64
65 dies_ok {
d03bd989 66 $engine->header("Foo");
1808c2da 67 } 'dies with the wrong type, even after coercion';
471c4f09 68
69 lives_ok {
d03bd989 70 $engine->header(HTTPHeader->new);
1808c2da 71 } 'lives with the right type, even after coercion';
471c4f09 72}
73
74{
75 my $engine = Engine->new(header => [ 1, 2, 3 ]);
76 isa_ok($engine, 'Engine');
77
78 isa_ok($engine->header, 'HTTPHeader');
79
80 is_deeply(
81 $engine->header->array,
82 [ 1, 2, 3 ],
1808c2da 83 'got the right array value of the header');
84 ok(!defined($engine->header->hash), 'no hash value set');
471c4f09 85}
86
87{
88 my $engine = Engine->new(header => { one => 1, two => 2, three => 3 });
89 isa_ok($engine, 'Engine');
90
91 isa_ok($engine->header, 'HTTPHeader');
92
93 is_deeply(
94 $engine->header->hash,
95 { one => 1, two => 2, three => 3 },
1808c2da 96 'got the right hash value of the header');
97 ok(!defined($engine->header->array), 'no array value set');
471c4f09 98}
99
100{
101 my $engine = Engine->new(header => HTTPHeader->new());
102 isa_ok($engine, 'Engine');
103
104 isa_ok($engine->header, 'HTTPHeader');
105
1808c2da 106 ok(!defined($engine->header->hash), 'no hash value set');
107 ok(!defined($engine->header->array), 'no array value set');
471c4f09 108}
109
110dies_ok {
111 Engine->new(header => 'Foo');
1808c2da 112} 'dies correctly with bad params';
471c4f09 113
114dies_ok {
115 Engine->new(header => \(my $var));
1808c2da 116} 'dies correctly with bad params';
471c4f09 117