Bio-Roary
view release on metacpan or search on metacpan
t/lib/TestHelper.pm view on Meta::CPAN
package TestHelper;
use Moose::Role;
use Test::Most;
use Data::Dumper;
use File::Slurper qw(read_lines read_text);
use Test::Files;
use Test::Output;
$ENV{PATH} .= ":./bin";
sub compare_files {
my ( $actual_file, $expected_file, $comment ) = @_;
my @actual_lines = sort( read_lines($actual_file) );
my @expected_lines = sort( read_lines($expected_file) );
is_deeply( \@actual_lines, \@expected_lines, $comment );
}
sub compare_groups_files {
my ( $actual_file, $expected_file, $comment ) = @_;
my @actual_lines = sort( read_lines($actual_file) );
my @expected_lines = sort( read_lines($expected_file) );
my @actual_sorted_lines;
for my $line (@actual_lines) {
my @line_details = split( / /, $line );
shift @line_details;
my @sorted = sort(@line_details);
push( @actual_sorted_lines, \@sorted );
}
my @expected_sorted_lines;
for my $line (@expected_lines) {
my @line_details = split( / /, $line );
shift @line_details;
my @sorted = sort(@line_details);
push( @expected_sorted_lines, \@sorted );
}
is_deeply( \@actual_sorted_lines, \@expected_sorted_lines, $comment );
}
sub stdout_should_have
{
my ( $script_name, $parameters, $expected ) = @_;
my @input_args = split( " ", $parameters );
open OLDERR, '>&STDERR';
eval("use $script_name ;");
my $returned_values = 0;
{
local *STDERR;
open STDERR, '>/dev/null' or warn "Can't open /dev/null: $!";
stdout_like { eval("$script_name->new(args => \\\@input_args, script_name => '$script_name')->run;"); } qr/$expected/, "got expected text $expected for $parameters";
close STDERR;
}
open STDERR, '>&OLDERR' or die "Can't restore stderr: $!";
close OLDERR or die "Can't close OLDERR: $!";
}
sub stdout_should_not_have
{
my ( $script_name, $parameters, $expected ) = @_;
my @input_args = split( " ", $parameters );
open OLDERR, '>&STDERR';
eval("use $script_name ;");
my $returned_values = 0;
{
local *STDERR;
open STDERR, '>/dev/null' or warn "Can't open /dev/null: $!";
stdout_unlike { eval("$script_name->new(args => \\\@input_args, script_name => '$script_name')->run;"); } qr/$expected/, "got expected text $expected for $parameters";
close STDERR;
}
open STDERR, '>&OLDERR' or die "Can't restore stderr: $!";
close OLDERR or die "Can't close OLDERR: $!";
}
sub stderr_should_not_have
{
my ( $script_name, $parameters, $expected ) = @_;
my @input_args = split( " ", $parameters );
open OLDOUT, '>&STDOUT';
eval("use $script_name ;");
my $returned_values = 0;
{
local *STDOUT;
open STDOUT, '>/dev/null' or warn "Can't open /dev/null: $!";
stderr_unlike { eval("$script_name->new(args => \\\@input_args, script_name => '$script_name')->run;"); } qr/$expected/, "got expected text $expected for $parameters";
close STDOUT;
}
open STDOUT, '>&OLDOUT' or die "Can't restore stdout: $!";
close OLDOUT or die "Can't close OLDOUT: $!";
}
sub stderr_should_have
{
my ( $script_name, $parameters, $expected ) = @_;
my @input_args = split( " ", $parameters );
open OLDOUT, '>&STDOUT';
eval("use $script_name ;");
my $returned_values = 0;
{
local *STDOUT;
open STDOUT, '>/dev/null' or warn "Can't open /dev/null: $!";
stderr_like { eval("$script_name->new(args => \\\@input_args, script_name => '$script_name')->run;"); } qr/$expected/, "got expected text $expected for $parameters";
close STDOUT;
}
open STDOUT, '>&OLDOUT' or die "Can't restore stdout: $!";
close OLDOUT or die "Can't close OLDOUT: $!";
}
sub mock_execute_script_and_check_output {
my ( $script_name, $scripts_and_expected_files, $columns_to_exclude ) = @_;
system('touch empty_file');
open OLDOUT, '>&STDOUT';
open OLDERR, '>&STDERR';
eval("use $script_name ;");
my $returned_values = 0;
{
local *STDOUT;
open STDOUT, '>/dev/null' or warn "Can't open /dev/null: $!";
local *STDERR;
open STDERR, '>/dev/null' or warn "Can't open /dev/null: $!";
for my $script_parameters ( sort keys %$scripts_and_expected_files ) {
my $full_script = $script_parameters;
my @input_args = split( " ", $full_script );
my $cmd = "$script_name->new(args => \\\@input_args, script_name => '$script_name')->run;";
eval($cmd);
warn $@ if $@;
my $actual_output_file_name = $scripts_and_expected_files->{$script_parameters}->[0];
my $expected_output_file_name = $scripts_and_expected_files->{$script_parameters}->[1];
ok( -e $actual_output_file_name, "Actual output file exists $actual_output_file_name $script_parameters" );
( run in 0.906 second using v1.01-cache-2.11-cpan-98e64b0badf )