File: require_gh20577.t

package info (click to toggle)
perl 5.42.0-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 128,392 kB
  • sloc: perl: 534,963; ansic: 240,563; sh: 72,042; pascal: 6,934; xml: 2,428; yacc: 1,360; makefile: 1,197; cpp: 208; lisp: 1
file content (58 lines) | stat: -rw-r--r-- 1,504 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!perl -w

# Check that modifying %INC during an @INC hook does not
# clobber the hook by modifying @INC at the same time.
# See GitHub Issue #20577

chdir "t" if -d "t";
require './test.pl';
skip_all_if_miniperl("as PerlIO layer 'scalar' not supported under miniperl");
set_up_inc( '../lib' );
eval <<'EOF' or die $@;
{
    my %fatpacked;

    $fatpacked{"Test1.pm"} = <<'TEST1';
  package Test1;
  sub import {
      my $filename = 'Test2.pm';
      $INC{$filename} = "the_test_file";
  }
  1;
TEST1

    $fatpacked{"Test2.pm"} = <<'TEST2';
  package Test2;
  use Test1;
  1;
TEST2

    my $class = 'FatPacked';
    no strict 'refs';

    *{"${class}::INC"} = sub {
        if ( my $fat = $_[0]{ $_[1] } ) {
            open my $fh, '<', \$fat
              or die;
            return $fh;
        }
        return;
    };

    unshift @INC, bless \%fatpacked, $class;
}
1
EOF

ok(UNIVERSAL::isa($INC[0],"FatPacked"), '$INC[0] starts FatPacked');
ok(!exists $INC{"Test1.pm"}, 'Test1.pm not in %INC');
ok(!exists $INC{"Test2.pm"}, 'Test2.pm not in %INC');
my $ok= eval "use Test2; 1";
my $err= !$ok ? $@ : undef;
is($err,undef,"No error loading Test2");
is($ok,1,"Loaded Test2 successfully");
ok(UNIVERSAL::isa($INC[0],"FatPacked"), '$INC[0] is still FatPacked');
ok(UNIVERSAL::isa($INC{"Test1.pm"},"FatPacked"), '$INC{"Test1.pm"} is still FatPacked');
is($INC{"Test2.pm"},"the_test_file", '$INC{"Test2.pm"} is as expected');
is($INC[0],$INC{"Test1.pm"},'Same object in @INC and %INC');
done_testing();