summaryrefslogtreecommitdiff
path: root/libjava/testsuite/libjava.mauve/mauve.exp
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/testsuite/libjava.mauve/mauve.exp')
-rw-r--r--libjava/testsuite/libjava.mauve/mauve.exp355
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