We only need local $? if we inline calls to DEMOLISH
[gitmo/Moose.git] / t / type_constraints / parameterize_from.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Fatal;
8
9 use Moose::Util::TypeConstraints;
10
11 # testing the parameterize method
12
13 {
14     my $parameterizable = subtype 'parameterizable_hashref', as 'HashRef';
15
16     my $parameterized = subtype 'parameterized_hashref', as 'HashRef[Int]';
17
18     my $int = Moose::Util::TypeConstraints::find_type_constraint('Int');
19
20     my $from_parameterizable = $parameterizable->parameterize($int);
21
22     isa_ok $parameterizable,
23         'Moose::Meta::TypeConstraint::Parameterizable', =>
24         'Got expected type instance';
25
26     package Test::Moose::Meta::TypeConstraint::Parameterizable;
27     use Moose;
28
29     has parameterizable      => ( is => 'rw', isa => $parameterizable );
30     has parameterized        => ( is => 'rw', isa => $parameterized );
31     has from_parameterizable => ( is => 'rw', isa => $from_parameterizable );
32 }
33
34 # Create and check a dummy object
35
36 ok my $params = Test::Moose::Meta::TypeConstraint::Parameterizable->new() =>
37     'Create Dummy object for testing';
38
39 isa_ok $params, 'Test::Moose::Meta::TypeConstraint::Parameterizable' =>
40     'isa correct type';
41
42 # test parameterizable
43
44 is( exception {
45     $params->parameterizable( { a => 'Hello', b => 'World' } );
46 }, undef, 'No problem setting parameterizable' );
47
48 is_deeply $params->parameterizable,
49     { a => 'Hello', b => 'World' } => 'Got expected values';
50
51 # test parameterized
52
53 is( exception {
54     $params->parameterized( { a => 1, b => 2 } );
55 }, undef, 'No problem setting parameterized' );
56
57 is_deeply $params->parameterized, { a => 1, b => 2 } => 'Got expected values';
58
59 like( exception {
60     $params->parameterized( { a => 'Hello', b => 'World' } );
61     }, qr/Attribute \(parameterized\) does not pass the type constraint/, 'parameterized throws expected error' );
62
63 # test from_parameterizable
64
65 is( exception {
66     $params->from_parameterizable( { a => 1, b => 2 } );
67 }, undef, 'No problem setting from_parameterizable' );
68
69 is_deeply $params->from_parameterizable,
70     { a => 1, b => 2 } => 'Got expected values';
71
72 like( exception {
73     $params->from_parameterizable( { a => 'Hello', b => 'World' } );
74     }, qr/Attribute \(from_parameterizable\) does not pass the type constraint/, 'from_parameterizable throws expected error' );
75
76 done_testing;