use strict;
use warnings;
use Test::More;
use Moose::Util::TypeConstraints;
=pod
This is a good candidate for LectroTest
Volunteers welcome :)
=cut
## check the containers
ok(Moose::Util::TypeConstraints::_detect_parameterized_type_constraint($_),
'... this correctly detected a container (' . $_ . ')')
for (
'ArrayRef[Foo]',
'ArrayRef[Foo | Int]',
'ArrayRef[ArrayRef[Int]]',
'ArrayRef[ArrayRef[Int | Foo]]',
'ArrayRef[ArrayRef[Int|Str]]',
);
ok(!Moose::Util::TypeConstraints::_detect_parameterized_type_constraint($_),
'... this correctly detected a non-container (' . $_ . ')')
for (
'ArrayRef[]',
'ArrayRef[Foo]Bar',
);
{
my %split_tests = (
'ArrayRef[Foo]' => [ 'ArrayRef', 'Foo' ],
'ArrayRef[Foo | Int]' => [ 'ArrayRef', 'Foo | Int' ],
'ArrayRef[Foo|Int]' => [ 'ArrayRef', 'Foo|Int' ],
# these will get processed with recusion,
# so we only need to detect it once
'ArrayRef[ArrayRef[Int]]' => [ 'ArrayRef', 'ArrayRef[Int]' ],
'ArrayRef[ArrayRef[Int | Foo]]' => [ 'ArrayRef', 'ArrayRef[Int | Foo]' ],
'ArrayRef[ArrayRef[Int|Str]]' => [ 'ArrayRef', 'ArrayRef[Int|Str]' ],
);
is_deeply(
[ Moose::Util::TypeConstraints::_parse_parameterized_type_constraint($_) ],
$split_tests{$_},
'... this correctly split the container (' . $_ . ')'
) for keys %split_tests;
}
## now for the unions
ok(Moose::Util::TypeConstraints::_detect_type_constraint_union($_),
'... this correctly detected union (' . $_ . ')')
for (
'Int | Str',
'Int|Str',
'ArrayRef[Foo] | Int',
'ArrayRef[Foo]|Int',
'Int | ArrayRef[Foo]',
'Int|ArrayRef[Foo]',
'ArrayRef[Foo | Int] | Str',
'ArrayRef[Foo|Int]|Str',
'Str | ArrayRef[Foo | Int]',
'Str|ArrayRef[Foo|Int]',
'Some|Silly|Name|With|Pipes | Int',
'Some|Silly|Name|With|Pipes|Int',
);
ok(!Moose::Util::TypeConstraints::_detect_type_constraint_union($_),
'... this correctly detected a non-union (' . $_ . ')')
for (
'Int',
'ArrayRef[Foo | Int]',
'ArrayRef[Foo|Int]',
);
{
my %split_tests = (
'Int | Str' => [ 'Int', 'Str' ],
'Int|Str' => [ 'Int', 'Str' ],
'ArrayRef[Foo] | Int' => [ 'ArrayRef[Foo]', 'Int' ],
'ArrayRef[Foo]|Int' => [ 'ArrayRef[Foo]', 'Int' ],
'Int | ArrayRef[Foo]' => [ 'Int', 'ArrayRef[Foo]' ],
'Int|ArrayRef[Foo]' => [ 'Int', 'ArrayRef[Foo]' ],
'ArrayRef[Foo | Int] | Str' => [ 'ArrayRef[Foo | Int]', 'Str' ],
'ArrayRef[Foo|Int]|Str' => [ 'ArrayRef[Foo|Int]', 'Str' ],
'Str | ArrayRef[Foo | Int]' => [ 'Str', 'ArrayRef[Foo | Int]' ],
'Str|ArrayRef[Foo|Int]' => [ 'Str', 'ArrayRef[Foo|Int]' ],
'Some|Silly|Name|With|Pipes | Int' => [ 'Some', 'Silly', 'Name', 'With', 'Pipes', 'Int' ],
'Some|Silly|Name|With|Pipes|Int' => [ 'Some', 'Silly', 'Name', 'With', 'Pipes', 'Int' ],
);
is_deeply(
[ Moose::Util::TypeConstraints::_parse_type_constraint_union($_) ],
$split_tests{$_},
'... this correctly split the union (' . $_ . ')'
) for keys %split_tests;
}
done_testing;