3695fac330e807c2e022b2ea743a3d9dedf5a48e
[gitmo/Moose.git] / t / 005_basic.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 10;
7 use Test::Exception;
8
9 use Scalar::Util 'isweak';
10
11 BEGIN {
12     use_ok('Moose');           
13 }
14
15 {
16     package HTTPHeader;
17     use strict;
18     use warnings;
19     use Moose;
20     
21     has 'array' => (is => 'ro');
22     has 'hash'  => (is => 'ro');    
23
24     package Engine;
25     use strict;
26     use warnings;
27     use Moose;
28     
29     coerce 'HTTPHeader'
30         => as ArrayRef 
31             => to { HTTPHeader->new(array => $_[0]) }
32         => as HashRef 
33             => to { HTTPHeader->new(hash => $_[0]) };    
34     
35     has 'header' => (is => 'rw', isa => 'HTTPHeader', coerce => 1);    
36 }
37
38 my $engine = Engine->new();
39 isa_ok($engine, 'Engine');
40
41 # try with arrays
42
43 $engine->header([ 1, 2, 3 ]);
44 isa_ok($engine->header, 'HTTPHeader');
45
46 is_deeply(
47     $engine->header->array,
48     [ 1, 2, 3 ],
49     '... got the right array value of the header');
50 ok(!defined($engine->header->hash), '... no hash value set');
51
52 # try with hash
53
54 $engine->header({ one => 1, two => 2, three => 3 });
55 isa_ok($engine->header, 'HTTPHeader');
56
57 is_deeply(
58     $engine->header->hash,
59     { one => 1, two => 2, three => 3 },
60     '... got the right hash value of the header');
61 ok(!defined($engine->header->array), '... no array value set');
62
63 dies_ok {
64    $engine->header("Foo"); 
65 } '... dies with the wrong type, even after coercion';
66
67 lives_ok {
68    $engine->header(HTTPHeader->new); 
69 } '... lives with the right type, even after coercion';
70
71
72
73