Initial revision
From-SVN: r26263
This commit is contained in:
parent
140fa895c6
commit
ee9dd3721b
370 changed files with 173494 additions and 0 deletions
355
libjava/testsuite/libjava.mauve/mauve.exp
Normal file
355
libjava/testsuite/libjava.mauve/mauve.exp
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue