App-Prove-Plugin-TraceUse

 view release on metacpan or  search on metacpan

lib/App/Prove/Plugin/TraceUse.pm  view on Meta::CPAN

                my $v = $dep_hash->{$mod};

                if ( not $v ) {
                    print "# ";
                    print colored ['bold red'], sprintf "%-${n}s => '%s',\n", "'".$_->[0]."'", $_->[1];
                    $hash_fails = 1;
                }
                elsif ( $v and qv($v) < qv($ver) ) {
                    print "# ";
                    print colored ['bold yellow'], sprintf "%-${n}s => '%s',\n", "'".$_->[0]."'", $_->[1];
                    $hash_fails = 1;
                }

            }

            if ( not $hash_fails ) {
                print "# - dependencies are ok\n";
            }

            return not $hash_fails;

        };

        my $dependencies_are_good = 1;

        if ( $makefile_requirements ) {

            print "# Makefile.PL:\n";
            my $ok = $present_file_dep->($makefile_requirements);
            $dependencies_are_good &&= $ok;

        }

        if ( $build_requirements ) {

            print "# Build.PL:\n";
            my $ok = $present_file_dep->($build_requirements);
            $dependencies_are_good &&= $ok;

        }

        if ( not $dependencies_are_good and 0 ) {
            print "# List of dependencies found during testing:\n";
            for ( @d ) {
                printf "# %-${n}s => '%s',\n", "'".$_->[0]."'", $_->[1];
            }
        }

    }

    sub new {

        my $self = shift;

        my $tf = File::Temp->new;
        my $fn = "$tf";

        ## add the traceuse option
        $_[0]->{switches} = ["-d:TraceUse=hidecore,output:$fn"];

        my $obj = $self->SUPER::new(@_);

        $obj->{collected_dependencies} = [];

        my $trace_use_sub = sub {

            my $dt = read_file( $fn );
            my $p = App::Prove::Plugin::TraceUse::_parse_traceuse($dt);
            my $deps = App::Prove::Plugin::TraceUse::_find_dependent_modules($p);
            push @{ $obj->{collected_dependencies} }, @$deps;

        };

        $obj->callback( "after_test", $trace_use_sub );

        my $collected_dependencies = sub {
            $obj->_uniquify_dependencies;
            $obj->present_dependencies;
        };

        $obj->callback( "after_runtests", $collected_dependencies );

        return $obj;

    }

}


sub load {

    my( $class, $p ) = @_;

    my $app = $p->{app_prove};

    if ( defined($app->harness) and $app->harness ne "TAP::Harness" ) {
        croak "TraceUse plugin is only compatible wtih TAP::Harness";
    }

    $app->{harness_class} = "TAP::Harness::FOO";

    1;

}

1;                        # Magic true value required at end of module
__END__

=encoding utf8

=head1 NAME

App::Prove::Plugin::TraceUse - Report all modules used during testing
and check if they are listed as dependencies in Makefile.PL and
Build.PL


=head1 VERSION

This document describes App::Prove::Plugin::TraceUse version 1.0.3



( run in 0.699 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )