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 )