This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Test that when directories in @INC are skipped, coderefs are still called.
authorNicholas Clark <nick@ccl4.org>
Thu, 28 Jun 2012 16:21:01 +0000 (18:21 +0200)
committerNicholas Clark <nick@ccl4.org>
Wed, 1 Aug 2012 20:41:11 +0000 (22:41 +0200)
For filenames that are absolute, or start with ./ or ../ only coderefs in
@INC are called - directories are skipped. Test this behaviour.

MANIFEST
t/lib/test_require.pm [new file with mode: 0644]
t/op/inccode.t

index d73e225..704b25f 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5066,6 +5066,7 @@ t/lib/strict/refs         Tests of "use strict 'refs'" for strict.t
 t/lib/strict/subs              Tests of "use strict 'subs'" for strict.t
 t/lib/strict/vars              Tests of "use strict 'vars'" for strict.t
 t/lib/subs/subs                        Tests of "use subs"
+t/lib/test_require.pm          A test file for t/op/inccode.t
 t/lib/test_use_14937.pm                A test pragma for t/comp/use.t
 t/lib/test_use.pm              A test pragma for t/comp/use.t
 t/lib/universal.t              Tests for functions in universal.c
diff --git a/t/lib/test_require.pm b/t/lib/test_require.pm
new file mode 100644 (file)
index 0000000..381e068
--- /dev/null
@@ -0,0 +1,6 @@
+#!perl -w
+# Don't use strict because this is for testing require
+
+package test_require;
+
+++$test_require::loaded;
index 44c9e89..d34e735 100644 (file)
@@ -21,7 +21,7 @@ unless (is_miniperl()) {
 
 use strict;
 
-plan(tests => 53 + !is_miniperl() * (3 + 14 * $can_fork));
+plan(tests => 60 + !is_miniperl() * (3 + 14 * $can_fork));
 
 sub get_temp_fh {
     my $f = tempfile();
@@ -194,12 +194,27 @@ $ret ||= do 'abc.pl';
 is( $ret, 'abc', 'do "abc.pl" sees return value' );
 
 {
-    my $filename = './Foo.pm';
+    my $got;
     #local @INC; # local fails on tied @INC
     my @old_INC = @INC; # because local doesn't work on tied arrays
-    @INC = sub { $filename = 'seen'; return undef; };
-    eval { require $filename; };
-    is( $filename, 'seen', 'the coderef sees fully-qualified pathnames' );
+    @INC = ('lib', 'lib/Devel', sub { $got = $_[1]; return undef; });
+    foreach my $filename ('/test_require.pm', './test_require.pm',
+                         '../test_require.pm') {
+       local %INC;
+       undef $got;
+       undef $test_require::loaded;
+       eval { require $filename; };
+       is($got, $filename, "the coderef sees the pathname $filename");
+       is($test_require::loaded, undef, 'no module is loaded' );
+    }
+
+    local %INC;
+    undef $got;
+    undef $test_require::loaded;
+
+    eval { require 'test_require.pm'; };
+    is($got, undef, 'the directory is scanned for test_require.pm');
+    is($test_require::loaded, 1, 'the module is loaded');
     @INC = @old_INC;
 }