#!perl -T
use strict;
use warnings;
BEGIN {
use lib 't';
use MyTestHelper;
use Test::More;
# check some external dependencies (programs and non
# CPAN modules
my ($skip,$msg) = MyTestHelper::skip_all();
plan skip_all => $msg if $skip;
}
our %features = ( A => 72,
B => 148,
C => 43,
D => 34, );
my $number_tests;
foreach ( keys %features ) {
$number_tests += $features{$_};
}
plan tests => $number_tests;
use English qw( -no_match_vars );
use Scalar::Util qw/refadr/;
use Data::Dumper;
use MyModule;
my $obj = MyModule->new();
FEATURE:
foreach my $feature ( sort keys %features ) {
SKIP: {
if ( $obj->does_not_like($feature)
{
skip "Feature not available", $features{$feature};
}
# FINALLY, the tests
...
}
}
####
package MyTestFramework;
use base 'Test::SimpleFramework';
sub init {
my ( $self ) = @_;
$self->set_strict(1);
$self->set_warnings(1);
$self->export({
'Scalar::Util' => 'refaddr',
'English' => '-no_match_vars',
'Data::Dumper' => undef,
'MyModule' => undef,
});
$self->dependencies({
'lftp binary in path' => $self->in_path('lftp'),
'non-CPAN module' => $self->in_inc('Non::Cpan'),
});
}
our @EXPORT = qw( delete_temporary_files );
sub delete_temporary_files {
foreach my $file ( ) {
my ( $filename ) = $file =~ m{\A t/tmp/ ([\d\w\.\-]+) \z}xms;
unlink "t/tmp/$filename";
}
}
##
##
#perl -T
BEGIN{
use lib 't';
};
use MyTestFramework;
# skips all tests if one dependency was't found
check_dependencies();
register_features({
A => 72,
B => 148,
C => 43,
D => 34,
});
my $obj = MyModule->new();
while (my $feature = next_feature) {
skip_feature if $obj->does_not_like($feature->name);
# the tests
...
# dies if number of tests for feature is not correct
}
delete_temporary_files();