#!/usr/bin/perl package Test::TAP::Model::File::Visual; use base qw/Test::TAP::Model::File/; use strict; use warnings; use Test::TAP::Model::Colorful; use Test::TAP::Model::Subtest::Visual; use URI::file; sub subtest_class { "Test::TAP::Model::Subtest::Visual" } sub desc_string { my $self = shift; $self->{_desc_string} = shift if @_; $self->{_desc_string} ||= ""; } sub cases { my $self = shift; return $self->SUPER::cases(@_) unless wantarray; my @ret = $self->SUPER::cases(@_); return @ret if @ret; # if there are no tests, return a stub that represents the whole file return $self->subtest_class->new({ type => "test", ok => $self->ok, skip => $self->skipped, line => "stub" }); } sub str_status { my $self = shift; return "SKIPPED" if $self->skipped; return "BAILED OUT" if $self->bailed_out; return "OK" if $self->ok and $self->actual_cases == $self->planned and $self->actual_cases > 0; return "FAILED"; } sub link { URI::file->new($_[0]->name) } sub case_rows { my $self = shift; my @cases = $self->cases; my @ret; my $rows = int(.9 + @cases / 50) || 1; my $per_row = int(.9 + @cases / $rows); push @ret, { cases => [ splice(@cases, 0, $per_row) ] } while @cases; \@ret; } __PACKAGE__ __END__ =pod =head1 NAME Test::TAP::Model::File::Visual - A test file with additional display oriented methods. =head1 SYNOPSIS See the template. =head1 DESCRIPTION This module is a subclass of L that provides some methods that ease display. It also inherits from L, which provides additional methods. =head1 METHODS =over 4 =item cases An overridden version of L which will return a single stub case if the case list is actually empty. =item str_status A string, "OK" or "FAILED" =item link Just the name of the test. Should be overridden to contain a proper path. =item case_rows The test's test cases, split into rows close to 50 elements in size. The structure returned is: [ { cases => [ case, case, ... ] }, { cases => [ ... ] }, ... ]; =item subtest_class This method overrides L to return L. =item desc_string ?$new_value A short descriptive string used to distinguish this file from others in the various report views. =back =cut