Use java.lang.Throwable.setStackTrace. Proper fix for #543.

This commit is contained in:
Eugene Vigdorchik 2012-11-15 15:39:15 +04:00 committed by Mark Harrah
parent 1c1e5c4977
commit 960d17c358
3 changed files with 13 additions and 12 deletions

View File

@ -27,8 +27,7 @@ private[sbt] object ForkTests {
}
val argMap = frameworks.map {
f => f.implClassName -> opts.flatMap {
case Argument(None, args) => args
case Argument(Some(`f`), args) => args
case Argument(None | Some(`f`), args) => args
case _ => Nil
}
}.toMap
@ -112,4 +111,4 @@ private final class React(is: ObjectInputStream, os: ObjectOutputStream, log: Lo
listeners.foreach(_ endGroup (group, result))
react()
}
}
}

View File

@ -2,19 +2,23 @@ import sbt._
import Keys._
import Tests._
import Defaults._
import java.io.{ CharArrayWriter, PrintWriter }
object Ticket543Test extends Build {
val marker = new File("marker")
val check = TaskKey[Unit]("check", "Check non-null error has been returned.")
val check = TaskKey[Unit]("check", "Check correct error has been returned.")
lazy val root = Project("root", file("."), settings = defaultSettings ++ Seq(
libraryDependencies += "org.scalatest" %% "scalatest" % "1.8" % "test",
fork := true,
testListeners += new TestReportListener {
def testEvent(event: TestEvent) {
for (e <- event.detail.filter(_.result() == org.scalatools.testing.Result.Failure)) {
if (e.error() ne null) {
marker.createNewFile()
for (e <- event.detail.filter(_.result == org.scalatools.testing.Result.Failure)) {
if (e.error ne null) {
val caw = new CharArrayWriter
e.error.printStackTrace(new PrintWriter(caw))
if (caw.toString.contains("Test.scala:"))
marker.createNewFile()
}
}
}
@ -25,7 +29,7 @@ object Ticket543Test extends Build {
check := {
val exists = marker.exists
marker.delete()
if (!exists) error("Null error had been returned previously")
if (!exists) error("Null or invalid error had been returned previously")
}
))
}

View File

@ -48,17 +48,15 @@ public class ForkMain {
}
}
}
static class ForkError extends Exception implements Serializable {
static class ForkError extends Exception {
private String originalMessage;
private StackTraceElement[] originalStackTrace;
private ForkError cause;
ForkError(Throwable t) {
originalMessage = t.getMessage();
originalStackTrace = t.getStackTrace();
setStackTrace(t.getStackTrace());
if (t.getCause() != null) cause = new ForkError(t.getCause());
}
public String getMessage() { return originalMessage; }
public StackTraceElement[] getStackTrace() { return originalStackTrace; }
public Exception getCause() { return cause; }
}
static class ForkEvent implements Event, Serializable {