X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/a52f2cced5b51a96e90a2604111245e6096dae5b..34aeb2e92066dd41c16797e63eb0496735b5dfe4:/ext/XS-APItest/t/load-module.t diff --git a/ext/XS-APItest/t/load-module.t b/ext/XS-APItest/t/load-module.t index 303025f..78189f8 100644 --- a/ext/XS-APItest/t/load-module.t +++ b/ext/XS-APItest/t/load-module.t @@ -1,6 +1,12 @@ #!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; @@ -22,34 +28,39 @@ like($@, qr/less version 1 required--this is only version 0\./, 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();