BEGIN {
use strict;
use warnings;
- use Test::More tests=>34;
+ use Test::More tests=>36;
use Test::Exception;
use_ok 'Moose::Util::TypeConstraints';
package_defined_in => __PACKAGE__,
parent => find_type_constraint('ArrayRef'),
);
+
+my $dict = MooseX::Meta::TypeConstraint::Structured::Generator->new(
+ name => 'Dict',
+ structured_type => 'MooseX::Meta::TypeConstraint::Structured::Named',
+ package_defined_in => __PACKAGE__,
+ parent => find_type_constraint('HashRef'),
+ );
Moose::Util::TypeConstraints::register_type_constraint($optional);
Moose::Util::TypeConstraints::register_type_constraint($tuple);
+Moose::Util::TypeConstraints::register_type_constraint($dict);
## Make sure the new type constraints have been registered
ok Moose::Util::TypeConstraints::find_type_constraint('Tuple')
=> 'Found the Tuple Type';
+
+ok Moose::Util::TypeConstraints::find_type_constraint('Dict')
+ => 'Found the Tuple Type';
+
+ok Moose::Util::TypeConstraints::find_type_constraint('Optional')
+ => 'Found the Tuple Type';
{
package Test::MooseX::Types::Structured::BasicAttributes;
has 'tuple_with_parameterized' => (is=>'rw', isa=>'Tuple[Int,Str,Int,ArrayRef[Int]]');
has 'tuple_with_optional' => (is=>'rw', isa=>'Tuple[Int,Str,Int,Optional[Int,Int]]');
has 'tuple_with_union' => (is=>'rw', isa=>'Tuple[Int,Str,Int|Object,Optional[Int|Object,Int]]');
+
+ has 'dict' => (is=>'rw', isa=>'Dict[name=>Str, Age=>Int]');
+ has 'dict_with_parameterized' => (is=>'rw', isa=>'Dict[name=>Str, Age=>Int, telephone=>ArrayRef[Int]]');
+ has 'dict_with_optional' => (is=>'rw', isa=>'Dict[name=>Str, Age=>Int, Optional[opt1=>Str,Opt2=>Object]]');
+
}
#use Data::Dump qw/dump/;
## tuple_with_union Tuple[Int,Str,Int|Object,Optional[Int|Object,Int]]
-ok $positioned_obj->tuple_with_union([1,'hello',3])
- => "[1,'hello',3] properly suceeds";
+SKIP: {
-ok $positioned_obj->tuple_with_union([1,'hello',3,1])
- => "[1,'hello',3,1] properly suceeds";
+ skip "Unions not supported for string parsed type constraints" => 8;
-ok $positioned_obj->tuple_with_union([1,'hello',3,4])
- => "[1,'hello',3,4] properly suceeds";
+ ok $positioned_obj->tuple_with_union([1,'hello',3])
+ => "[1,'hello',3] properly suceeds";
-ok $positioned_obj->tuple_with_union([1,'hello',3,4,5])
- => "[1,'hello',3,4,5] properly suceeds";
+ ok $positioned_obj->tuple_with_union([1,'hello',3,1])
+ => "[1,'hello',3,1] properly suceeds";
-throws_ok sub {
- $positioned_obj->tuple_with_union([1,'hello',3,4,5,6]);
-}, qr/Too Many arguments for the available type constraints/ => "[1,'hello',3,4,5,6] properly fails";
+ ok $positioned_obj->tuple_with_union([1,'hello',3,4])
+ => "[1,'hello',3,4] properly suceeds";
-throws_ok sub {
- $positioned_obj->tuple_with_union([1,2,'world']);
-}, qr/Validation failed for 'Int' failed with value world/ => "[1,2,'world'] properly fails";
+ ok $positioned_obj->tuple_with_union([1,'hello',3,4,5])
+ => "[1,'hello',3,4,5] properly suceeds";
-throws_ok sub {
- $positioned_obj->tuple_with_union(['hello1',2,3]);
-}, qr/Validation failed for 'Int' failed with value hello1/ => "['hello',2,3] properly fails";
+ throws_ok sub {
+ $positioned_obj->tuple_with_union([1,'hello',3,4,5,6]);
+ }, qr/Too Many arguments for the available type constraints/ => "[1,'hello',3,4,5,6] properly fails";
-throws_ok sub {
- $positioned_obj->tuple_with_union(['hello2',2,'world']);
-}, qr/Validation failed for 'Int' failed with value hello2/ => "['hello',2,'world'] properly fails";
+ throws_ok sub {
+ $positioned_obj->tuple_with_union([1,2,'world']);
+ }, qr/Validation failed for 'Int' failed with value world/ => "[1,2,'world'] properly fails";
+ throws_ok sub {
+ $positioned_obj->tuple_with_union(['hello1',2,3]);
+ }, qr/Validation failed for 'Int' failed with value hello1/ => "['hello',2,3] properly fails";
+
+ throws_ok sub {
+ $positioned_obj->tuple_with_union(['hello2',2,'world']);
+ }, qr/Validation failed for 'Int' failed with value hello2/ => "['hello',2,'world'] properly fails";
+}
-#ok Moose::Util::TypeConstraints::_detect_parameterized_type_constraint('HashRef[key1 => Int, key2=>Int, key3=>ArrayRef[Int]]')
-# => 'detected correctly';
-
-#is_deeply
-# [Moose::Util::TypeConstraints::_parse_parameterized_type_constraint('HashRef[key1 => Int, key2=>Int, key3=>ArrayRef[Int]]')],
-# ["HashRef", "key1", "Int", "key2", "Int", "key3", "ArrayRef[Int]"]
-# => 'Correctly parsed HashRef[key1 => Int, key2=>Int, key3=>ArrayRef[Int]]';
\ No newline at end of file