summaryrefslogtreecommitdiff
path: root/t/007-first-existing.t
diff options
context:
space:
mode:
Diffstat (limited to 't/007-first-existing.t')
-rw-r--r--t/007-first-existing.t123
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;