diff --git a/main/actions/ForkTests.scala b/main/actions/ForkTests.scala index b47319aba..4aee621bd 100755 --- a/main/actions/ForkTests.scala +++ b/main/actions/ForkTests.scala @@ -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() } -} \ No newline at end of file +} diff --git a/sbt/src/sbt-test/tests/t543/project/Ticket543Test.scala b/sbt/src/sbt-test/tests/t543/project/Ticket543Test.scala index dfad98959..26e7903fc 100755 --- a/sbt/src/sbt-test/tests/t543/project/Ticket543Test.scala +++ b/sbt/src/sbt-test/tests/t543/project/Ticket543Test.scala @@ -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") } )) } diff --git a/testing/agent/src/main/java/sbt/ForkMain.java b/testing/agent/src/main/java/sbt/ForkMain.java index 271c873f5..2fe088a49 100755 --- a/testing/agent/src/main/java/sbt/ForkMain.java +++ b/testing/agent/src/main/java/sbt/ForkMain.java @@ -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 {