diff options
Diffstat (limited to '3rd-party/xfpt/testing/runtest')
-rwxr-xr-x | 3rd-party/xfpt/testing/runtest | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/3rd-party/xfpt/testing/runtest b/3rd-party/xfpt/testing/runtest new file mode 100755 index 000000000..a125ce798 --- /dev/null +++ b/3rd-party/xfpt/testing/runtest @@ -0,0 +1,165 @@ +#!/usr/bin/perl -w + +# Controlling script for xfpt tests + +$xfpt = "../src/xfpt -S ../share"; +$cf = (-f "/usr/local/bin/cf")? "cf" : "diff"; + +$force_update = 0; +$starttest = undef; +$endtest = undef; +$started = 0; + +$cmd_options = ""; +while (defined $ARGV[0] && $ARGV[0] =~ /^-/) + { + my($arg) = shift @ARGV; + $cmd_options .= "$arg "; + } + +if (defined $ARGV[0]) + { + $starttest = $endtest = $ARGV[0]; + $endtest = $ARGV[1] if defined $ARGV[1]; + $endtest = undef if $endtest eq "+"; + } + +opendir(DIR, "./infiles") || die "Failed to opendir ./infiles: $!\n"; +@files = sort(readdir(DIR)); +closedir(DIR); + +while (scalar @files > 0) + { + my($copy) = 0; + my($file) = shift @files; + my($options) = $cmd_options; + + # Skip . and .. and also skip any file ending in .opt because that + # contains options for any given test, and any file ending in .inc + # because that is an included file. + + next if $file =~ /^\.\.?$|\.opt$|\.inc$/; + + next if !$started && defined $starttest && $file !~ /^$starttest/; + $started = 1; + + $options .= `cat infiles/$file.opt` if -e "infiles/$file.opt"; + chomp $options; + + my ($rc) = system("$xfpt $options -o test.xml infiles/$file " . + "2> test.err"); + +# if (($rc >> 8) != 0) +# { +# printf("Test $file RC = 0x%x\n", $rc); +# system("more test.err"); +# exit 1; +# } + + # Compare stderr output + + if (! -z "test.err") + { + if (! -e "outfiles/$file.err") + { + printf("There is stderr output, but outfiles/$file.err does not exist.\n"); + system("more test.err"); + exit 1; + } + + $rc = system("$cf test.err outfiles/$file.err >test.cf"); + + if ($rc != 0) + { + # printf("text cf RC=$rc\n"); + system("more test.cf"); + + for (;;) + { + print "Continue, Update & retry, Quit? [Q] "; + + if ($force_update) + { + $_ = "u"; + print "... update forced\n"; + } + else + { + open(T, "/dev/tty") || die "Failed to open /dev/tty: $!\n"; + $_ = <T>; + close(T); + } + + exit 1 if /^q?$/i; + goto CHECK_MAIN if /^c$/i; + + if (/^u$/) + { + exit 1 if system("cp test.err outfiles/$file.err") != 0; + unshift @files, $file; + print (("#" x 79) . "\n"); + last; + } + } + + redo; # Repeats the test + } + } + + # Compare the main output + + CHECK_MAIN: + + $rc = system("$cf test.xml outfiles/$file >test.cf"); + if ($rc != 0) + { + # printf("cf RC=$rc\n"); + system("more test.cf"); + + for (;;) + { + print "View, Continue, Update & retry, Quit? [Q] "; + + if ($force_update) + { + $_ = "u"; + print "... update forced\n"; + } + else + { + open(T, "/dev/tty") || die "Failed to open /dev/tty: $!\n"; + $_ = <T>; + close(T); + } + + exit 1 if /^\s*q?$/i; + last if /^\s*c$/i; + + if (/^\s*v$/) + { + system ("less -XF test.xml"); + # Stay in loop to reprompt + } + + elsif (/^\s*u$/) + { + exit 1 if system("cp test.xml outfiles/$file") != 0; + unshift @files, $file; + print (("#" x 79) . "\n"); + last; + } + } + } + else + { + printf ("Test $file OK\n"); +# system("gzip outfiles/$file"); + last if defined $endtest && $file =~ /^$endtest/; + } + } + +die "No selected test found\n" if !$started; + +system("/bin/rm -rf test.* test-*"); + +# End |