Merge pull request #2730 from dwijnand/wip/forked_test

Fail when the forked test harness fails
This commit is contained in:
eugene yokota 2016-09-05 14:19:11 -04:00 committed by GitHub
commit 0a13ac1231
5 changed files with 58 additions and 0 deletions

View File

@ -4,6 +4,7 @@
package sbt
import scala.collection.mutable
import scala.util.control.NonFatal
import testing._
import java.net.ServerSocket
import java.io._
@ -73,6 +74,12 @@ private[sbt] object ForkTests {
os.flush()
new React(is, os, log, opts.testListeners, resultsAcc).react()
} catch {
case NonFatal(e) =>
def throwableToString(t: Throwable) = {
import java.io._; val sw = new StringWriter; t.printStackTrace(new PrintWriter(sw)); sw.toString
}
resultsAcc("Forked test harness failed: " + throwableToString(e)) = SuiteResult.Error
} finally {
is.close(); os.close(); socket.close()
}

View File

@ -0,0 +1,8 @@
### Bug fixes
- Fixes forked test succeeding when the test harness fails. [#2442][2442]/[#2730][2730] by [@eed3si9n][@eed3si9n]/[@dwijnand][@dwijnand}
[2442]: https://github.com/sbt/sbt/issues/2442
[2730]: https://github.com/sbt/sbt/pull/2730
[@eed3si9n]: https://github.com/eed3si9n
[@dwijnand]: https://github.com/dwijnand

View File

@ -0,0 +1,17 @@
scalaVersion := "2.11.8"
libraryDependencies += "org.scala-sbt" % "test-interface" % "1.0"
testFrameworks := new TestFramework("build.MyFramework") :: Nil
fork := true
definedTests in Test += new sbt.TestDefinition(
"my",
// marker fingerprint since there are no test classes
// to be discovered by sbt:
new sbt.testing.AnnotatedFingerprint {
def isModule = true
def annotationName = "my"
}, true, Array()
)

View File

@ -0,0 +1,24 @@
package build
import _root_.sbt.testing._
class MyFramework extends sbt.testing.Framework {
def fingerprints = Array(new AnnotatedFingerprint { def isModule = true; def annotationName = "my" })
def name = "my"
def runner(args: Array[String], remoteArgs: Array[String], testClassLoader: ClassLoader): Runner =
new MyRunner(args, remoteArgs, testClassLoader)
}
class MyRunner(val args: Array[String], val remoteArgs: Array[String],
val testClassLoader: ClassLoader) extends sbt.testing.Runner {
def tasks(taskDefs: Array[TaskDef]): Array[Task] =
if (args contains "task-boom") taskDefs map BoomTask else throw new Throwable()
def done(): String = ""
private case class BoomTask(taskDef: TaskDef) extends Task {
def tags = Array.empty[String]
def execute(handler: EventHandler, loggers: Array[Logger]) = throw new Throwable()
}
}

View File

@ -0,0 +1,2 @@
-> test
-> testOnly -- task-boom