Commit | Line | Data |
90e78884 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 12; |
7 | use Test::Exception; |
8 | |
9 | BEGIN { |
10 | use_ok('Moose::Util::TypeConstraints'); |
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 | |
46 | lives_ok sub { |
47 | $params->parameterizable( { a => 'Hello', b => 'World' } ); |
48 | } => 'No problem setting parameterizable'; |
49 | |
50 | is_deeply $params->parameterizable, |
51 | { a => 'Hello', b => 'World' } => 'Got expected values'; |
52 | |
53 | # test parameterized |
54 | |
55 | lives_ok sub { |
56 | $params->parameterized( { a => 1, b => 2 } ); |
57 | } => 'No problem setting parameterized'; |
58 | |
59 | is_deeply $params->parameterized, { a => 1, b => 2 } => 'Got expected values'; |
60 | |
61 | throws_ok sub { |
62 | $params->parameterized( { a => 'Hello', b => 'World' } ); |
63 | }, qr/Attribute \(parameterized\) does not pass the type constraint/ => |
64 | 'parameterized throws expected error'; |
65 | |
66 | # test from_parameterizable |
67 | |
68 | lives_ok sub { |
69 | $params->from_parameterizable( { a => 1, b => 2 } ); |
70 | } => 'No problem setting from_parameterizable'; |
71 | |
72 | is_deeply $params->from_parameterizable, |
73 | { a => 1, b => 2 } => 'Got expected values'; |
74 | |
75 | throws_ok sub { |
76 | $params->from_parameterizable( { a => 'Hello', b => 'World' } ); |
77 | }, |
78 | qr/Attribute \(from_parameterizable\) does not pass the type constraint/ |
79 | => 'from_parameterizable throws expected error'; |