X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=build%2Ftester;h=6a827b194ffcacbe08829bde52ed189636fb7050;hb=e167c2fc955423dee63194b5e4e51b10dfeb40f3;hp=ea1a6a317e7631bf14b98586e1c55d62ee323a1d;hpb=ba1c173f544383aa6553a75dee6e6858d8f243a4;p=libucw.git diff --git a/build/tester b/build/tester index ea1a6a31..6a827b19 100755 --- a/build/tester +++ b/build/tester @@ -1,6 +1,6 @@ #!/usr/bin/perl # A simple unit testing script -# (c) 2004--2007 Martin Mares +# (c) 2004--2013 Martin Mares # (c) 2007 Pavel Charvat # Tests in the test file have a syntax similar to mail headers, @@ -13,11 +13,20 @@ # replaced by file names of In or Out files (see below). # In: lines to pass to the program as standard input # Out: lines to expect at the program's standard output +# Err: lines to expect at the program's standard error output # In: lines to pass to the program as input file # Out: lines to expect from the program in output file # Both In and Out can be specified simultaneously if we # are testing a program which modifies some of its input files. # Exit: expected exit code of the program (default: 0) +# +# A value of a field can be optionally given as a shell-style here-document: +# +# In <) { ($tt->{$n}) && die "$n already defined"; $tt->{$n} = $v; $append_to = \($tt->{$n}); + } elsif (my ($n,$sep) = /^(\w+)\s*<<(\w+)\s*$/) { + if (!$tt) { + $tt = {}; + push @tests, $tt; + } + ($tt->{$n}) && die "$n already defined"; + $tt->{$n} = ""; + $sep .= "\n"; + while (1) { + my $line = <>; + defined $line or die "Here-document not terminated"; + last if $line eq $sep; + $tt->{$n} .= $line; + } } else { die "Test script syntax error"; } @@ -87,6 +110,13 @@ TEST: foreach $tt (@tests) { } else { $redirs .= " >/dev/null"; } + if (defined $tt->{'Err'}) { + my $efi = "tmp/test$i.err"; + unlink "$rundir/$efi"; + $redirs .= " 2>$efi"; + push @out_files, $efi; + push @out_checks, $tt->{'Err'}; + } foreach my $arg (0..9) { my $f = "tmp/test$i.$arg"; if (defined $tt->{"Out$arg"}) {