The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use autodie;
use Test::More 0.94;# tests => 2;
use Test::DZil;

my $rc_content = do { local $/; <DATA>};
my $test_name = 'xt/author/critic.t';

subtest 'default' => sub {
    plan tests => 3;

    my $critic_config = 'perlcritic.rc';
    my $tzil = Builder->from_config(
        { dist_root => 'corpus/dist/DZT' },
        {
            add_files => {
                'source/dist.ini' => simple_ini(
                    ('GatherDir', 'Test::Perl::Critic')
                ),
                "source/$critic_config" => $rc_content,
            },
        },
    );

    $tzil->build;

    my $has_test = grep(
        $_->name eq $test_name,
        @{ $tzil->files }
    );
    ok($has_test, 'Perl::Critic test exists')
        or diag explain @{ $tzil->files };

    my $critic_test = $tzil->slurp_file("build/$test_name");
    like($critic_test, qr{Test::Perl::Critic}, 'We have a Perl::Critic test');
    like($critic_test, qr{$critic_config}, 'Right config file used');
};

subtest '.perlcriticrc' => sub {
    plan tests => 3;

    my $critic_config = '.perlcriticrc';
    my $tzil = Builder->from_config(
        { dist_root => 'corpus/dist/DZT' },
        {
            add_files => {
                'source/dist.ini' => simple_ini(
                    ('GatherDir', ['Test::Perl::Critic' => { critic_config => $critic_config}])
                ),
                "source/$critic_config" => $rc_content,
            },
        },
    );

    $tzil->build;

    my $has_test = grep(
        $_->name eq $test_name,
        @{ $tzil->files }
    );
    ok($has_test, 'Perl::Critic test exists')
        or diag explain @{ $tzil->files };

    my $critic_test = $tzil->slurp_file("build/$test_name");
    like($critic_test, qr{Test::Perl::Critic}, 'We have a Perl::Critic test');
    like($critic_test, qr{$critic_config}, 'Right config file used')
};

subtest 'empty' => sub {
    plan tests => 3;

    my $critic_config = 'perlcritic.rc';
    my $tzil = Builder->from_config(
        { dist_root => 'corpus/dist/DZT' },
        {
            add_files => {
                'source/dist.ini' => simple_ini(
                    ('GatherDir', ['Test::Perl::Critic', { critic_config => '' }])
                ),
                "source/$critic_config" => $rc_content,
            },
        },
    );

    $tzil->build;

    my $has_test = grep(
        $_->name eq $test_name,
        @{ $tzil->files }
    );
    ok($has_test, 'Perl::Critic test exists')
        or diag explain @{ $tzil->files };

    my $critic_test = $tzil->slurp_file("build/$test_name");
    like($critic_test, qr{Test::Perl::Critic}, 'We have a Perl::Critic test');
    like($critic_test, qr{$critic_config}, 'Right config file used')
};

subtest 'undef' => sub {
    plan tests => 3;

    my $critic_config = 'perlcritic.rc';
    my $tzil = Builder->from_config(
        { dist_root => 'corpus/dist/DZT' },
        {
            add_files => {
                'source/dist.ini' => simple_ini(
                    ('GatherDir', ['Test::Perl::Critic', { critic_config => undef }])
                ),
                "source/$critic_config" => $rc_content,
            },
        },
    );

    $tzil->build;

    my $has_test = grep(
        $_->name eq $test_name,
        @{ $tzil->files }
    );
    ok($has_test, 'Perl::Critic test exists')
        or diag explain @{ $tzil->files };

    my $critic_test = $tzil->slurp_file("build/$test_name");
    like($critic_test, qr{Test::Perl::Critic}, 'We have a Perl::Critic test');
    like($critic_test, qr{$critic_config}, 'Right config file used')
};

done_testing;

END { # Remove (empty) dir created by building the dists
    require File::Path;
    File::Path::rmtree('tmp');
}

__DATA__
severity = 3