[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