diff options
author | Tom Tromey <tromey@gcc.gnu.org> | 1999-04-07 14:42:40 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 1999-04-07 14:42:40 +0000 |
commit | ee9dd3721be68b9fa63dea9aa5a1d86e66958cde (patch) | |
tree | d96801a16fdf03a5682ef98730fe333a46eef944 /libjava/testsuite/libjava.mauve | |
parent | 140fa895c6b859f827fc4437b91775a82cd105fb (diff) | |
download | gcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.zip gcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.tar.gz gcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.tar.bz2 |
Initial revision
From-SVN: r26263
Diffstat (limited to 'libjava/testsuite/libjava.mauve')
-rw-r--r-- | libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java | 31 | ||||
-rw-r--r-- | libjava/testsuite/libjava.mauve/mauve.exp | 355 |
2 files changed, 386 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java b/libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java new file mode 100644 index 0000000..5c1cf5e --- /dev/null +++ b/libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java @@ -0,0 +1,31 @@ +// Copyright (c) 1998, 1999 Cygnus Solutions + +// Written by Tom Tromey <tromey@cygnus.com> + +import gnu.testlet.*; + +public class DejaGNUTestHarness extends SimpleTestHarness +{ + static String dejasrcdir; + + public String getSourceDirectory () + { + return dejasrcdir; + } + + private DejaGNUTestHarness () + { + super (/* verbose */ true, /* debug */ false); + } + + public static void main (String[] args) + { + dejasrcdir = args.length > 0 ? args[0] : ""; + DejaGNUTestHarness harness = new DejaGNUTestHarness (); + // This might seem weird, given that we check args.length above. + // However, in some cases the expect code rewrites this runtest + // invocation to have an explicit name for the test to run. + harness.runtest (args[1]); + System.exit(harness.done()); + } +} diff --git a/libjava/testsuite/libjava.mauve/mauve.exp b/libjava/testsuite/libjava.mauve/mauve.exp new file mode 100644 index 0000000..7d5e71e --- /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 |