#!/usr/bin/perl -w # $Id: runtests,v 1.9 2007-06-21 10:10:32 mike Exp $ use IO::File; use strict; $ENV{CLASSPATH} .= ":../../lib/cql-java.jar"; if (@ARGV != 2) { print STDERR "Usage: $0 \n"; exit(1); } my $compiler = $ARGV[0]; my $norman = $ARGV[1]; # name of XML normaliser program my($ntests, $ncorrect) = (0, 0); while () { my $sdir = $_; s@sections/@@; next if /^CVS$/ || /^10$/; print "testing section $_ - ", read_file("$sdir/name"), "\n"; while (<$sdir/*.cql>) { my $qfile = $_; s@sections/([0-9]+/.*)\.cql@$1@; my $query = read_file($qfile); my $afile = $qfile; $afile =~ s/\.cql$/.xcql/; print " query $_ - $query "; my $correct = read_file("$norman < $afile |"); my $tested = read_file("$compiler < $qfile | $norman |") or print "\n *** test compiler exited non-zero\n"; $ntests++; if ($tested eq $correct) { print "OK\n"; $ncorrect++; } else { print "\n *** different XCQL output\n"; print "=== correct ===\n$correct"; print "=== tested ===\n$tested"; print "=== end ===\n"; } } } print sprintf("%d of %d passed: %d%%\n", $ncorrect, $ntests, (100 * $ncorrect) / $ntests); sub read_file { my($name) = @_; $name = "<$name" if $name !~ /\|$/; my $fh = new IO::File("$name") or die "can't read '$name': $!"; my $contents = join('', <$fh>); $fh->close(); return $contents; }