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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Module::ScanDeps qw/scan_line/;
my @tests = (
{
chunk => 'use strict;',
expected => 'strict.pm',
},
{
chunk => 'require 5.10;',
expected => 'feature.pm',
},
{ # use 5.010 in one-liners was only returning feature.pm (actually, 5.9.5 or higher)
chunk => 'use 5.010; use MyModule::PlaceHolder1;',
expected => 'feature.pm MyModule/PlaceHolder1.pm',
comment => 'got more than just feature.pm when "use 5.010" in one-liner',
},
{ # use 5.009 in one-liners should not return feature.pm
chunk => 'use 5.009; use MyModule::PlaceHolder1;',
expected => 'MyModule/PlaceHolder1.pm',
comment => 'did not get feature.pm when "use 5.009" in one-liner',
},
{ # avoid early return when pragma is found in one-liners
chunk => 'use if 1, MyModule::PlaceHolder2; use MyModule::PlaceHolder1;',
expected => 'if.pm MyModule/PlaceHolder1.pm MyModule/PlaceHolder2.pm',
comment => 'if-pragma used in one-liner',
},
{ # avoid early return when pragma is found in one-liners
chunk => 'use autouse "MyModule::PlaceHolder2"; use MyModule::PlaceHolder1;',
expected => 'autouse.pm MyModule/PlaceHolder1.pm MyModule/PlaceHolder2.pm',
comment => 'autouse pragma used in one-liner',
},
{
chunk => "{ package foo; use if 1, 'warnings' }",
expected => 'if.pm warnings.pm',
},
{
chunk => "{ use if 1, 'warnings' }",
expected => 'if.pm warnings.pm',
},
{
chunk => " do { use if 1, 'warnings' }",
expected => 'if.pm warnings.pm',
},
{
chunk => " do { use foo }",
expected => 'foo.pm',
},
{
chunk => " eval { require Win32::WinError };",
expected => 'Win32/WinError.pm',
},
{
chunk => ' if ( eval { require Win32::WinError } ) {',
expected => 'Win32/WinError.pm',
},
{
chunk => " eval { require Win32::WinError; 1 };",
expected => 'Win32/WinError.pm',
},
{
chunk => ' if ( eval { require Win32::WinError; 1 } ) {',
expected => 'Win32/WinError.pm',
},
{
chunk => ' eval "require Win32::WinError; 1";',
expected => 'Win32/WinError.pm',
},
{
chunk => ' eval q(require Win32::WinError; 1);',
expected => 'Win32/WinError.pm',
},
{
chunk => ' eval qq[require Win32::WinError; 1];',
expected => 'Win32/WinError.pm',
},
{
chunk => ' eval qq {require Win32::WinError; 1};',
expected => 'Win32/WinError.pm',
},
{
chunk => ' if ( eval "require Win32::WinError; 1" ) {',
expected => 'Win32/WinError.pm',
},
{
chunk => ' eval "require Win32::WinError";',
expected => 'Win32/WinError.pm',
},
{
chunk => ' if ( eval "require Win32::WinError" ) {',
expected => 'Win32/WinError.pm',
},
);
plan tests => 1+@tests;
# RT#48151
eval { scan_line('require __PACKAGE__ . "SomeExt.pm";') };
is($@,'');
foreach my $t (@tests)
{
my @got = scan_line($t->{chunk});
my @exp = split(' ', $t->{expected});
is_deeply([sort @got], [sort @exp], $t->{comment} || $t->{chunk});
}
|