The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use Test::More;
use Devel::Cover::Report::Clover::Builder;

use FindBin;
use lib ($FindBin::Bin);
use testcover;

my $DB = testcover::run('multi_file');

my $b     = BUILDER( { name => 'test', db => $DB, include_condition_criteria => 0 } );
my $p     = $b->project;
my @files = @{ $p->files };

my @test = (
    sub {
        my $t = "files - 3 of them";
        is( scalar @files, 3, $t );
    },
    sub {
        my $t = "loc";
        is( $p->loc(), 17, $t );
    },
    sub {
        my $t = "ncloc";
        is( $p->ncloc(), 34, $t );
    },
    sub {
        my $t      = "metrics - criteria(branch)";
        my $s      = $p->metrics;
        my $expect = {
            'classes'             => 4,
            'complexity'          => 0,
            'conditionals'        => 2,
            'coveredconditionals' => 0,
            'coveredelements'     => 25,
            'coveredmethods'      => 7,
            'coveredstatements'   => 18,
            'elements'            => 33,
            'files'               => 3,
            'loc'                 => 17,
            'methods'             => 8,
            'ncloc'               => 34,
            'packages'            => 2,
            'statements'          => 23
        };

        is_deeply( $s, $expect, $t );
    },
    sub {
        my $t = "metrics - criteria(branch+conditional)";

        my $b      = BUILDER( { name => 'test', db => $DB, include_condition_criteria => 1 } );
        my $p      = $b->project;
        my $s      = $p->metrics;
        my $expect = {
            'classes'             => 4,
            'complexity'          => 0,
            'conditionals'        => 4,
            'coveredconditionals' => 0,
            'coveredelements'     => 25,
            'coveredmethods'      => 7,
            'coveredstatements'   => 18,
            'elements'            => 35,
            'files'               => 3,
            'loc'                 => 17,
            'methods'             => 8,
            'ncloc'               => 34,
            'packages'            => 2,
            'statements'          => 23
        };

        is_deeply( $s, $expect, $t );
    },
);

plan tests => scalar @test;

$_->() foreach @test;

sub BUILDER {
    return Devel::Cover::Report::Clover::Builder->new(shift);
}