App-Codeowners

 view release on metacpan or  search on metacpan

t/00-compile.t  view on Meta::CPAN

use File::Spec;
use IPC::Open3;
use IO::Handle;

open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";

my @warnings;
for my $lib (@module_files)
{
    # see L<perlfaq8/How can I capture STDERR from an external command?>
    my $stderr = IO::Handle->new;

    diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
            $^X, @switches, '-e', "require q[$lib]"))
        if $ENV{PERL_COMPILE_TEST_DEBUG};

    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]");
    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
    my @_warnings = <$stderr>;
    waitpid($pid, 0);
    is($?, 0, "$lib loaded ok");

    shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
        and not eval { +require blib; blib->VERSION('1.01') };

    if (@_warnings)
    {
        warn @_warnings;
        push @warnings, @_warnings;

t/00-compile.t  view on Meta::CPAN

{ SKIP: {
    open my $fh, '<', $file or warn("Unable to open $file: $!"), next;
    my $line = <$fh>;

    close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!\s*(?:\S*perl\S*)((?:\s+-\w*)*)(?:\s*#.*)?$/;
    @switches = (@switches, split(' ', $1)) if $1;

    close $fh and skip("$file uses -T; not testable with PERL5LIB", 1)
        if grep { $_ eq '-T' } @switches and $ENV{PERL5LIB};

    my $stderr = IO::Handle->new;

    diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
            $^X, @switches, '-c', $file))
        if $ENV{PERL_COMPILE_TEST_DEBUG};

    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-c', $file);
    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
    my @_warnings = <$stderr>;
    waitpid($pid, 0);
    is($?, 0, "$file compiled ok");

    shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
        and not eval { +require blib; blib->VERSION('1.01') };

    # in older perls, -c output is simply the file portion of the path being tested
    if (@_warnings = grep { !/\bsyntax OK$/ }
        grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
    {

t/app-codeowners.t  view on Meta::CPAN

$0 = path($Bin)->parent->child('bin/git-codeowners')->absolute->stringify;

$ENV{NO_COLOR} = 1;

sub run(&) { ## no critic (Subroutines::ProhibitSubroutinePrototypes)
    my $code = shift;
    capture { exit_code { $code->() } };
}

subtest 'basic options' => sub {
    my ($stdout, $stderr, $exit) = run { App::Codeowners->main('--help') };
    is($exit, 0, 'exited 0 when --help');
    like($stdout, qr/Usage:/, 'correct --help output') or diag $stdout;

    ($stdout, $stderr, $exit) = run { App::Codeowners->main('--version') };
    is($exit, 0, 'exited 0 when --version');
    like($stdout, qr/git-codeowners [\d.]+\n/, 'correct --version output') or diag $stdout;
};

subtest 'bad options' => sub {
    my ($stdout, $stderr, $exit) = run { App::Codeowners->main(qw{show --not-an-option}) };
    is($exit, 2, 'exited with error on bad option');
    like($stderr, qr/Unknown option: not-an-option/, 'correct error message') or diag $stderr;
};

subtest 'show' => sub {
    plan skip_all => 'Cannot run git' if !$can_git;

    my $repodir = _setup_git_repo();
    my $chdir   = pushd($repodir);

    my ($stdout, $stderr, $exit) = run { App::Codeowners->main(qw{-f %F;%O show}) };
    is($exit, 0, 'exited without error');
    is($stdout, <<'END', 'correct output');
CODEOWNERS;
a/b/c/bar.txt;@snickers
foo.txt;@twix
END

    ($stdout, $stderr, $exit) = run { App::Codeowners->main(qw{-f %F;%O;%P show}) };
    is($exit, 0, 'exited without error');
    is($stdout, <<'END', 'correct output');
CODEOWNERS;;
a/b/c/bar.txt;@snickers;peanuts
foo.txt;@twix;
END

    subtest 'format json' => sub {
        plan skip_all => 'No JSON::MaybeXS' if !eval { require JSON::MaybeXS };

        ($stdout, $stderr, $exit) = run { App::Codeowners->main(qw{-f json show --no-projects}) };
        is($exit, 0, 'exited without error');
        my $expect = '[{"File":"CODEOWNERS","Owner":null},{"File":"a/b/c/bar.txt","Owner":["@snickers"]},{"File":"foo.txt","Owner":["@twix"]}]';
        is($stdout, $expect, 'correct output with json format');
    };
};

subtest 'create' => sub {
    plan skip_all => 'Cannot run git' if !$can_git;

    my $repodir = _setup_git_repo();
    my $chdir   = pushd($repodir);

    my $codeowners_filepath = path('CODEOWNERS');
    $codeowners_filepath->remove;

    my ($stdout, $stderr, $exit) = run { App::Codeowners->main(qw{create}) };
    is($exit, 0, 'exited without error');
    is($stderr, "Wrote CODEOWNERS\n", 'reportedly wrote a CODEOWNERS file');

    ok($codeowners_filepath->is_file, 'did write CODEOWNERS file');

    my $contents = $codeowners_filepath->slurp_utf8;
    like($contents, qr/^# This file shows mappings/, 'correct contents of file') or diag $contents;
};

done_testing;
exit;



( run in 0.532 second using v1.01-cache-2.11-cpan-49f99fa48dc )