2003-07-12 00:23:13 +02:00
|
|
|
# Tests for class verifier.
|
|
|
|
|
|
|
|
global gcj_verify_xfail
|
2003-07-14 01:33:02 +02:00
|
|
|
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
|
2003-07-12 00:23:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
proc gcj_verify_list_tests {srcdir} {
|
|
|
|
set result {}
|
2003-07-19 17:43:20 +02:00
|
|
|
if {[file exists $srcdir]} {
|
|
|
|
set here [pwd]
|
|
|
|
cd $srcdir
|
|
|
|
foreach item [lsort [glob -nocomplain */*/*.class]] {
|
|
|
|
lappend result [file rootname $item]
|
|
|
|
}
|
|
|
|
cd $here
|
2003-07-12 00:23:13 +02:00
|
|
|
}
|
|
|
|
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
|