Require Dist::Zilla 4.200016+
[gitmo/Moose.git] / t / type_constraints / parameterize_from.t
CommitLineData
90e78884 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
a28e50e4 6use Test::More;
b10dde3a 7use Test::Fatal;
90e78884 8
28fdde7f 9use 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
36ok my $params = Test::Moose::Meta::TypeConstraint::Parameterizable->new() =>
37 'Create Dummy object for testing';
38
39isa_ok $params, 'Test::Moose::Meta::TypeConstraint::Parameterizable' =>
40 'isa correct type';
41
42# test parameterizable
43
b10dde3a 44is( exception {
90e78884 45 $params->parameterizable( { a => 'Hello', b => 'World' } );
b10dde3a 46}, undef, 'No problem setting parameterizable' );
90e78884 47
48is_deeply $params->parameterizable,
49 { a => 'Hello', b => 'World' } => 'Got expected values';
50
51# test parameterized
52
b10dde3a 53is( exception {
90e78884 54 $params->parameterized( { a => 1, b => 2 } );
b10dde3a 55}, undef, 'No problem setting parameterized' );
90e78884 56
57is_deeply $params->parameterized, { a => 1, b => 2 } => 'Got expected values';
58
b10dde3a 59like( 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 65is( exception {
90e78884 66 $params->from_parameterizable( { a => 1, b => 2 } );
b10dde3a 67}, undef, 'No problem setting from_parameterizable' );
90e78884 68
69is_deeply $params->from_parameterizable,
70 { a => 1, b => 2 } => 'Got expected values';
71
b10dde3a 72like( 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
76done_testing;