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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
|
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/../../../";
use Test::More;
use t::Util;
# compatibility test with Module::ExtractUse
test('useSome::Module', <<'END', used());
useSome::Module1;
END
test('use Some::Module2', <<'END', used(qw/Some::Module2/));
use Some::Module2;
END
test('useless stuff', <<'END', used(qw/Some::Module3/));
yadda yadda useless stuff;
use Some::Module3 qw/$VERSION @EXPORT @EXPORT_OK/;
END
# base is not listed in as of M::EU 0.33
test('use base', <<'END', used(qw/base Class::DBI4 Foo::Bar5/));
use base qw(Class::DBI4 Foo::Bar5);
END
test('use in if block', <<'END', used(qw/Foo::Bar6/));
if ($foo) { use Foo::Bar6; }
END
test('use constant', <<'END', used(qw/constant/));
use constant dl_ext => $Config{dlext};
END
test('use strict', <<'END', used(qw/strict/));
use strict;
END
test('use Foo args', <<'END', used(qw/Foo8/));
use Foo8 qw/asdfsdf/;
END
test('$use', <<'END', used());
$use=stuff;
END
test('abuse', <<'END', used());
abuse Stuff;
END
test('package', <<'END', used());
package Module::ScanDeps;
END
# XXX: incompatibility
# M::EU 0.33 returns Bar7
test('require in if block', <<'END', used());
if ($foo) { require "Bar7"; }
END
test('require file', <<'END', used());
require "some/stuff.pl";
END
# XXX: incompatibility
# M::EU 0.33 returns Foo::Bar9, which seems a bug, but it may be (or
# may not be) nice to have Foo/Bar.pm => Foo::Bar conversion here.
test('require .pm file', <<'END', used());
require "Foo/Bar.pm9";
END
test('require namespace', <<'END', used(qw/Foo10/));
require Foo10;
END
test('two uses in a line', <<'END', used(qw/Some::Module11 Some::Other::Module12/));
use Some::Module11;use Some::Other::Module12;
END
test('two uses', <<'END', used(qw/Some::Module Some::Other::Module/));
use Some::Module;
use Some::Other::Module;
END
test('use vars', <<'END', used(qw/vars/));
use vars qw/$VERSION @EXPORT @EXPORT_OK/;
END
test('use in comment', <<'END', used());
unless ref $obj; # use ref as $obj
END
test('use in string', <<'END', used());
$self->_carp("$name trigger deprecated: use before_$name or after_$name instead");
END
test('use base', <<'END', used(qw/base Exporter1/));
use base 'Exporter1';
END
test('use base with parentheses', <<'END', used(qw/base Class::DBI2/));
use base ("Class::DBI2");
END
test('use base with string', <<'END', used(qw/base Class::DBI3/));
use base "Class::DBI3";
END
test('use base with qw', <<'END', used(qw/base Class::DBI4 Foo::Bar5/));
use base qw/Class::DBI4 Foo::Bar5/;
END
test('use base with parentheses (2)', <<'END', used(qw/base Class::DBI6 Foo::Bar7/));
use base ("Class::DBI6","Foo::Bar7");
END
test('use base with strings', <<'END', used(qw/base Class::DBI8 Foo::Bar9/));
use base "Class::DBI8","Foo::Bar9";
END
test('use parent', <<'END', used(qw/parent Exporter1/));
use parent 'Exporter1';
END
test('use parent with parentheses', <<'END', used(qw/parent Class::DBI2/));
use parent ("Class::DBI2");
END
test('use parent with string', <<'END', used(qw/parent Class::DBI3/));
use parent "Class::DBI3";
END
test('use parent with qw', <<'END', used(qw/parent Class::DBI4 Foo::Bar5/));
use parent qw/Class::DBI4 Foo::Bar5/;
END
test('use parent with parentheses (2)', <<'END', used(qw/parent Class::DBI6 Foo::Bar7/));
use parent ("Class::DBI6","Foo::Bar7");
END
test('use parent with strings', <<'END', used(qw/parent Class::DBI8 Foo::Bar9/));
use parent "Class::DBI8","Foo::Bar9";
END
test('use parent -norequire string', <<'END', used(qw/parent/));
use parent -norequire, 'Exporter1';
END
test('use parent -norequire in parentheses', <<'END', used(qw/parent/));
use parent (-norequire, "Class::DBI2");
END
test('use parent "-norequire" string', <<'END', used(qw/parent/));
use parent "-norequire", "Class::DBI3";
END
test('use parent -norequire in qw', <<'END', used(qw/parent/));
use parent qw/-norequire Class::DBI4 Foo::Bar5/;
END
test('use parent -norequire in parentheses', <<'END', used(qw/parent/));
use parent (-norequire,"Class::DBI6","Foo::Bar7");
END
test('use parent -norequire strings', <<'END', used(qw/parent/));
use parent -norequire,"Class::DBI8","Foo::Bar9";
END
test('use in eval', <<'END', used(), {'Test::Pod' => 1.06});
eval "use Test::Pod 1.06";
END
test('uses in two evals', <<'END', used(qw/strict Test::More/), {'Test::Pod' => 1.06, 'Test::Pod::Coverage' => 1.06});
#!/usr/bin/perl -w
use strict;
use Test::More;
eval "use Test::Pod 1.06";
eval 'use Test::Pod::Coverage 1.06;';
plan skip_all => "Test::Pod 1.06 required for testing POD" if $@;
all_pod_files_ok();
END
test('use base with qw and whitespaces', <<'END', used(qw/base Data::Phrasebook::Loader::Base Data::Phrasebook::Debug/));
use base qw( Data::Phrasebook::Loader::Base Data::Phrasebook::Debug );
END
test('RT #83569', <<'END', used(qw/warnings strict Test::More lib DBIx::Class DBICTest Test::Pod/));
use warnings;
use strict;
use Test::More;
use lib qw(t/lib);
use DBICTest;
require DBIx::Class;
unless ( DBIx::Class::Optional::Dependencies->req_ok_for ('test_pod') ) {
my $missing = DBIx::Class::Optional::Dependencies->req_missing_for ('test_pod');
$ENV{RELEASE_TESTING}
? die ("Failed to load release-testing module requirements: $missing")
: plan skip_all => "Test needs: $missing"
}
# this has already been required but leave it here for CPANTS static analysis
require Test::Pod;
my $generated_pod_dir = 'maint/.Generated_Pod';
Test::Pod::all_pod_files_ok( 'lib', -d $generated_pod_dir ? $generated_pod_dir : () );
END
test('require in string', <<'END', used(qw/Foo/));
use Foo;say "Failed to load the release-testing modules we require: Bar;"
END
test('require in string', <<'END', used(qw/Foo/));
use Foo;say "Failed to load the release-testing modules we require: Bar";
END
# dup
test('require in string', <<'END', used(qw/Foo/));
use Foo;say "Failed to load the release-testing modules we require: Bar;"
END
test('use Data::Section -setup', <<'END', used(qw/Data::Section/));
use Data::Section -setup;
END
test('use Data::Section with hashref', <<'END', used(qw/Data::Section/));
use Data::Section { installer => method_installer }, -setup;
END
test('use Data::Section -setup hashref', <<'END', used(qw/Data::Section/));
use Data::Section -setup => { header_re => qr/^\@\@\s*(\S+)/ };
END
test('use Module ()', <<'END', used(qw/Foo::Bar29/));
use Foo::Bar29 ();
END
test('use Module version ()', <<'END', {'Min::Version30' => 1.2});
use Min::Version30 1.2 ();
END
test('use MooseX::Types -declare', <<'END', used(qw/MooseX::Types/));
use MooseX::Types -declare => [qw(BorderStyle Component Container)];
END
test('require in eval block', <<'END', {}, used(qw/Foo::Bar32/));
eval { require Foo::Bar32 };
END
test('use in do block', <<'END', used(qw/Foo::Bar33/));
do { use Foo::Bar33 };
END
test('use version', <<'END', used(qw/version/));
use version;
END
test('use version VERSION', <<'END', {version => '0.77'});
use version 0.77;
END
done_testing;
|