X-Git-Url: http://git.ieval.ro/?p=gruntmaster-daemon.git;a=blobdiff_plain;f=t%2F01-jobs.t;h=4b763104d1dce74d4f0de8b0883db157b458e53f;hp=e573a954544023ed9e06cc4f1b58445549370dda;hb=b8f7001a80665c35f33aed657ead2a426d4efac8;hpb=5c5cd38ad5b9e3c2b331564bc0b23e9167b7d07a diff --git a/t/01-jobs.t b/t/01-jobs.t index e573a95..4b76310 100644 --- a/t/01-jobs.t +++ b/t/01-jobs.t @@ -6,10 +6,11 @@ use warnings; use Gruntmaster::Daemon; use Cwd qw/cwd/; -use File::Copy qw/copy/; -use File::Copy::Recursive qw/dircopy/; -use File::Path qw/remove_tree/; +use File::Basename qw/fileparse/; +use File::Slurp qw/read_file/; use File::Temp qw/tempdir/; +use File::Which qw/which/; +use Hash::Merge qw/merge/; use List::Util qw/sum/; use Log::Log4perl; use Test::More; @@ -17,7 +18,19 @@ use YAML::Any qw/LoadFile/; ################################################## -my $loglevel = $ENV{TEST_LOG_LEVEL} // 'OFF'; +use constant COMPILER => { + qw/C gcc + CPP g++ + MONO gmcs + JAVA javac + PASCAL fpc + GOLANG go + GCCGO gccgo + HASKELL ghc + PERL perl + PYTHON python/}; + +my $loglevel = $ENV{TEST_LOG_LEVEL} // ($ENV{TEST_VERBOSE} ? 'TRACE' : 'OFF'); my $log_conf = <init(\$log_conf); +$ENV{PATH} = cwd . ':' . $ENV{PATH}; +umask 0022; + sub check_job{ - my $job = shift; - my $meta = LoadFile "$job/meta.yml"; - if (exists $meta->{results}) { - delete $meta->{results}[$_]{time} for keys $meta->{results}; - } - is $meta->{result}, $meta->{expected_result}, "Result is correct"; - is $meta->{result_text}, $meta->{expected_result_text}, "Result text is correct"; - is_deeply $meta->{results}, $meta->{expected_results}, "Results are correct"; + my $meta = shift; + if (defined $meta->{results}) { + delete $meta->{results}[$_]{time} for keys @{$meta->{results}}; + } + is $meta->{result}, $meta->{expected_result}, "Result is correct"; + is $meta->{result_text}, $meta->{expected_result_text}, "Result text is correct"; + is_deeply $meta->{results}, $meta->{expected_results}, "Results are correct"; } my @problems = exists $ENV{TEST_PROBLEMS} ? map {"t/problems/$_"} split ' ', $ENV{TEST_PROBLEMS} : ; +@problems = grep { $_ !~ /hello/ } @problems unless $ENV{RELEASE_TESTING} || $ENV{TEST_PROBLEMS}; + plan tests => 3 * sum map { my @temp = <$_/tests/*>; scalar @temp } @problems; note "Problems to be tested: " . join ', ', @problems; -my $tempdir = tempdir CLEANUP => 1; -mkdir "$tempdir/jobs"; -dircopy 't/problems' => "$tempdir/pb"; +my $tempdir = tempdir "gruntmaster-daemon-testingXXXX", TMPDIR => 1, CLEANUP => 1; +chmod 0777, $tempdir; + +my $job = 0; for my $problem (@problems) { - my $meta = LoadFile "$problem/meta.yml"; - TODO: { - local $TODO = $meta->{todo} if exists $meta->{todo}; - note "Now testing problem $meta->{name} ($meta->{description})"; - for my $source (<$problem/tests/*>) { - my $meta = LoadFile "$source/meta.yml"; - note "Running $meta->{test_name} ($meta->{test_description})..."; - dircopy $source => "$tempdir/jobs/job"; - my $savedcwd = cwd; - Gruntmaster::Daemon::process "$tempdir/jobs/job"; - check_job "$tempdir/log/1"; - chdir $savedcwd; - remove_tree "$tempdir/log", "$tempdir/jobs", {keep_root => 1}; + my $pbmeta = LoadFile "$problem/meta.yml"; + for (1 .. $pbmeta->{testcnt}) { + $pbmeta->{infile}[$_ - 1] = read_file "$problem/$_.in" if $pbmeta->{generator} eq 'File'; + $pbmeta->{okfile}[$_ - 1] = read_file "$problem/$_.ok" if $pbmeta->{runner} eq 'File'; + } + if (exists $pbmeta->{files}) { + $_->{content} = read_file "$problem/$_->{name}" for values %{$pbmeta->{files}} + } + + TODO: { + local $TODO = $pbmeta->{todo} if exists $pbmeta->{todo}; + note "Now testing problem $pbmeta->{name} ($pbmeta->{description})"; + + for my $source (<$problem/tests/*>) { + SKIP: { + my $meta = LoadFile "$source/meta.yml"; + my $compiler = COMPILER->{$meta->{files}{prog}{format}}; + skip "$compiler not found in path", 3 unless $ENV{GRUNTMASTER_VM} || which $compiler; + local $TODO = $meta->{todo} if exists $meta->{todo}; + $meta->{files}{prog}{content} = read_file "$source/$meta->{files}{prog}{name}"; + $meta = merge $meta, $pbmeta; + note "Running $meta->{test_name} ($meta->{test_description})..."; + my $savedcwd = cwd; + chdir $tempdir; + Gruntmaster::Daemon::process $meta; + chdir $savedcwd; + check_job $meta; + } + } } - } }