use strict;
use warnings;
-use Test::More tests => 32;
+use Test::More;
use Test::Exception;
require Class::MOP;
use lib 't/lib';
-ok(!Class::MOP::is_class_loaded(), "is_class_loaded with no argument returns false");
+dies_ok {
+ Class::MOP::is_class_loaded()
+} "is_class_loaded with no argument dies";
+
ok(!Class::MOP::is_class_loaded(''), "can't load the empty class");
ok(!Class::MOP::is_class_loaded(\"foo"), "can't load a class name reference??");
{
local $@;
eval { Class::MOP::load_class('Class') };
- ok( ! $@, 'load_class never dies' );
+ ok( ! $@, 'load_class does not die if the package is already defined' );
}
ok( !Class::MOP::does_metaclass_exist("Class"), "no metaclass for non MOP class" );
throws_ok {
Class::MOP::load_class('This::Does::Not::Exist');
}
-qr/Could not load class \(This::Does::Not::Exist\) because :/,
- 'Many Moose tests rely on the exact formatting of this error';
+qr{Can't locate This/Does/Not/Exist\.pm in \@INC},
+ 'load_first_existing_class throws a familiar error for a single module';
{
package Other;
throws_ok {
Class::MOP::load_first_existing_class("Does::Not::Exist", "Also::Does::Not::Exist")
-} qr/Could not load class \(Does::Not::Exist.*Could not load class \(Also::Does::Not::Exist/s, 'Multiple non-existant classes cause exception';
+} qr/Does::Not::Exist.*Also::Does::Not::Exist/s, 'Multiple non-existant classes cause exception';
{
sub whatever {
'an @ISA with members does mean a class is loaded' );
}
+{
+ {
+ package Class::WithVersion;
+ our $VERSION = 23;
+ };
+
+ ok( Class::MOP::is_class_loaded('Class::WithVersion', { -version => 13 }),
+ 'version 23 satisfies version requirement 13' );
+
+ ok( !Class::MOP::is_class_loaded('Class::WithVersion', { -version => 42 }),
+ 'version 23 does not satisfy version requirement 42' );
+
+ throws_ok {
+ Class::MOP::load_first_existing_class('Affe', 'Tiger', 'Class::WithVersion' => { -version => 42 });
+ } qr/Class::WithVersion version 42 required--this is only version 23/,
+ 'load_first_existing_class gives correct exception on old version';
+
+ lives_ok {
+ Class::MOP::load_first_existing_class('Affe', 'Tiger', 'Class::WithVersion' => { -version => 13 });
+ } 'loading class with required version with load_first_existing_class';
+
+ throws_ok {
+ Class::MOP::load_class('Class::WithVersion' => { -version => 42 });
+ } qr/Class::WithVersion version 42 required--this is only version 23/,
+ 'load_class gives correct exception on old version';
+
+ lives_ok {
+ Class::MOP::load_class('Class::WithVersion' => { -version => 13 });
+ } 'loading class with required version with load_class';
+
+}
+
+done_testing;