X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTest%2FMoose.pm;h=b340b8714946a5fd1dcb1e1997976629dafbd3f4;hb=d4048ef33f6cad8a3453766505ee0c67690796f6;hp=81962a1af7d2b56b701b30b4e6836e49061695c3;hpb=baf46b9edc7dc3665c7eaf9d1684b157efb09e1a;p=gitmo%2FMoose.git diff --git a/lib/Test/Moose.pm b/lib/Test/Moose.pm index 81962a1..b340b87 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.72_01'; +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 make each +class in C<@class_names> immutable in between the two runs. + =back =head1 TODO @@ -146,9 +163,7 @@ does for the methods. =head1 BUGS -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. +See L for details on reporting bugs. =head1 AUTHOR @@ -163,7 +178,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