diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-06-06 17:50:16 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-06-06 17:50:16 +0000 |
commit | 5ac2026f7eed78958d69d051e7a8e993dcf51205 (patch) | |
tree | 298c3d2f08bdfe5689998b11892d72a897985be1 /t/examples/example_w_DCS.t | |
download | Moose-tarball-master.tar.gz |
Moose-2.1405HEADMoose-2.1405master
Diffstat (limited to 't/examples/example_w_DCS.t')
-rw-r--r-- | t/examples/example_w_DCS.t | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/t/examples/example_w_DCS.t b/t/examples/example_w_DCS.t new file mode 100644 index 0000000..eb78d8d --- /dev/null +++ b/t/examples/example_w_DCS.t @@ -0,0 +1,87 @@ +use strict; +use warnings; + +use Test::More; + +=pod + +This tests how well Moose type constraints +play with Declare::Constraints::Simple. + +Pretty well if I do say so myself :) + +=cut + +use Test::Requires 'Declare::Constraints::Simple'; # skip all if not installed +use Test::Fatal; + +{ + package Foo; + use Moose; + use Moose::Util::TypeConstraints; + use Declare::Constraints::Simple -All; + + # define your own type ... + type( 'HashOfArrayOfObjects', + { + where => IsHashRef( + -keys => HasLength, + -values => IsArrayRef(IsObject) + ) + } ); + + has 'bar' => ( + is => 'rw', + isa => 'HashOfArrayOfObjects', + ); + + # inline the constraints as anon-subtypes + has 'baz' => ( + is => 'rw', + isa => subtype( { as => 'ArrayRef', where => IsArrayRef(IsInt) } ), + ); + + package Bar; + use Moose; +} + +my $hash_of_arrays_of_objs = { + foo1 => [ Bar->new ], + foo2 => [ Bar->new, Bar->new ], +}; + +my $array_of_ints = [ 1 .. 10 ]; + +my $foo; +is( exception { + $foo = Foo->new( + 'bar' => $hash_of_arrays_of_objs, + 'baz' => $array_of_ints, + ); +}, undef, '... construction succeeded' ); +isa_ok($foo, 'Foo'); + +is_deeply($foo->bar, $hash_of_arrays_of_objs, '... got our value correctly'); +is_deeply($foo->baz, $array_of_ints, '... got our value correctly'); + +isnt( exception { + $foo->bar([]); +}, undef, '... validation failed correctly' ); + +isnt( exception { + $foo->bar({ foo => 3 }); +}, undef, '... validation failed correctly' ); + +isnt( exception { + $foo->bar({ foo => [ 1, 2, 3 ] }); +}, undef, '... validation failed correctly' ); + +isnt( exception { + $foo->baz([ "foo" ]); +}, undef, '... validation failed correctly' ); + +isnt( exception { + $foo->baz({}); +}, undef, '... validation failed correctly' ); + +done_testing; |