Commit | Line | Data |
c20dc98b |
1 | #!/usr/bin/env perl |
2 | use warnings; |
3 | use strict; |
4 | |
5 | use Test::More; |
6 | use FindBin; |
7 | use lib "$FindBin::Bin/lib"; |
57dad71e |
8 | use Moose::Util::TypeConstraints; |
9 | BEGIN { coerce 'Str', from 'Int', via { "$_" } } |
c20dc98b |
10 | use TestWrapper TestLibrary => [qw( NonEmptyStr IntArrayRef )], |
11 | Moose => [qw( Str Int )]; |
12 | |
57dad71e |
13 | |
c20dc98b |
14 | my @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 |
20 | plan tests => (@tests * 9); |
c20dc98b |
21 | |
22 | # new array ref so we can safely shift from it |
23 | for 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 | |