X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTest%2FMoose.pm;h=216931f09422f9da1bbfb962c43c22341a6c5ab4;hb=efa728b4984ddf1611bc9931fbc209438459652c;hp=a8669b9642ebbb6ac196e66fa1dc0a16de297476;hpb=a7be0f8593e4e7b7f570f49027ee4f8f25d4d8bc;p=gitmo%2FMoose.git diff --git a/lib/Test/Moose.pm b/lib/Test/Moose.pm index a8669b9..216931f 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.69'; +our $VERSION = '1.15'; $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->(); + Class::MOP::class_of($_)->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