| # 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 {} |
| if {[file exists $srcdir]} { |
| 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 "" if it couldn't find the |
| # program; in this case we want to skip the test. |
| if {$INTERPRETER != "yes" || $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 |