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 | |
28fdde7f |
9 | use Moose::Util::TypeConstraints; |
90e78884 |
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 | |
b10dde3a |
44 | is( exception { |
90e78884 |
45 | $params->parameterizable( { a => 'Hello', b => 'World' } ); |
b10dde3a |
46 | }, undef, 'No problem setting parameterizable' ); |
90e78884 |
47 | |
48 | is_deeply $params->parameterizable, |
49 | { a => 'Hello', b => 'World' } => 'Got expected values'; |
50 | |
51 | # test parameterized |
52 | |
b10dde3a |
53 | is( exception { |
90e78884 |
54 | $params->parameterized( { a => 1, b => 2 } ); |
b10dde3a |
55 | }, undef, 'No problem setting parameterized' ); |
90e78884 |
56 | |
57 | is_deeply $params->parameterized, { a => 1, b => 2 } => 'Got expected values'; |
58 | |
b10dde3a |
59 | like( exception { |
90e78884 |
60 | $params->parameterized( { a => 'Hello', b => 'World' } ); |
b10dde3a |
61 | }, qr/Attribute \(parameterized\) does not pass the type constraint/, 'parameterized throws expected error' ); |
90e78884 |
62 | |
63 | # test from_parameterizable |
64 | |
b10dde3a |
65 | is( exception { |
90e78884 |
66 | $params->from_parameterizable( { a => 1, b => 2 } ); |
b10dde3a |
67 | }, undef, 'No problem setting from_parameterizable' ); |
90e78884 |
68 | |
69 | is_deeply $params->from_parameterizable, |
70 | { a => 1, b => 2 } => 'Got expected values'; |
71 | |
b10dde3a |
72 | like( exception { |
90e78884 |
73 | $params->from_parameterizable( { a => 'Hello', b => 'World' } ); |
b10dde3a |
74 | }, qr/Attribute \(from_parameterizable\) does not pass the type constraint/, 'from_parameterizable throws expected error' ); |
a28e50e4 |
75 | |
76 | done_testing; |