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_TestDeep.t | |
download | Moose-tarball-5ac2026f7eed78958d69d051e7a8e993dcf51205.tar.gz |
Moose-2.1405HEADMoose-2.1405master
Diffstat (limited to 't/examples/example_w_TestDeep.t')
-rw-r--r-- | t/examples/example_w_TestDeep.t | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/t/examples/example_w_TestDeep.t b/t/examples/example_w_TestDeep.t new file mode 100644 index 0000000..caac9c6 --- /dev/null +++ b/t/examples/example_w_TestDeep.t @@ -0,0 +1,71 @@ +use strict; +use warnings; + +use Test::More; + +=pod + +This tests how well Moose type constraints +play with Test::Deep. + +Its not as pretty as Declare::Constraints::Simple, +but it is not completely horrid either. + +=cut + +use Test::Requires 'Test::Deep'; # skip all if not installed +use Test::Fatal; + +{ + package Foo; + use Moose; + use Moose::Util::TypeConstraints; + + use Test::Deep qw[ + eq_deeply array_each subhashof ignore + ]; + + # define your own type ... + type 'ArrayOfHashOfBarsAndRandomNumbers' + => where { + eq_deeply($_, + array_each( + subhashof({ + bar => Test::Deep::isa('Bar'), + random_number => ignore() + }) + ) + ) + }; + + has 'bar' => ( + is => 'rw', + isa => 'ArrayOfHashOfBarsAndRandomNumbers', + ); + + package Bar; + use Moose; +} + +my $array_of_hashes = [ + { bar => Bar->new, random_number => 10 }, + { bar => Bar->new }, +]; + +my $foo; +is( exception { + $foo = Foo->new('bar' => $array_of_hashes); +}, undef, '... construction succeeded' ); +isa_ok($foo, 'Foo'); + +is_deeply($foo->bar, $array_of_hashes, '... got our value correctly'); + +isnt( exception { + $foo->bar({}); +}, undef, '... validation failed correctly' ); + +isnt( exception { + $foo->bar([{ foo => 3 }]); +}, undef, '... validation failed correctly' ); + +done_testing; |