Devel-Cover

 view release on metacpan or  search on metacpan

lib/Devel/Cover/Test.pm  view on Meta::CPAN

# Copyright 2002-2026, Paul Johnson (paul@pjcj.net)

# This software is free.  It is licensed under the same terms as Perl itself.

# The latest version of this software should be available from my homepage:
# https://pjcj.net

package Devel::Cover::Test;

use strict;
use warnings;

our $VERSION = '1.52'; # VERSION

use Carp;

use File::Spec;
use Test::More;

use Devel::Cover::Inc;

my $LATEST_RELEASED_PERL = 42;

sub new {
  my $class = shift;
  my $test  = shift;
  croak "No test specified" unless $test;
  my %params = @_;

  my $criteria
    = delete $params{criteria} || "statement branch condition subroutine";

  eval "use Test::Differences";
  my $differences = $INC{"Test/Differences.pm"};

  my $self = bless {
    test             => $test,
    criteria         => [$criteria],
    skip             => "",
    uncoverable_file => [],
    select           => "",
    ignore           => [],
    changes          => [],
    test_parameters  => [],
    debug            => $ENV{DEVEL_COVER_DEBUG} || 0,
    differences      => $differences,
    no_coverage      => $ENV{DEVEL_COVER_NO_COVERAGE} || 0,
    delay_after_run  => 0,
    %params,
  }, $class;

  $self->get_params
}

sub set_test {
  my $self = shift;
  my ($test) = @_;
  $self->{test} = $test;
}

sub shell_quote {
  my ($item) = @_;
  $^O eq "MSWin32" ? (/ / and $_ = qq("$_")) : s/ /\\ /g for $item;
  $item
}

sub get_params {
  my $self = shift;

  my $test = $self->test_file;
  if (open my $fh, "<", $test) {
    while (<$fh>) {
      push @{ $self->{$1} }, $2 if /__COVER__\s+(\w+)\s+(.*)/;
    }
    close $fh or die "Cannot close $test: $!";
  }

  $self->{criteria} = $self->{criteria}[-1];
  $self->{select} ||= "-select /tests/$self->{test}\\b";
  $self->{test_parameters}
    = "$self->{select}"
    . " -ignore blib Devel/Cover @{$self->{ignore}}"
    . " -merge 0 -coverage $self->{criteria} "
    . "@{$self->{test_parameters}}";
  $self->{criteria} =~ s/-\w+//g;
  $self->{db_name} ||= $self->{test};
  $self->{cover_db} = "./t/e2e/cover_db_$self->{db_name}/";
  unless (mkdir $self->{cover_db}) {
    die "Can't mkdir $self->{cover_db}: $!" unless -d $self->{cover_db};
  }
  my $p = $self->{cover_parameters} || [];
  $self->{cover_parameters}
    = join(" ", map "-coverage $_", split " ", $self->{criteria})
    . " @$p -report text "



( run in 0.935 second using v1.01-cache-2.11-cpan-6aa56a78535 )