X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTest%2FMoose.pm;h=f49683f6e1ccb2b1aa8c693de9f2e435f9b74c23;hb=2cc69b8715fa4894429835bb97a84309028221ce;hp=de48dbf3fd40f0111ffac328567a4ce8c5cfdec5;hpb=0aca6c894339607ab07bc40a508ab47129f0f1ec;p=gitmo%2FMoose.git diff --git a/lib/Test/Moose.pm b/lib/Test/Moose.pm index de48dbf..f49683f 100644 --- a/lib/Test/Moose.pm +++ b/lib/Test/Moose.pm @@ -6,16 +6,18 @@ use warnings; use Sub::Exporter; use Test::Builder; +use List::MoreUtils 'all'; use Moose::Util 'does_role', 'find_meta'; -our $VERSION = '0.74'; +our $VERSION = '0.93'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; my @exports = qw[ meta_ok - does_ok + does_ok has_attribute_ok + with_immutable ]; Sub::Exporter::setup_exporter({ @@ -31,43 +33,53 @@ my $Test = Test::Builder->new; sub meta_ok ($;$) { my ($class_or_obj, $message) = @_; - + $message ||= "The object has a meta"; - + if (find_meta($class_or_obj)) { return $Test->ok(1, $message) } else { - return $Test->ok(0, $message); + return $Test->ok(0, $message); } } sub does_ok ($$;$) { my ($class_or_obj, $does, $message) = @_; - + $message ||= "The object does $does"; - + if (does_role($class_or_obj, $does)) { return $Test->ok(1, $message) } else { - return $Test->ok(0, $message); + return $Test->ok(0, $message); } } sub has_attribute_ok ($$;$) { my ($class_or_obj, $attr_name, $message) = @_; - + $message ||= "The object does has an attribute named $attr_name"; - - my $meta = find_meta($class_or_obj); - + + my $meta = find_meta($class_or_obj); + if ($meta->find_attribute_by_name($attr_name)) { return $Test->ok(1, $message) } else { - return $Test->ok(0, $message); - } + return $Test->ok(0, $message); + } +} + +sub with_immutable (&@) { + my $block = shift; + my $before = $Test->current_test; + $block->(); + $_->meta->make_immutable for @_; + $block->(); + my $num_tests = $Test->current_test - $before; + return all { $_ } ($Test->summary)[-$num_tests..-1]; } 1; @@ -83,7 +95,7 @@ Test::Moose - Test functions for Moose specific features =head1 SYNOPSIS use Test::More plan => 1; - use Test::Moose; + use Test::Moose; meta_ok($class_or_obj, "... Foo has a ->meta"); does_ok($class_or_obj, $role, "... Foo does the Baz role"); @@ -91,7 +103,7 @@ Test::Moose - Test functions for Moose specific features =head1 DESCRIPTION -This module provides some useful test functions for Moose based classes. It +This module provides some useful test functions for Moose based classes. It is an experimental first release, so comments and suggestions are very welcome. =head1 EXPORTED FUNCTIONS @@ -104,14 +116,19 @@ Tests if a class or object has a metaclass. =item B -Tests if a class or object does a certain role, similar to what C +Tests if a class or object does a certain role, similar to what C does for the C method. =item B -Tests if a class or object has a certain attribute, similar to what C +Tests if a class or object has a certain attribute, similar to what C does for the methods. +=item B + +Runs B (which should contain normal tests) twice, and immutablizes each +class in C<@class_names> in between the two runs. + =back =head1 TODO @@ -146,7 +163,7 @@ does for the methods. =head1 BUGS -All complex software has bugs lurking in it, and this module is no +All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT. @@ -163,7 +180,7 @@ Copyright 2007-2009 by Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. +it under the same terms as Perl itself. =cut