#!perl -w
use strict;
+# Test the load_module() core API function.
+#
+# Note that this function can be passed arbitrary and illegal module
+# names which would already have been caught if a require statement had
+# been compiled. So check that load_module() can catch such bad things.
+
use Test::More;
use XS::APItest;
is(eval { load_module(PERL_LOADMOD_NOIMPORT, 'less', 0.03); 1}, 1,
"expect load_module() not to fail");
+#
+# Check for illegal module names
+
for (["", qr!\ABareword in require maps to empty filename!],
- ["::", qr!\ABareword in require maps to empty filename!],
- ["::::", qr!\ABareword in require maps to disallowed filename "/\.pm"!],
- ["::/", qr!\ABareword in require maps to disallowed filename "/\.pm"!],
- ["::/WOOSH", qr!\ABareword in require maps to disallowed filename "/WOOSH\.pm"!],
- [".WOOSH", qr!\ABareword in require maps to disallowed filename "\.WOOSH\.pm"!],
- ["::.WOOSH", qr!\ABareword in require maps to disallowed filename "\.WOOSH\.pm"!],
- ["WOOSH::.sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH::.sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH/.sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH/..sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH/../sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH::..::sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH::.::sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH::./sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH/./sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH/.::sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH/..::sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH::../sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH::../..::sock", qr!\ABareword in require contains "/\."!],
- ["::WOOSH\0sock", qr!\ACan't locate WOOSH\\0sock.pm:!],
- ) {
+ ["::", qr!\ABareword in require must not start with a double-colon: "::"!],
+ ["::::", qr!\ABareword in require must not start with a double-colon: "::::"!],
+ ["::/", qr!\ABareword in require must not start with a double-colon: "::/!],
+ ["/", qr!\ABareword in require maps to disallowed filename "/\.pm"!],
+ ["::/WOOSH", qr!\ABareword in require must not start with a double-colon: "::/WOOSH!],
+ [".WOOSH", qr!\ABareword in require maps to disallowed filename "\.WOOSH\.pm"!],
+ ["::.WOOSH", qr!\ABareword in require must not start with a double-colon: "::.WOOSH!],
+ ["WOOSH::.sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH::.sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH/.sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH/..sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH/../sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH::..::sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH::.::sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH::./sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH/./sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH/.::sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH/..::sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH::../sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH::../..::sock", qr!\ABareword in require contains "/\."!],
+ ["WOOSH\0sock", qr!\ACan't locate WOOSH\\0sock.pm:!],
+ )
+{
my ($module, $error) = @$_;
my $module2 = $module; # load_module mangles its first argument
no warnings 'syscalls';
is(eval { load_module(PERL_LOADMOD_NOIMPORT, $module); 1}, undef,
"expect load_module() for '$module2' to fail");
- like($@, $error);
+ like($@, $error, "check expected error for $module2");
}
done_testing();