Skip to content

Commit

Permalink
Move test runner to its own package
Browse files Browse the repository at this point in the history
  • Loading branch information
autarch committed Jan 15, 2015
1 parent 538b088 commit 2bf0a2c
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 78 deletions.
79 changes: 79 additions & 0 deletions t/lib/Test/Runner.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package Test::Runner;

use strict;
use warnings;
use namespace::autoclean;

use Module::Runtime qw( require_module );
use Test::Class::Moose::Config;
use Test::Class::Moose::Runner;

use Moose;
with 'MooseX::Getopt::Dashes';

has classes => (
is => 'ro',
isa => 'ArrayRef[Str]',
lazy => 1,
builder => '_build_classes',
);

has methods => (
is => 'ro',
isa => 'ArrayRef[Str]',
lazy => 1,
default => sub { [] },
);

sub _build_classes {
my $self = shift;

my @classes = @{ $self->extra_argv };

for my $class (@classes) {

# accept file names as well as module names
$class =~ s{t/lib/}{};
$class =~ s{/}{::}g;
$class =~ s{\.pm\z}{};

require_module($class);
}

unless (@classes) {
require Test::Class::Moose::Load;
Test::Class::Moose::Load->import('t/lib');
}

return \@classes;
}

sub run {
my $self = shift;

my $runner = Test::Class::Moose::Runner->new(
test_configuration => Test::Class::Moose::Config->new(
$self->_tcm_config_class_constructor_args()
),
);

$runner->runtests();

return;
}

sub _tcm_config_class_constructor_args {
my $self = shift;

my $include = join '|',
map { $_ =~ /^test_/ ? $_ : 'test_' . $_ } @{ $self->methods() };

return (
test_classes => $self->classes(),
( $include ? ( include => qr/^(?:$include)$/ ) : () ),
);
}

__PACKAGE__->meta()->make_immutable();

1;
80 changes: 2 additions & 78 deletions t/run-tests.t
Original file line number Diff line number Diff line change
@@ -1,84 +1,8 @@
## no critic (Modules::RequireExplicitInclusion:, Modules::ProhibitMultiplePackages)
use strict;
use warnings;

package _CLI;

use lib 't/lib';

use namespace::autoclean;

use Module::Runtime qw( require_module );
use Test::Class::Moose::Runner;

use Moose;
with 'MooseX::Getopt::Dashes';

has classes => (
is => 'ro',
isa => 'ArrayRef[Str]',
lazy => 1,
builder => '_build_classes',
);

has methods => (
is => 'ro',
isa => 'ArrayRef[Str]',
lazy => 1,
default => sub { [] },
);

sub _build_classes {
my $self = shift;

my @classes = @{ $self->extra_argv };

for my $class (@classes) {

# accept file names as well as module names
$class =~ s{t/lib/}{};
$class =~ s{/}{::}g;
$class =~ s{\.pm\z}{};

require_module($class);
}

unless (@classes) {
require Test::Class::Moose::Load;
Test::Class::Moose::Load->import('t/lib');
}

return \@classes;
}

sub run {
my $self = shift;

my $runner = Test::Class::Moose::Runner->new(
test_configuration => Test::Class::Moose::Config->new(
$self->_tcm_config_class_constructor_args()
),
);

$runner->runtests();

return;
}

sub _tcm_config_class_constructor_args {
my $self = shift;

my $include = join '|',
map { $_ =~ /^test_/ ? $_ : 'test_' . $_ } @{ $self->methods() };

return (
test_classes => $self->classes(),
( $include ? ( include => qr/^(?:$include)$/ ) : () ),
);
}

__PACKAGE__->meta()->make_immutable();

package main;
use Test::Runner;

_CLI->new_with_options()->run();
Test::Runner->new_with_options()->run();

0 comments on commit 2bf0a2c

Please sign in to comment.