#!/usr/bin/perl use strict; use warnings; BEGIN { use Test::More; eval "use Module::CPANTS::Analyse"; my $at = $@; plan $at ? ( 'skip_all', 'You need Module::CPANTS::Analyse to check Kwalitee' ) : 'no_plan'; } use Test::Output; use Cwd; my $class = 'Module::Release'; my $file = ".releaserc"; use_ok( $class ); can_ok( $class, 'new' ); BEGIN { use File::Spec; my $file = File::Spec->catfile( qw(t lib setup_common.pl) ); require $file; } my @subs = qw( check_kwalitee cpants_lint cpants_pass_regex ); my $test_tar = 'foo.tar.gz'; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Create test object my $release = $class->new; isa_ok( $release, $class ); # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Create test object ok( ! $release->can( 'check_kwalitee' ), 'check_kwalitee not loaded yet' ); ok( $release->load_mixin( 'Module::Release::Kwalitee' ), "Loaded Kwalitee mixin" ); can_ok( $release, @subs ); # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ok( defined $release->cpants_lint, "cpants_lint returns a defined value" ); isa_ok( $release->cpants_pass_regex, ref qr//, "cpants_pass_regex returns a regex" ); # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Replace run() with a mock. We don't want to actually do anything. # Just return whatever is in $output our $run_output = ''; { no warnings; no strict; *{"${class}::run"} = sub { $run_output }; } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Check without distro file { $release->turn_quiet_on; my $rc = eval { $release->check_kwalitee; 1 }; my $at = $@; ok( defined $at, "check_kwalitee dies with no distro file" ); } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Check with the distro file that passes { local $run_output = "a 'perfect' distribution!"; open my( $fh ), ">", $test_tar; close $fh; ok( -e $test_tar, "Created test distribution" ); $release->local_file( $test_tar ); is( $release->local_file, $test_tar, "local_file has the right value" ); $release->turn_quiet_off; stdout_like { $release->check_kwalitee } qr/done/i, "Good kwalitee reports 'Done'"; } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Check with the distro file that passes { $release->turn_quiet_on; local $run_output = "You suck!"; ok( -e $test_tar, "Test distribution exists" ); my $rc = eval { $release->check_kwalitee; 1 }; my $at = $@; ok( defined $at, "check_kwalitee dies when kwalitee doesn't pass" ); like( $at, qr/suck/, "CPANTS reports that I suck" ); }