Add smartmatch support
[gitmo/MooseX-Types.git] / t / 12_wrapper-definition.t
CommitLineData
c20dc98b 1#!/usr/bin/env perl
2use warnings;
3use strict;
4
5use Test::More;
6use FindBin;
7use lib "$FindBin::Bin/lib";
57dad71e 8use Moose::Util::TypeConstraints;
9BEGIN { coerce 'Str', from 'Int', via { "$_" } }
c20dc98b 10use TestWrapper TestLibrary => [qw( NonEmptyStr IntArrayRef )],
11 Moose => [qw( Str Int )];
12
57dad71e 13
c20dc98b 14my @tests = (
57dad71e 15 [ 'NonEmptyStr', 'TestLibrary::NonEmptyStr', 12, "12", [], "foobar", "" ],
16 [ 'IntArrayRef', 'TestLibrary::IntArrayRef', 12, [12], {}, [17, 23], {} ],
17 [ 'Str', 'Str', 12, "12", [], "foo", [777] ],
c20dc98b 18);
19
57dad71e 20plan tests => (@tests * 9);
c20dc98b 21
22# new array ref so we can safely shift from it
23for my $data (map { [@$_] } @tests) {
24 my $type = shift @$data;
57dad71e 25 my $full = shift @$data;
c20dc98b 26
27 # Type name export
28 {
29 ok my $code = __PACKAGE__->can($type), "$type() was exported";
57dad71e 30 is $code->(), $full, "$type() returned correct type name";
c20dc98b 31 }
32
33 # coercion handler export
34 {
35 my ($coerce, $coercion_result, $cannot_coerce) = map { shift @$data } 1 .. 3;
36 ok my $code = __PACKAGE__->can("to_$type"), "to_$type() coercion was exported";
37 is_deeply scalar $code->($coerce), $coercion_result, "to_$type() coercion works";
57dad71e 38 eval { $code->($cannot_coerce) };
39 is $@, "coercion returned undef\n", "to_$type() died on invalid value";
c20dc98b 40 }
41
42 # type test handler
43 {
44 my ($valid, $invalid) = map { shift @$data } 1 .. 2;
45 ok my $code = __PACKAGE__->can("is_$type"), "is_$type() check was exported";
46 ok $code->($valid), "is_$type() check true on valid value";
47 ok ! $code->($invalid), "is_$type() check false on invalid value";
57dad71e 48 is ref($code->()), 'CODE', "is_$type() returns test closure without args";
c20dc98b 49 }
50}
51
52