This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch: PR 2874


I'm checking this in on the trunk.
It changes the test suite to clean up after itself.
It deletes files when a test succeeds.
This fixes PR 2874.

2001-06-08  Tom Tromey  <tromey@redhat.com>

	Fix for PR libgcj/2874:
	* libjava.mauve/mauve.exp (gcj_run_mauve_tests): New proc.
	(test_mauve): Return 0 on failure.
	* lib/libjava.exp (test_libjava_from_source): Remove generated
	files if test is successful.
	(test_libjava_from_javac): Likewise.
	(gcj_cleanup): New proc.

Tom

Index: lib/libjava.exp
===================================================================
RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v
retrieving revision 1.28
diff -u -r1.28 libjava.exp
--- libjava.exp	2001/06/06 02:53:52	1.28
+++ libjava.exp	2001/06/08 22:11:04
@@ -188,6 +188,21 @@
     return ""
 }
 
+# Remove a bunch of files.
+proc gcj_cleanup {args} {
+    foreach file $args {
+	if {[string match *.o $file]} {
+	    verbose "removing [file rootname $file].lo"
+	    file delete -force [file rootname $file].lo
+	}
+	file delete -force -- $file
+	verbose "removing $file"
+    }
+    # It is simplest to do this instead of trying to figure out what
+    # bits in .libs ought to be removed.
+    catch {system "rm -rf .libs"}
+}
+
 # Compute arguments needed for compiler.  MODE is a libtool mode:
 # either compile or link.
 proc libjava_arguments {{mode compile}} {
@@ -383,6 +398,8 @@
 	set errname "$errname $compile_args"
     }
 
+    set removeList [list $executable]
+
     set x [prune_warnings \
 	     [libjava_tcompile $srcfile "$executable" $target $args]]
     if {[info exists opts(xfail-gcj)]} {
@@ -393,6 +410,7 @@
 
 	if {[info exists opts(shouldfail)]} {
 	    pass "$errname compilation from source"
+	    eval gcj_cleanup $removeList
 	    return
 	}
 
@@ -419,9 +437,11 @@
 	    untested "$errname execution from source compiled test"
 	    untested "$errname output from source compiled test"
 	}
+	eval gcj_cleanup $removeList
 	return
     }
     if {[info exists opts(no-link)]} {
+	eval gcj_cleanup $removeList
 	return
     }
 
@@ -467,6 +487,7 @@
     }
     if { $passed == 1 } {
 	pass "$errname output from source compiled test"
+	eval gcj_cleanup $removeList
     } else {
 	clone_output "expected was $expected"
 	clone_output "output was $output"
@@ -542,6 +563,8 @@
     }
     pass "$errname byte compilation"
 
+    set removeList {}
+
     # Find name to use for --main, and name of all class files.
     set jvscan [find_jvscan]
     verbose "jvscan is $jvscan"
@@ -573,6 +596,8 @@
 	lappend class_files $objdir/$file.class
     }
 
+    eval lappend removeList $class_files
+
     # Usually it is an error for a test program not to have a `main'
     # method.  However, for no-exec tests it is ok.  Treat no-link
     # like no-exec here.
@@ -615,18 +640,20 @@
 	    set executable [file rootname [file tail $c_file]].o
 	    set x [prune_warnings \
 		     [libjava_tcompile $c_file "$executable" $type $args]]
+	    lappend removeList $executable
 	    if {$x != ""} {
 		break
 	    }
 	}
     } else {
-	# This is no evil: we de-listify CLASS_FILES so that we can
+	# This is so evil: we de-listify CLASS_FILES so that we can
 	# turn around and quote the `$' in it for the shell.  I really
 	# hate DejaGNU.  It is so !@#$!@# unpredictable.
 	set hack ""
 	foreach stupid $class_files {
 	    set hack "$hack $stupid"
 	}
+	lappend removeList $executable
 	set x [prune_warnings \
 		 [libjava_tcompile $hack "$executable" $type $args]]
     }
@@ -650,6 +677,7 @@
 	    untested "$errname execution from bytecode->native test"
 	    untested "$errname output from bytecode->native test"
 	}
+	eval gcj_cleanup $removeList
 	return
     }
 
@@ -662,7 +690,7 @@
     $status "$errname execution from bytecode->native test"
     if { $status != "pass" } {
 	untested "$errname output from bytecode->native test"
-	return;
+	return
     }
 
     verbose "resultfile is $resultfile"
@@ -695,6 +723,7 @@
     }
     if { $passed == 1 } {
 	pass "$errname output from bytecode->native test"
+	eval gcj_cleanup $removeList
     } else {
 	clone_output "expected was $expected"
 	clone_output "output was $output"
Index: libjava.mauve/mauve.exp
===================================================================
RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.mauve/mauve.exp,v
retrieving revision 1.12
diff -u -r1.12 mauve.exp
--- mauve.exp	2001/02/08 12:04:57	1.12
+++ mauve.exp	2001/06/08 22:11:04
@@ -52,13 +52,14 @@
   return [lsort [array names uses]]
 }
 
-# Run all the Mauve tests.
+# Run all the Mauve tests.  Return 1 on success, 0 on any failure.  If
+# the tests are skipped, that is treated like success.
 proc test_mauve {} {
   global srcdir objdir subdir env
 
   if {! [info exists env(MAUVEDIR)]} then {
     verbose "MAUVEDIR not set; not running Mauve tests"
-    return
+    return 1
   }
 
   # Run in subdir so we don't overwrite our own Makefile.
@@ -95,7 +96,7 @@
   } msg]} then {
     fail "Mauve configure"
     verbose "configure failed with $msg"
-    return
+    return 0
   }
   pass "Mauve configure"
 
@@ -114,14 +115,14 @@
   } msg]} then {
     fail "Mauve build"
     verbose "build failed with $msg"
-    return
+    return 0
   }
   pass "Mauve build"
 
   set srcfile $full_srcdir/$subdir/DejaGNUTestHarness.java
   if {! [bytecompile_file $srcfile [pwd] $env(MAUVEDIR):[pwd]]} then {
     fail "Compile DejaGNUTestHarness.java"
-    return
+    return 0
   }
   pass "Compile DejaGNUTestHarness.java"
 
@@ -149,9 +150,10 @@
     lappend objlist $obj
   }
   if {! $ok} then {
-    return
+    return 0
   }
 
+  set proc_ok 1
   set Executable DejaGNUTestHarness
   foreach file $choices {
     # Turn `java/lang/Foo.java' into `java.lang.Foo'.
@@ -174,12 +176,14 @@
       }
     }
     if {! $ok} then {
+      set proc_ok 0
       continue
     }
 
     set x [prune_warnings [target_compile [concat $uses($file) $objlist] \
 			     $Executable executable $link_args]]
     if {$x != ""} then {
+      set proc_ok 0
       fail "Link for $class"
       continue
     }
@@ -197,23 +201,28 @@
 	if {$what == "PASS" || $what == "XPASS"} then {
 	  pass $msg
 	} else {
+	  set proc_ok 0
 	  fail $msg
 	}
       }
     }
   }
+
+  return $proc_ok
 }
 
 # 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.
+# patching the source of the DejaGNUTestHarness.  Return 1 on success,
+# 0 on any failure.  If the tests are skipped, that is treated like
+# success.
 proc test_mauve_sim {} {
   global srcdir subdir env
 
   if {! [info exists env(MAUVEDIR)]} then {
     verbose "MAUVEDIR not set; not running Mauve tests"
-    return
+    return 1
   }
 
   # Run in subdir so we don't overwrite our own Makefile.
@@ -230,7 +239,7 @@
   } msg]} then {
     fail "Mauve configure"
     verbose "configure failed with $msg"
-    return
+    return 0
   }
   pass "Mauve configure"
 
@@ -249,7 +258,7 @@
   } msg]} then {
     fail "Mauve build"
     verbose "build failed with $msg"
-    return
+    return 0
   }
   pass "Mauve build"
 
@@ -279,11 +288,12 @@
     lappend objlist $obj
   }
   if {! $ok} then {
-    return
+    return 0
   }
 
   lappend objlist gnu/testlet/DejaGNUTestHarness.o
 
+  set proc_ok 1
   set Executable DejaGNUTestHarness
   foreach file $choices {
     # Turn `java/lang/Foo.java' into `java.lang.Foo'.
@@ -307,6 +317,7 @@
       }
     }
     if {! $ok} then {
+      set proc_ok 0
       continue
     }
 
@@ -328,7 +339,7 @@
     if {! [bytecompile_file [pwd]/gnu/testlet/$srcfile [pwd]/gnu/testlet \
 	       $env(MAUVEDIR):[pwd]]} then {
 	fail "Compile DejaGNUTestHarness.java"
-	return
+	return 0
     }
 
     set x [prune_warnings \
@@ -336,12 +347,14 @@
 		gnu/testlet/DejaGNUTestHarness.o object $compile_args]]
     if {$x != ""} then {
 	fail "Compile DejaGNUTestHarness.java"
+        set proc_ok 0
 	continue
-      }
+    }
 
     set x [prune_warnings [target_compile [concat $uses($file) $objlist] \
 			     $Executable executable $link_args]]
     if {$x != ""} then {
+      set proc_ok 0
       fail "Link for $class"
       continue
     }
@@ -359,19 +372,33 @@
 	if {$what == "PASS" || $what == "XPASS"} then {
 	  pass $msg
 	} else {
+	  set proc_ok 0
 	  fail $msg
 	}
       }
     }
   }
+
+  return $proc_ok
 }
 
-# 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
+proc gcj_run_mauve_tests {} {
+  # 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] } {
+    set r [test_mauve_sim]
+  } else {
+    set r [test_mauve]
+  }
+  cd $here
+
+  if {$r} {
+    # No need to keep the build around.  FIXME: this knows how the
+    # tests work.  This whole file could use a rewrite.
+    system "rm -rf mauve-build"
+  }
 }
-cd $here
+
+gcj_run_mauve_tests


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]