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