Revert most of the conversion to Test::Fatal so we can redo it
[gitmo/Moose.git] / t / 040_type_constraints / 019_coerced_parameterized_types.t
CommitLineData
acb8a5db 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
a28e50e4 6use Test::More;
53a4d826 7use Test::Exception;
acb8a5db 8
9BEGIN {
10 use_ok("Moose::Util::TypeConstraints");
11 use_ok('Moose::Meta::TypeConstraint::Parameterized');
12}
13
14BEGIN {
15 package MyList;
16 sub new {
17 my $class = shift;
18 bless { items => \@_ }, $class;
19 }
20
21 sub items {
22 my $self = shift;
23 return @{ $self->{items} };
24 }
25}
26
27subtype 'MyList' => as 'Object' => where { $_->isa('MyList') };
28
53a4d826 29lives_ok {
acb8a5db 30 coerce 'ArrayRef'
31 => from 'MyList'
32 => via { [ $_->items ] }
53a4d826 33} '... created the coercion okay';
acb8a5db 34
620db045 35my $mylist = Moose::Util::TypeConstraints::find_or_parse_type_constraint('MyList[Int]');
acb8a5db 36
7e4e1ad4 37ok($mylist->check(MyList->new(10, 20, 30)), '... validated it correctly (pass)');
38ok(!$mylist->check(MyList->new(10, "two")), '... validated it correctly (fail)');
39ok(!$mylist->check([10]), '... validated it correctly (fail)');
acb8a5db 40
41subtype 'EvenList' => as 'MyList' => where { $_->items % 2 == 0 };
42
43# XXX: get this to work *without* the declaration. I suspect it'll be a new
44# method in Moose::Meta::TypeCoercion that will look at the parents of the
45# coerced type as well. but will that be too "action at a distance"-ey?
53a4d826 46lives_ok {
acb8a5db 47 coerce 'ArrayRef'
48 => from 'EvenList'
49 => via { [ $_->items ] }
53a4d826 50} '... created the coercion okay';
acb8a5db 51
620db045 52my $evenlist = Moose::Util::TypeConstraints::find_or_parse_type_constraint('EvenList[Int]');
acb8a5db 53
7e4e1ad4 54ok(!$evenlist->check(MyList->new(10, 20, 30)), '... validated it correctly (fail)');
55ok($evenlist->check(MyList->new(10, 20, 30, 40)), '... validated it correctly (pass)');
56ok(!$evenlist->check(MyList->new(10, "two")), '... validated it correctly (fail)');
57ok(!$evenlist->check([10, 20]), '... validated it correctly (fail)');
acb8a5db 58
a28e50e4 59done_testing;