meta_ok
does_ok
has_attribute_ok
+ with_immutable
)],
);
## exported functions
-sub meta_ok ($;$) {
+sub meta_ok ($;$) { ## no critic
my ($class_or_obj, $message) = @_;
$message ||= "The object has a meta";
}
}
-sub does_ok ($$;$) {
+sub does_ok ($$;$) { ## no critic
my ($class_or_obj, $does, $message) = @_;
$message ||= "The object does $does";
}
}
-sub has_attribute_ok ($$;$) {
+sub has_attribute_ok ($$;$) { ## no critic
my ($class_or_obj, $attr_name, $message) = @_;
$message ||= "The object does has an attribute named $attr_name";
}
}
+sub with_immutable (&@) { ## no critic
+ my $block = shift;
+
+ my $before = $Test->current_test;
+
+ $block->();
+ $_->meta->make_immutable for @_;
+ $block->();
+ return if not defined wantarray;
+
+ my $num_tests = $Test->current_test - $before;
+ return !grep{ !$_ } ($Test->summary)[-$num_tests .. -1];
+}
+
1;
__END__
Tests if a class or object has a certain attribute, similar to what C<can_ok>
does for the methods.
-=back
+=item B<with_immutable { CODE } @class_names>
-=head1 SEE ALSO
-
-=over 4
-
-=item L<Test::More>
+Runs I<CODE> *which should contain normal tests) twice, and make each
+class in I<@class_names> immutable between the two runs.
=back
L<Test::Moose>
+L<Test::More>
+
=cut