diff options
Diffstat (limited to 't/007-first-existing.t')
-rw-r--r-- | t/007-first-existing.t | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/t/007-first-existing.t b/t/007-first-existing.t new file mode 100644 index 0000000..9332369 --- /dev/null +++ b/t/007-first-existing.t @@ -0,0 +1,123 @@ +use strict; +use warnings; +use Test::Fatal; +use Test::More 0.88; +use lib 't/lib'; +use Test::Class::Load 'load_first_existing_class'; + +is( + load_first_existing_class( + 'Class::Load::Nonexistent', 'Class::Load::OK' + ), + 'Class::Load::OK', + 'load_first_existing_class ignore nonexistent class' +); + +is( + load_first_existing_class( + 'Class::Load::Nonexistent', 'Class::Load::OK' + ), + 'Class::Load::OK', + 'load_first_existing_class ignore nonexistent class - works when good class is already loaded' +); + +like( + exception { + load_first_existing_class( 'Foo', 'bad name' ); + }, + qr/^\Q`bad name' is not a module name/, + 'load_first_existing_class balks on bad class name' +); + +like( + exception { + load_first_existing_class( 'Class::Load::Nonexistent', 'Class::Load::Nonexistent2' ); + }, + qr/^\QCan't locate Class::Load::Nonexistent or Class::Load::Nonexistent2 in \E\@INC/, + 'load_first_existing_class throws an error when no classes can be loaded' +); + +like( + exception { + load_first_existing_class( + 'Class::Load::Nonexistent', + 'Class::Load::Nonexistent2', + 'Class::Load::Nonexistent3' + ); + }, + qr/^\QCan't locate Class::Load::Nonexistent, Class::Load::Nonexistent2, or Class::Load::Nonexistent3 in \E\@INC/, + 'load_first_existing_class throws an error when no classes can be loaded' +); + +like( + exception { + load_first_existing_class( 'Class::Load::Nonexistent' ); + }, + qr/^\QCan't locate Class::Load::Nonexistent in \E\@INC/, + 'load_first_existing_class throws an error when given one class which it cannot load' +); + +like( + exception { + load_first_existing_class( + 'Class::Load::VersionCheck', { -version => 43 }, + 'Class::Load::VersionCheck2', { -version => 43 }, + ); + }, + qr/^\QCan't locate Class::Load::VersionCheck (version >= 43) or Class::Load::VersionCheck2 (version >= 43) in \E\@INC/, + 'load_first_existing_class throws an error when given multiple classes which it cannot load because of version checks' +); + +like( + exception { + load_first_existing_class( + 'Class::Load::VersionCheck', { -version => 43 }, + 'Class::Load::VersionCheck2', { -version => 43 }, + 'Class::Load::Nonexistent' + ); + }, + qr/^\QCan't locate Class::Load::VersionCheck (version >= 43), Class::Load::VersionCheck2 (version >= 43), or Class::Load::Nonexistent in \E\@INC/, + 'load_first_existing_class throws an error when given multiple classes which it cannot load, some because of version checks' +); + +like( + exception { + load_first_existing_class( 'Class::Load::VersionCheck', {-version => 43} ); + }, + qr/^\QCan't locate Class::Load::VersionCheck (version >= 43) in \E\@INC/, + 'load_first_existing_class throws an error when given one class which it cannot load because of version checks' +); + +like( + exception { + load_first_existing_class( + 'Class::Load::VersionCheck2', { -version => 43 }, + 'Class::Load::SyntaxError', { -version => 43 }, + 'Class::Load::Nonexistent' + ); + }, + qr/^\QCouldn't load class (Class::Load::SyntaxError) because: Missing right curly or square bracket/, + 'load_first_existing_class throws an error when a class fails to load because of a syntax error' +); + +is( + load_first_existing_class( + 'Class::Load::VersionCheck', { -version => 43 }, + 'Class::Load::VersionCheck2', { -version => 43 }, + 'Class::Load::OK' + ), + 'Class::Load::OK', + 'load_first_existing_class returns loadable class when two classes fail version checks' +); + +is( + load_first_existing_class( + 'Class::Load::VersionCheck', { -version => 43 }, + 'Class::Load::VersionCheck2', { -version => 41 }, + 'Class::Load::OK' + ), + 'Class::Load::VersionCheck2', + 'load_first_existing_class returns loadable class when a class passes the version check' +); + +done_testing; |