Test::Class::GetoptControl - Command-line control of test class execution


Test-Class-GetoptControl documentation Contained in the Test-Class-GetoptControl distribution.

Index


Code Index:

NAME

Top

Test::Class::GetoptControl - Command-line control of test class execution

VERSION

Top

version 1.100860

SYNOPSIS

Top

    package MyApp;
    use base qw(Test::Class::GetoptControl);

    package main;
    my $app = MyApp->new;
    $app->runtests;

on the command-line:

    $ myapp --include FooTests --shuffle
    # test order: shuffle
    ok 1 - foobar

DESCRIPTION

Top

When inheriting from this class, your application gets the ability to control the execution of test classes using command-line options.

METHODS

Top

runtests

Calls get_classes() to determine which test classes to run and in which order, then runs them.

get_classes

Asks Test::Class for information on all registered test classes, then filters and sorts them by the criteria set in the command-line options.

GETOPT

Defines the specific command-line options for this class; see Getopt::Inherited.

COMMAND-LINE OPTIONS

Top

--include

This option takes a string and can be given several times. It says that only classes whose package name contains the string should be run. -i is an alias for this option. If no include option is given, all test classes are run.

Examples:

    $ myapp --include Foo
    $ myapp -i Foo
    $ myapp --include Foo --include Bar

--shuffle

This options causes the test classes to be run in a random order. A note saying so is printed as well.

--reverse

This options causes the test classes to be run in reverse alphabetical package name order. If neither --reverse nor --shuffle are given, tests are run in alphabetical package name order. If both --reverse and --shuffle are given, --shuffle takes precedence and a note saying so is printed.

In any case, a note specifying the sort order is printed.

INSTALLATION

Top

See perlmodinstall for information and options on installing Perl modules.

BUGS AND LIMITATIONS

Top

No bugs have been reported.

Please report any bugs or feature requests through the web interface at http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Class-GetoptControl.

AVAILABILITY

Top

The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit http://www.perl.com/CPAN/ to find a CPAN site near you, or see http://search.cpan.org/dist/Test-Class-GetoptControl/.

The development version lives at http://github.com/hanekomu/Test-Class-GetoptControl/. Instead of sending patches, please fork this project using the standard git and github infrastructure.

AUTHOR

Top

  Marcel Gruenauer <marcel@cpan.org>

COPYRIGHT AND LICENSE

Top


Test-Class-GetoptControl documentation Contained in the Test-Class-GetoptControl distribution.

use 5.008;
use strict;
use warnings;

package Test::Class::GetoptControl;
our $VERSION = '1.100860';
# ABSTRACT: Command-line control of test class execution
use List::Util 'shuffle';
use Test::More;
use Test::Class;
use parent 'Getopt::Inherited';
use constant GETOPT => qw(
  include|i=s@ shuffle reverse
);

sub runtests {
    my $self    = shift;
    my @classes = $self->get_classes;
    if (@classes) {
        Test::Class->runtests(@classes);
    } else {
        diag 'No class meets the specification';
    }
}

sub get_classes {
    my $self      = shift;
    my $test_info = Test::Class->_test_info;
    my @classes   = keys %$test_info;

    # first, if --include is given, filter out classes that aren't included
    my @include = @{ $self->opt('include') || [] };
    if (@include) {
        my %keep;
        for my $class (@classes) {
            for (@include) {
                $keep{$class}++ if index($class, $_) != -1;
            }
        }
        @classes = keys %keep;
    }

    # now determine test class order
    if ($self->opt('shuffle')) {
        note '--shuffle takes precedence over --reverse'
          if $self->opt('reverse');
        note 'test order: shuffle';
        @classes = shuffle @classes;
    } elsif ($self->opt('reverse')) {
        note 'test order: reverse';
        @classes = reverse sort @classes;
    } else {
        note 'test order: sort';
        @classes = sort @classes;

        # Perl::Critic complains about "return sort ... "
    }
    @classes;
}
1;


__END__