X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTest%2FMoose.pm;h=38f5fe67cccd136aad8e051c4df93ecb11874d17;hb=a8aa2cf8d84348330fec5f6ca3c819840a436d61;hp=ff9a96ae69c8638ffcd8ef21393a892cf8e56f20;hpb=30350cb4d7b4345131ed638b2b30e7d1b7b1ef4c;p=gitmo%2FMoose.git diff --git a/lib/Test/Moose.pm b/lib/Test/Moose.pm index ff9a96a..38f5fe6 100644 --- a/lib/Test/Moose.pm +++ b/lib/Test/Moose.pm @@ -6,16 +6,14 @@ use warnings; use Sub::Exporter; use Test::Builder; +use List::MoreUtils 'all'; use Moose::Util 'does_role', 'find_meta'; -our $VERSION = '0.65'; -$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,59 +29,67 @@ 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->(); + Class::MOP::class_of($_)->make_immutable for @_; + $block->(); + my $num_tests = $Test->current_test - $before; + return all { $_ } ($Test->summary)[-$num_tests..-1]; } 1; +# ABSTRACT: Test functions for Moose specific features + __END__ =pod -=head1 NAME - -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 +97,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 +110,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,24 +157,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. - -=head1 AUTHOR - -Anders Nor Berle Edebolaz@gmail.comE - -Stevan Little Estevan@iinteractive.comE - -=head1 COPYRIGHT AND LICENSE - -Copyright 2007-2008 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. +See L for details on reporting bugs. =cut