[libdist-zilla-plugin-test-eol-perl] 09/13: add support for custom filefinders
Intrigeri
intrigeri at moszumanska.debian.org
Sun Aug 16 09:20:35 UTC 2015
This is an automated email from the git hooks/post-receive script.
intrigeri pushed a commit to annotated tag 0.17
in repository libdist-zilla-plugin-test-eol-perl.
commit b76361f98294e6c342c91804d65f9370c0739914
Author: Karen Etheridge <ether at cpan.org>
Date: Fri Jan 30 23:26:13 2015 -0800
add support for custom filefinders
---
Changes | 5 +++
lib/Dist/Zilla/Plugin/Test/EOL.pm | 84 ++++++++++++++++++++++++++++++++-------
t/01-basic.t | 15 +++++--
t/{01-basic.t => 03-finder.t} | 59 ++++++++++-----------------
4 files changed, 108 insertions(+), 55 deletions(-)
diff --git a/Changes b/Changes
index baec570..2d52d21 100644
--- a/Changes
+++ b/Changes
@@ -2,6 +2,11 @@ Revision history for {{$dist->name}}
{{$NEXT}}
- include trailing_whitespace in config dumped into metadata
+ - now includes the list of files to check inside the test, allowing
+ customization of files to search via filefinder options (adds
+ searching of .pod by default); also works around issue with older
+ Test::EOL Test::NoTabs that tests nothing when the test is two levels
+ deep from the dist root (see RT#66177)
0.16 2014-11-17 03:00:59Z
- allow tests to pass even while upstream modules have warnings under
diff --git a/lib/Dist/Zilla/Plugin/Test/EOL.pm b/lib/Dist/Zilla/Plugin/Test/EOL.pm
index e9cb9e0..f6d73de 100644
--- a/lib/Dist/Zilla/Plugin/Test/EOL.pm
+++ b/lib/Dist/Zilla/Plugin/Test/EOL.pm
@@ -5,14 +5,22 @@ package Dist::Zilla::Plugin::Test::EOL;
# KEYWORDS: plugin test testing author development whitespace newline linefeed formatting
use Moose;
+use Path::Tiny;
use Sub::Exporter::ForMethods 'method_installer';
use Data::Section 0.004 # fixed header_re
{ installer => method_installer }, '-setup';
+use Moose::Util::TypeConstraints 'role_type';
use namespace::autoclean;
with
'Dist::Zilla::Role::FileGatherer',
+ 'Dist::Zilla::Role::FileMunger',
'Dist::Zilla::Role::TextTemplate',
+ 'Dist::Zilla::Role::FileFinderUser' => {
+ method => 'found_files',
+ finder_arg_names => [ 'finder' ],
+ default_finders => [ ':InstallModules', ':ExecFiles', ':TestFiles' ],
+ },
'Dist::Zilla::Role::PrereqSource',
;
@@ -28,13 +36,17 @@ has filename => (
default => sub { return 'xt/author/eol.t' },
);
+has _file_obj => (
+ is => 'rw', isa => role_type('Dist::Zilla::Role::File'),
+);
+
around dump_config => sub
{
my ($orig, $self) = @_;
my $config = $self->$orig;
$config->{+__PACKAGE__} = {
- map { $_ => $self->$_ } qw(filename trailing_whitespace),
+ map { $_ => $self->$_ } qw(filename trailing_whitespace finder),
};
return $config;
};
@@ -46,17 +58,40 @@ sub gather_files
require Dist::Zilla::File::InMemory;
$self->add_file(
- Dist::Zilla::File::InMemory->new(
- name => $self->filename,
- content => $self->fill_in_string(
- ${$self->section_data('__TEST__')},
- {
- plugin => \$self,
- trailing_ws => \$self->trailing_whitespace
- },
- ),
+ $self->_file_obj(
+ Dist::Zilla::File::InMemory->new(
+ name => $self->filename,
+ content => ${$self->section_data('__TEST__')},
+ )
+ )
+ );
+
+ return;
+}
+
+sub munge_files
+{
+ my $self = shift;
+
+ my @filenames = map { path($_->name)->relative('.')->stringify }
+ grep { not ($_->can('is_bytes') and $_->is_bytes) }
+ @{ $self->found_files };
+
+ $self->log_debug('adding file ' . $_) foreach @filenames;
+
+ my $file = $self->_file_obj;
+ $file->content(
+ $self->fill_in_string(
+ $file->content,
+ {
+ dist => \($self->zilla),
+ plugin => \$self,
+ filenames => [ sort @filenames ],
+ trailing_ws => \$self->trailing_whitespace,
+ },
)
);
+
return;
}
@@ -68,8 +103,8 @@ sub register_prereqs
type => 'requires',
phase => 'develop',
},
- 'Test::More' => 0,
- 'Test::EOL' => 0,
+ 'Test::More' => '0.88',
+ 'Test::EOL' => '0',
);
}
@@ -98,11 +133,25 @@ L<Test::EOL/all_perl_files_ok>. It defaults to C<1>.
What this option is going to do is test for the lack of trailing whitespace at
the end of the lines (also known as "trailing space").
+=head2 C<finder>
+
+=for stopwords FileFinder
+
+This is the name of a L<FileFinder|Dist::Zilla::Role::FileFinder> for finding
+files to check. The default value is C<:InstallModules>,
+C<:ExecFiles> (see also L<Dist::Zilla::Plugin::ExecDir>) and C<:TestFiles>;
+this option can be used more than once.
+
+Other predefined finders are listed in
+L<Dist::Zilla::Role::FileFinderUser/default_finders>.
+You can define your own with the
+L<[FileFinder::ByName]|Dist::Zilla::Plugin::FileFinder::ByName> plugin.
+
=head2 C<filename>
The filename of the test to add - defaults to F<xt/author/test-eol.t>.
-=for Pod::Coverage gather_files register_prereqs
+=for Pod::Coverage gather_files munge_files register_prereqs
=head1 ACKNOWLEDGMENTS
@@ -125,7 +174,12 @@ use warnings;
# this test was generated with {{ ref($plugin) . ' ' . ($plugin->VERSION || '<self>') }}
-use Test::More;
+use Test::More 0.88;
use Test::EOL;
-all_perl_files_ok({ trailing_whitespace => {{ $trailing_ws }} });
+my @files = (
+{{ join(",\n", map { " '" . $_ . "'" } map { s/'/\\'/g; $_ } @filenames) }}
+);
+
+eol_unix_ok($_, { trailing_whitespace => {{ $trailing_ws }} }) foreach @files;
+done_testing;
diff --git a/t/01-basic.t b/t/01-basic.t
index b08a556..de0f152 100644
--- a/t/01-basic.t
+++ b/t/01-basic.t
@@ -56,13 +56,22 @@ my $content = $file->slurp_utf8;
unlike($content, qr/[^\S\n]\n/m, 'no trailing whitespace in generated test');
unlike($content, qr/\t/m, 'no tabs in generated test');
+my @files = (
+ path(qw(lib Foo.pm)),
+ path(qw(lib Bar.pod)),
+ path(qw(bin myscript)),
+ path(qw(t foo.t)),
+);
+
+like($content, qr/'\Q$_\E'/m, "test checks $_") foreach @files;
+
cmp_deeply(
$tzil->distmeta,
superhashof({
prereqs => {
develop => {
requires => {
- 'Test::More' => '0',
+ 'Test::More' => '0.88',
'Test::EOL' => '0',
},
},
@@ -75,6 +84,7 @@ cmp_deeply(
'Dist::Zilla::Plugin::Test::EOL' => {
filename => 'xt/author/eol.t',
trailing_whitespace => 1,
+ finder => [ ':InstallModules', ':ExecFiles', ':TestFiles' ],
},
},
name => 'Test::EOL',
@@ -99,8 +109,7 @@ subtest 'run the generated test' => sub
$files_tested = Test::Builder->new->current_test;
};
-# this should be 4 - but .pod is not being picked up by Test::EOL
-is($files_tested, 3, 'correct number of files were tested');
+is($files_tested, @files, 'correct number of files were tested');
diag 'got log messages: ', explain $tzil->log_messages
if not Test::Builder->new->is_passing;
diff --git a/t/01-basic.t b/t/03-finder.t
similarity index 53%
copy from t/01-basic.t
copy to t/03-finder.t
index b08a556..b6de62a 100644
--- a/t/01-basic.t
+++ b/t/03-finder.t
@@ -2,11 +2,16 @@ use strict;
use warnings;
use Test::More;
-use Test::Warnings 0.009 ':no_end_test', ':all';
+use if $ENV{AUTHOR_TESTING}, 'Test::Warnings';
use Test::DZil;
use Path::Tiny;
use File::pushd 'pushd';
-use Test::Deep;
+
+BEGIN {
+ use Dist::Zilla::Plugin::Test::EOL;
+ $Dist::Zilla::Plugin::Test::EOL::VERSION = 9999
+ unless $Dist::Zilla::Plugin::Test::EOL::VERSION;
+}
my $tzil = Builder->from_config(
{ dist_root => 't/does-not-exist' },
@@ -15,8 +20,8 @@ my $tzil = Builder->from_config(
path(qw(source dist.ini)) => simple_ini(
[ GatherDir => ],
[ ExecDir => ],
- [ MetaConfig => ],
- [ 'Test::EOL' ],
+ [ 'FileFinder::ByName' => ExtraTestFiles => { dir => 'xt' } ],
+ [ 'Test::EOL' => { finder => [ ':InstallModules', ':TestFiles' ] } ],
),
path(qw(source lib Foo.pm)) => <<'MODULE',
package Foo;
@@ -50,41 +55,23 @@ $tzil->build;
my $build_dir = path($tzil->tempdir)->child('build');
my $file = $build_dir->child(qw(xt author eol.t));
-ok( -e $file, $file . ' created');
+ok( -e $file, 'test created');
my $content = $file->slurp_utf8;
unlike($content, qr/[^\S\n]\n/m, 'no trailing whitespace in generated test');
unlike($content, qr/\t/m, 'no tabs in generated test');
-cmp_deeply(
- $tzil->distmeta,
- superhashof({
- prereqs => {
- develop => {
- requires => {
- 'Test::More' => '0',
- 'Test::EOL' => '0',
- },
- },
- },
- x_Dist_Zilla => superhashof({
- plugins => supersetof(
- {
- class => 'Dist::Zilla::Plugin::Test::EOL',
- config => {
- 'Dist::Zilla::Plugin::Test::EOL' => {
- filename => 'xt/author/eol.t',
- trailing_whitespace => 1,
- },
- },
- name => 'Test::EOL',
- version => ignore,
- },
- ),
- }),
- }),
- 'prereqs are properly injected for the develop phase',
-) or diag 'got distmeta: ', explain $tzil->distmeta;
+my @files = (
+ path(qw(lib Foo.pm)),
+ path(qw(lib Bar.pod)),
+ path(qw(t foo.t)),
+);
+like($content, qr/'\Q$_\E'/m, "test checks $_") foreach @files;
+
+unlike($content, qr/'\Q$_\E'/m, "test does not check $_") foreach (
+ path(qw(bin myscript)),
+ path(qw(xt bar.t)),
+);
my $files_tested;
@@ -99,11 +86,9 @@ subtest 'run the generated test' => sub
$files_tested = Test::Builder->new->current_test;
};
-# this should be 4 - but .pod is not being picked up by Test::EOL
-is($files_tested, 3, 'correct number of files were tested');
+is($files_tested, @files, 'correct number of files were tested');
diag 'got log messages: ', explain $tzil->log_messages
if not Test::Builder->new->is_passing;
-had_no_warnings if $ENV{AUTHOR_TESTING};
done_testing;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libdist-zilla-plugin-test-eol-perl.git
More information about the Pkg-perl-cvs-commits
mailing list