X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F200_examples%2F004_example_w_DCS.t;fp=t%2F200_examples%2F004_example_w_DCS.t;h=00e8dce45ad5278e5659d7be4215c5ea2110c90c;hb=7a50b45027c9f7baad76cfce7f78c822bd38f0a7;hp=0000000000000000000000000000000000000000;hpb=60b5c3be4d0b3bb705df1e8d977f2ce90db6668d;p=gitmo%2FMouse.git diff --git a/t/200_examples/004_example_w_DCS.t b/t/200_examples/004_example_w_DCS.t new file mode 100644 index 0000000..00e8dce --- /dev/null +++ b/t/200_examples/004_example_w_DCS.t @@ -0,0 +1,92 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More; + +=pod + +This tests how well Mouse type constraints +play with Declare::Constraints::Simple. + +Pretty well if I do say so myself :) + +=cut + +BEGIN { + eval "use Declare::Constraints::Simple;"; + plan skip_all => "Declare::Constraints::Simple is required for this test" if $@; + plan tests => 9; +} + +use Test::Exception; + +{ + package Foo; + use Mouse; + use Mouse::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 Mouse; +} + +my $hash_of_arrays_of_objs = { + foo1 => [ Bar->new ], + foo2 => [ Bar->new, Bar->new ], +}; + +my $array_of_ints = [ 1 .. 10 ]; + +my $foo; +lives_ok { + $foo = Foo->new( + 'bar' => $hash_of_arrays_of_objs, + 'baz' => $array_of_ints, + ); +} '... 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'); + +dies_ok { + $foo->bar([]); +} '... validation failed correctly'; + +dies_ok { + $foo->bar({ foo => 3 }); +} '... validation failed correctly'; + +dies_ok { + $foo->bar({ foo => [ 1, 2, 3 ] }); +} '... validation failed correctly'; + + +dies_ok { + $foo->baz([ "foo" ]); +} '... validation failed correctly'; + +dies_ok { + $foo->baz({}); +} '... validation failed correctly';