diff --git a/lib/LPSC/Builder/TestRunner.pm b/lib/LPSC/Builder/TestRunner.pm index 2223c8b..9bc1b31 100644 --- a/lib/LPSC/Builder/TestRunner.pm +++ b/lib/LPSC/Builder/TestRunner.pm @@ -1,4 +1,4 @@ -package Owl::TestRunner v0.0.1; +package LPSC::Builder::TestRunner; use v5.30.0; @@ -16,8 +16,6 @@ use Capture::Tiny qw/tee_merged/; use Term::ANSIColor qw/color/; my $db_file = path($0)->parent->child('test.db'); -my %test_files_success_status; -tie %test_files_success_status, 'DB_File', $db_file; my @errors; @@ -33,8 +31,8 @@ my $ERROR_CODE_SOME_TEST_FAILED = 500; ); sub new { - my $class = shift; - my $self = bless {}, $class; + my $class = shift; + my $self = bless {}, $class; my %params = $validator->(@_); @@ -45,85 +43,88 @@ my $ERROR_CODE_SOME_TEST_FAILED = 500; return $self; } } - sub _options { my $self = shift; if ( !defined $self->{options} ) { $self->{options} = {}; - $self->_getopt; + $self->_getopt; } return $self->{options}; } sub _getopt { my $self = shift; - my ($opt, $usage) = describe_options( - './test_runner.pl %o', - [ 'clean|c', "Cleans the previously succeded tests", ], - [ 'halt|h', "Halts on error", ], - [], - [ 'help', "print usage message and exit", { shortcircuit => 1 } ], - ); - - print($usage->text), die if $opt->help; - my $options = $self->_options; - $options->{halt} = $opt->halt; - $options->{clean} = $opt->clean; + my ( $opt, $usage ) = describe_options( + './test_runner.pl %o', + [ 'clean|c', "Cleans the previously succeded tests", ], + [ 'halt|h', "Halts on error", ], + [], + [ 'help', "print usage message and exit", { shortcircuit => 1 } ], + ); + + print( $usage->text ), die if $opt->help; + my $options = $self->_options; + $options->{halt} = $opt->halt; + $options->{clean} = $opt->clean; } sub run { - my $self = shift; - if ($self->_options->{clean}) { - %test_files_success_status = (); - } - for my $test_file (@{$self->{test_files}}) { - if ($self->_test_already_succeded($test_file)) { - say omited() . "$test_file last test was successful."; - next; - } - my $return_code; - my ($merged) = tee_merged { - $return_code = system $test_file; - }; - $test_files_success_status{$test_file} = !$return_code; - if ($return_code) { - push @errors, error() . "File $test_file\n" . $merged; - if ($self->_options->{halt}) { - $self->show_errors; - } - } - } - $self->show_errors; + my $self = shift; + if ( $self->_options->{clean} ) { + %test_files_success_status = (); + } + for my $test_file ( @{ $self->{test_files} } ) { + if ( $self->_test_already_succeded($test_file) ) { + say omited() . "$test_file last test was successful."; + next; + } + my $return_code; + my ($merged) = tee_merged { + $return_code = system $test_file; + }; + my %test_files_success_status; + tie %test_files_success_status, 'DB_File', $db_file; + $test_files_success_status{$test_file} = !$return_code; + if ($return_code) { + push @errors, error() . "File $test_file\n" . $merged; + if ( $self->_options->{halt} ) { + $self->show_errors; + } + } + } + $self->show_errors; } sub show_errors { - for my $error (@errors) { - say $error; - } - if (@errors) { - exit $ERROR_CODE_SOME_TEST_FAILED; - } - exit 0; + for my $error (@errors) { + say $error; + } + if (@errors) { + exit $ERROR_CODE_SOME_TEST_FAILED; + } + exit 0; } sub omited { - return color('blue').'[[OMITED]] '.reset_color(); + return color('blue') . '[[OMITED]] ' . reset_color(); } sub error { - return color('red').'[[ERROR]] '.reset_color(); + return color('red') . '[[ERROR]] ' . reset_color(); } sub reset_color { - return color('reset'); + return color('reset'); } sub _test_already_succeded { - my $self = shift; + my $self = shift; - my $test = shift; - - return $test_files_success_status{$test}; + my $test = shift; + my %test_files_success_status; + tie %test_files_success_status, 'DB_File', $db_file; + + return $test_files_success_status{$test}; } 1;