From 783b7a595b751a9ce47c7659a264c1ad1baa558c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 11 Jul 2003 22:23:13 +0000 Subject: [PATCH] verify.exp: New file. * libjava.verify/verify.exp: New file. * libjava.verify/README.verify: New file. From-SVN: r69253 --- libjava/testsuite/ChangeLog | 5 ++ .../testsuite/libjava.verify/README.verify | 10 +++ libjava/testsuite/libjava.verify/verify.exp | 81 +++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 libjava/testsuite/libjava.verify/README.verify create mode 100644 libjava/testsuite/libjava.verify/verify.exp diff --git a/libjava/testsuite/ChangeLog b/libjava/testsuite/ChangeLog index 1771b13dda4..def930069b0 100644 --- a/libjava/testsuite/ChangeLog +++ b/libjava/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-07-10 Tom Tromey + + * libjava.verify/verify.exp: New file. + * libjava.verify/README.verify: New file. + 2003-07-09 Jeff Sturm * libjava.lang/SyncTest.java (run): Cache .class value. diff --git a/libjava/testsuite/libjava.verify/README.verify b/libjava/testsuite/libjava.verify/README.verify new file mode 100644 index 00000000000..d28cdf82ca3 --- /dev/null +++ b/libjava/testsuite/libjava.verify/README.verify @@ -0,0 +1,10 @@ +The verifier tests come from Mauve. +See http://sources.redhat.com/mauve + +You want the "verify" module in the Mauve cvs repository. + +In Mauve, only the sources are checked in. However, these need +jasmin to be compiled to bytecode. Since jasmin would require either +another VM or gcj itself to already be working and installed (just to +compile it), we've chose to precompile all the .j files to .class +files and then import the result. diff --git a/libjava/testsuite/libjava.verify/verify.exp b/libjava/testsuite/libjava.verify/verify.exp new file mode 100644 index 00000000000..90747780c59 --- /dev/null +++ b/libjava/testsuite/libjava.verify/verify.exp @@ -0,0 +1,81 @@ +# Tests for class verifier. + +global gcj_verify_xfail +set gcj_verify_xfail("gij verify of call.fail.Static") 1 +set gcj_verify_xfail("gij verify of simple.fail.dupfield") 1 +set gcj_verify_xfail("gij verify of simple.fail.dupinterface") 1 +set gcj_verify_xfail("gij verify of simple.fail.dupmethod") 1 +set gcj_verify_xfail("gij verify of subr.fail.jsr10") 1 +set gcj_verify_xfail("gij verify of subr.fail.jsr8") 1 + + +proc gcj_verify_list_tests {srcdir} { + set result {} + set here [pwd] + cd $srcdir + foreach item [lsort [glob -nocomplain */*/*.class]] { + lappend result [file rootname $item] + } + cd $here + return $result +} + +proc gcj_verify_test_gij {gij srcdir test shouldfail} { + global gcj_verify_xfail + + set testname "gij verify of $test" + verbose "invoking gij $test - shouldfail=$shouldfail" + set result [libjava_load $gij [list --cp $srcdir $test] ""] + set status [lindex $result 0] + set output [lindex $result 1] + + if {$shouldfail} { + # We match the few exceptions that are allowed. This may need + # updating from time to time. We do this rather than check the + # exit status because we want to catch the case where gij dies in + # some inappropriate way. + if {[string match *VerifyError* $output] + || [string match *AbstractMethodError* $output] + || [string match *IncompatibleClassChangeError* $output]} { + set cmd pass + } else { + set cmd fail + } + if {[info exists gcj_verify_xfail($testname)]} { + setup_xfail *-*-* + } + } else { + if {$status == "pass"} { + set cmd pass + } else { + set cmd fail + } + } + $cmd $testname +} + +proc gcj_verify_run {} { + global INTERPRETER srcdir + + set gij [libjava_find_gij] + set interpret 1 + # libjava_find_gij will return `gij' if it couldn't find the + # program; in this case we want to skip the test. + if {$INTERPRETER != "yes" || $gij == "gij"} { + set interpret 0 + } + + set testsdir $srcdir/libjava.verify/verify + foreach test [gcj_verify_list_tests $testsdir] { + set shouldfail [string match */fail/* $test] + + if {$interpret} { + regsub -all -- / $test . gijname + gcj_verify_test_gij $gij $testsdir $gijname $shouldfail + } + + # FIXME: run gcj --syntax-only here. + } +} + +gcj_verify_run -- 2.30.2