diff options
Diffstat (limited to 'libjava/testsuite/libjava.mauve/mauve.exp')
-rw-r--r-- | libjava/testsuite/libjava.mauve/mauve.exp | 355 |
1 files changed, 355 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.mauve/mauve.exp b/libjava/testsuite/libjava.mauve/mauve.exp new file mode 100644 index 00000000000..7d5e71e7965 --- /dev/null +++ b/libjava/testsuite/libjava.mauve/mauve.exp @@ -0,0 +1,355 @@ +# Copyright (C) 1998, 1999 Cygnus Solutions. +# Written by Tom Tromey <tromey@cygnus.com>. +# Incorporate Mauve into libjava's DejaGNU test suite framework. + +# FIXME: should be able to compile from source as well as from .class. + + +# Compute list of files to compile. Returns list of all files +# representing classes that must be tested. Result parameter `uses' +# maps source file names onto list of objects required for link. +proc mauve_compute_uses {aName} { + upvar $aName uses + global env + + set fd [open classes r] + set line [read $fd] + close $fd + + foreach item [split $line] { + if {$item == ""} then { + continue + } + set item [join [split $item .] /].java + + # Look for Uses line in source file. + set fd [open $env(MAUVEDIR)/$item r] + set ufiles [list $item] + set dir [file dirname $item] + while {[gets $fd sline] != -1} { + if {[regsub -- {^// Uses:} $sline {} sline]} then { + foreach uf [split $sline] { + if {$uf != ""} then { + lappend ufiles $dir/$uf + } + } + } + } + close $fd + + set uses($item) {} + foreach file $ufiles { + set file [file rootname $file].o + lappend uses($item) $file + } + } + + return [lsort [array names uses]] +} + +# Run all the Mauve tests. +proc test_mauve {} { + global srcdir subdir env + + if {! [info exists env(MAUVEDIR)]} then { + verbose "MAUVEDIR not set; not running Mauve tests" + return + } + + # Run in subdir so we don't overwrite our own Makefile. + catch {system "rm -rf mauve-build"} + file mkdir mauve-build + # Some weirdness to set srcdir correctly. + set here [pwd] + cd $srcdir + set full_srcdir [pwd] + cd $here/mauve-build + + if {[catch {system "$env(MAUVEDIR)/configure --with-gcj"} msg]} then { + fail "Mauve configure" + verbose "configure failed with $msg" + return + } + pass "Mauve configure" + + # Copy appropriate tags file locally. + set fd [open $full_srcdir/../mauve-libgcj r] + set c [read $fd] + close $fd + set fd [open mauve-libgcj w] + puts -nonewline $fd $c + close $fd + + if {[catch {system "make KEYS=libjava classes.stamp"} msg]} then { + fail "Mauve build" + verbose "build failed with $msg" + return + } + pass "Mauve build" + + set srcfile $full_srcdir/$subdir/DejaGNUTestHarness.java + if {! [bytecompile_file $srcfile [pwd] $env(MAUVEDIR):[pwd]]} then { + fail "Compile DejaGNUTestHarness.java" + return + } + pass "Compile DejaGNUTestHarness.java" + + # Compute list of files to test, and also all files to build. + set choices [mauve_compute_uses uses] + + # Compute flags to use to do the build. + set compile_args [libjava_arguments] + set link_args [concat $compile_args \ + [list "additional_flags=--main=DejaGNUTestHarness"]] + + set ok 1 + set objlist {} + foreach base {DejaGNUTestHarness gnu/testlet/SimpleTestHarness gnu/testlet/TestHarness gnu/testlet/Testlet gnu/testlet/ResourceNotFoundException gnu/testlet/config} { + set file $base.class + set obj $base.o + if {[target_compile [pwd]/$file $obj object $compile_args] != ""} then { + fail "Compile $obj" + set ok 0 + } else { + pass "Compile $obj" + } + lappend objlist $obj + } + if {! $ok} then { + return + } + + set Executable DejaGNUTestHarness + foreach file $choices { + # Turn `java/lang/Foo.java' into `java.lang.Foo'. + set class [file rootname $file] + regsub -all -- / $class . class + + set ok 1 + foreach obj $uses($file) { + if {! [file exists $obj]} then { + verbose "compiling $obj for test of $class" + set srcfile [file rootname $obj].class + if {[target_compile [pwd]/$srcfile $obj object $compile_args] + != ""} then { + fail "Compile $obj for $class" + set ok 0 + break + } + pass "Compile $obj for $class" + } + } + if {! $ok} then { + continue + } + + if {[target_compile [concat $uses($file) $objlist] \ + $Executable executable $link_args] != ""} then { + fail "Link for $class" + continue + } + pass "Link for $class" + + set result [libjava_load [pwd]/DejaGNUTestHarness \ + "$env(MAUVEDIR) $class" ""] + if {[lindex $result 0] != "pass"} then { + fail "Execute for $class" + continue + } + + # Test for an exception thrown in the test harness itself. This + # isn't enough to test for all faults in the test harness, but + # it's better than nothing. + set output [lindex $result 1]; + if [regexp "Exception: " $output] then { + fail $output + continue + } + + pass "Execute for $class" + + # Extract pass/failure info from output. + foreach line [split [lindex $result 1] \n] { + if {[regexp -- {^(PASS|FAIL): (.*)$} $line ignore what msg]} then { + if {$what == "PASS"} then { + pass $msg + } else { + fail $msg + } + } + } + } +} + +# Run all the Mauve tests in a sim environment. In this case, the +# program cannot use argv[] because there's no way to pass in the +# command line, so tha name of the class to test is substituted by +# patching the source of the DejaGNUTestHarness. +proc test_mauve_sim {} { + global srcdir subdir env + + if {! [info exists env(MAUVEDIR)]} then { + verbose "MAUVEDIR not set; not running Mauve tests" + return + } + + # Run in subdir so we don't overwrite our own Makefile. + catch {system "rm -rf mauve-build"} + file mkdir mauve-build + # Some weirdness to set srcdir correctly. + set here [pwd] + cd $srcdir + set full_srcdir [pwd] + cd $here/mauve-build + + if {[catch {system "$env(MAUVEDIR)/configure --with-gcj"} msg]} then { + fail "Mauve configure" + verbose "configure failed with $msg" + return + } + pass "Mauve configure" + + # Copy appropriate tags file locally. + set fd [open $full_srcdir/../mauve-libgcj r] + set c [read $fd] + close $fd + set fd [open mauve-libgcj w] + puts -nonewline $fd $c + close $fd + + if {[catch {system "make KEYS=libjava classes.stamp"} msg]} then { + fail "Mauve build" + verbose "build failed with $msg" + return + } + pass "Mauve build" + + # Compute list of files to test, and also all files to build. + set choices [mauve_compute_uses uses] + + # Compute flags to use to do the build. + set compile_args [libjava_arguments] + set link_args [concat $compile_args \ + [list "additional_flags=--main=DejaGNUTestHarness"]] + + set ok 1 + set objlist {} + foreach base {gnu/testlet/SimpleTestHarness gnu/testlet/TestHarness \ + gnu/testlet/Testlet gnu/testlet/ResourceNotFoundException \ + gnu/testlet/config} { + set file $base.class + set obj $base.o + if {[target_compile [pwd]/$file $obj object $compile_args] != ""} then { + fail "Compile $obj" + set ok 0 + } else { + pass "Compile $obj" + } + lappend objlist $obj + } + if {! $ok} then { + return + } + + lappend objlist gnu/testlet/DejaGNUTestHarness.o + + set Executable DejaGNUTestHarness + foreach file $choices { + # Turn `java/lang/Foo.java' into `java.lang.Foo'. + + set class [file rootname $file] + regsub -all -- / $class . class + + set ok 1 + foreach obj $uses($file) { + if {! [file exists $obj]} then { + verbose "compiling $obj for test of $class" + set srcfile [file rootname $obj].class + if {[target_compile [pwd]/$srcfile $obj object $compile_args] + != ""} then { + fail "Compile $obj for $class" + set ok 0 + break + } + pass "Compile $obj for $class" + } + } + if {! $ok} then { + continue + } + + set infile $full_srcdir/$subdir/DejaGNUTestHarness.java + set srcfile DejaGNUTestHarness.java + set f [open $infile r] + set d [open gnu/testlet/$srcfile w] + while {[gets $f line] >= 0} { + if [regexp {harness\.runtest \(args\[1\]\)} $line] then { + regsub {args\[1\]} $line "\"$class\"" out + } else { + set out $line + } + puts $d $out + } + close $f + close $d + + if {! [bytecompile_file [pwd]/gnu/testlet/$srcfile [pwd]/gnu/testlet \ + $env(MAUVEDIR):[pwd]]} then { + fail "Compile DejaGNUTestHarness.java" + return + } + + if {[target_compile gnu/testlet/DejaGNUTestHarness.class \ + gnu/testlet/DejaGNUTestHarness.o object $compile_args] + != ""} then { + fail "Compile DejaGNUTestHarness.java" + continue + } + + if {[target_compile [concat $uses($file) $objlist] \ + $Executable executable $link_args] != ""} then { + fail "Link for $class" + continue + } + pass "Link for $class" + + set result [libjava_load [pwd]/DejaGNUTestHarness \ + "$env(MAUVEDIR) $class" ""] + if {[lindex $result 0] != "pass"} then { + fail "Execute for $class" + continue + } + + # Test for an exception thrown in the test harness itself. This + # isn't enough to test for all faults in the test harness, but + # it's better than nothing. + set output [lindex $result 1]; + if [regexp "Exception: " $output] then { + fail $output + continue + } + + pass "Execute for $class" + + # Extract pass/failure info from output. + foreach line [split [lindex $result 1] \n] { + if {[regexp -- {^(PASS|FAIL): (.*)$} $line ignore what msg]} then { + if {$what == "PASS"} then { + pass $msg + } else { + fail $msg + } + } + } + } +} + +# The test_mauve* procs will change the current directory. It's +# simpler to fix this up here than to keep track of this in the procs. +set here [pwd] +if { [board_info target exists is_simulator] } { + test_mauve_sim +} else { + test_mauve +} +cd $here |