use strict;
my $class_name = 'Modules::RequireFilenameMatchesPackage';
for my $block (blocks) {
my $src = $block->input;
my $filename = $block->filename;
my $lexer = Compiler::Lexer->new($filename);
my $tokens = $lexer->tokenize($src);
my $violations = Perl::Lint::Policy::Modules::RequireFilenameMatchesPackage->evaluate($filename, $tokens, $src);
is scalar @$violations, $block->failures, $block->dscr;
}
done_testing;
__DATA__
===
--- dscr: Basic passes.
--- failures: 0
--- filename: OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic passes.
--- failures: 0
--- filename: Filename/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic passes.
--- failures: 0
--- filename: lib/Filename/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic passes.
--- failures: 0
--- filename: blib/lib/Filename/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic passes.
--- failures: 0
--- filename: OK.pl
--- input
package Filename::OK;
1;
===
--- dscr: Basic passes.
--- failures: 0
--- filename: Filename-OK-1.00/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic passes.
--- failures: 0
--- filename: Filename-OK/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic passes.
--- failures: 0
--- filename: Foobar-1.00/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic Failure.
--- failures: 1
--- filename: Bad.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic Failure.
--- failures: 1
--- filename: Filename/Bad.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic Failure.
--- failures: 1
--- filename: lib/Filename/BadOK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic Failure.
--- failures: 1
--- filename: ok.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic Failure.
--- failures: 1
--- filename: filename/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: Basic Failure.
--- failures: 1
--- filename: Foobar/OK.pm
--- input
package Filename::OK;
1;
===
--- dscr: first package is main, with inner package
--- filename: some_script
--- failures: 0
--- input
package main;
Inner::frobulate( @ARGV );
package Inner;
sub frobulate{};
1;
===
--- dscr: second package is main, with inner package
--- filename: some_script
--- failures: 1
--- input
package Inner;
sub frobulate{};
package main;
Inner::frobulate( @ARGV );
1;
# TODO
# ===
# --- dscr: Pass with apostrophe.
# --- filename: Oh.pm
# --- failures: 0
# --- input
# package D'Oh;
# 1;
# TODO
# ===
# --- dscr: Pass with apostrophe.
# --- filename: D/Oh.pm
# --- failures: 0
# --- input
# package D'Oh;
# 1;
# TODO
# ===
# --- dscr: Failure with apostrophe.
# --- filename: oh.pm
# --- failures: 1
# --- input
# package D'Oh;
# 1;
# TODO
# ===
# --- dscr: Failure with apostrophe.
# --- filename: d/Oh.pm
# --- failures: 1
# --- input
# package D'Oh;
# 1;
===
--- dscr: programs are exempt
--- failures: 0
--- filename: foo.plx
--- input
#!/usr/bin/perl
package Wibble;
===
--- dscr: using #line directive with double-quoted filename
--- filename: Foo.pm
--- failures: 0
--- input
#line 99 "Bar.pm"
package Bar;
===
--- dscr: using #line directive with bareword filename
--- filename: Foo.pm
--- failures: 0
--- input
#line 99 Bar.pm
package Bar;
===
--- dscr: #line directive appears after package declaration
--- filename: Foo.pm
--- failures: 1
--- input
package Bar;
#line 99 Bar.pm
===
--- dscr: multiple #line directives
--- filename: Foo.pm
--- failures: 1
--- input
#line 99 Bar.pm
#line 999 Baz.pm
package Bar;
===
--- dscr: #line directive with multi-part path
--- filename: Wrong.pm
--- failures: 0
--- input
#line 99 Foo/Bar/Baz.pm
package Foo::Bar::Baz;
===
--- dscr: #line directive with multi-part path in lib/ dir
--- filename: lib/Wrong.pm
--- failures: 0
--- input
#line 99 lib/Foo/Bar/Baz.pm
package Foo::Bar::Baz;
===
--- dscr: #line directive with partially matching multi-part path
--- filename: Wrong.pm
--- failures: 0
--- input
#line 99 Foo/Bar/Baz.pm
package Baz;
===
--- dscr: no package declaration at all
--- filename: Foo.pm
--- failures: 0
--- input
1;
===
--- dscr: #line directive with no package declaration at all
--- filename: Foo.pm
--- failures: 0
--- input
#line 1 Baz.pm
1;