mirror of https://github.com/sbt/sbt.git
Changed createTeskTasks in TestFramework.scala to reuse TestRunner instance when running different TestDefinition.
This commit is contained in:
parent
b2b9fb132a
commit
d2e40c1c56
|
|
@ -0,0 +1,5 @@
|
|||
scalaVersion := "2.10.1"
|
||||
|
||||
libraryDependencies += "org.scalatest" %% "scalatest" % "2.0.M6-SNAP15"
|
||||
|
||||
testOptions in Test += Tests.Argument("-r", "custom.CustomReporter")
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package custom
|
||||
|
||||
import java.io._
|
||||
import org.scalatest._
|
||||
import events._
|
||||
|
||||
class CustomReporter extends Reporter {
|
||||
|
||||
private def writeFile(filePath: String, content: String) {
|
||||
val file = new File(filePath)
|
||||
val writer =
|
||||
if (!file.exists)
|
||||
new FileWriter(new File(filePath))
|
||||
else
|
||||
new FileWriter(new File(filePath + "-2"))
|
||||
writer.write(content)
|
||||
writer.flush()
|
||||
writer.close()
|
||||
}
|
||||
|
||||
def apply(event: Event) {
|
||||
event match {
|
||||
case runStarting: RunStarting => writeFile("target/RunStarting", "RunStarting")
|
||||
case runCompleted: RunCompleted => writeFile("target/RunCompleted", "RunCompleted")
|
||||
case _ =>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package com.test
|
||||
|
||||
import org.scalatest.Spec
|
||||
|
||||
class TestSpec extends Spec {
|
||||
|
||||
def `TestSpec-test-1 ` {}
|
||||
|
||||
def `TestSpec-test-2 ` {}
|
||||
|
||||
def `TestSpec-test-3 ` {}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package com.test
|
||||
|
||||
import org.scalatest.Spec
|
||||
|
||||
class TestSpec2 extends Spec {
|
||||
|
||||
def `TestSpec2-test-1 ` {}
|
||||
|
||||
def `TestSpec2-test-2 ` {}
|
||||
|
||||
def `TestSpec2-test-3 ` {}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
#This test that the framework will only use a single runner instance to execute all tests.
|
||||
#Because ScalaTest's runner will report RunStarting when the run start, a CustomReporter is
|
||||
#used to report expected ScalaTest's RunStarting event by writing out to target/, it is then
|
||||
#used to check for their existence, and if the expected event is fired > 1 (which is unexpected),
|
||||
#a xxxx-2 file will be written, thus here we also check for 'absent' of such file.
|
||||
|
||||
> clean
|
||||
|
||||
> test
|
||||
|
||||
$ exists target/RunStarting
|
||||
|
||||
$ absent target/RunStarting-2
|
||||
|
|
@ -184,6 +184,12 @@ object TestFramework
|
|||
private def createTestTasks(loader: ClassLoader, tests: Map[Framework, (Set[TestDefinition], Seq[String])], ordered: Seq[TestDefinition], log: Logger, listeners: Seq[TestReportListener]) =
|
||||
{
|
||||
val testsListeners = listeners collect { case tl: TestsListener => tl }
|
||||
|
||||
val runnerMap =
|
||||
tests map { case (framework, (testDefinitions, testArgs)) =>
|
||||
(framework, new TestRunner(framework, loader, testArgs.toArray, listeners, log))
|
||||
}
|
||||
|
||||
def foreachListenerSafe(f: TestsListener => Unit): () => Unit = () => safeForeach(testsListeners, log)(f)
|
||||
|
||||
import TestResult.{Error,Passed,Failed}
|
||||
|
|
@ -191,13 +197,12 @@ object TestFramework
|
|||
val startTask = foreachListenerSafe(_.doInit)
|
||||
val testTasks =
|
||||
tests flatMap { case (framework, (testDefinitions, testArgs)) =>
|
||||
|
||||
val runner = new TestRunner(framework, loader, testArgs.toArray, listeners, log)
|
||||
for(testDefinition <- testDefinitions) yield
|
||||
{
|
||||
val runTest = () => withContextLoader(loader) { runner.run(testDefinition) }
|
||||
(testDefinition.name, runTest)
|
||||
}
|
||||
val runner = runnerMap(framework)
|
||||
for(testDefinition <- testDefinitions) yield
|
||||
{
|
||||
val runTest = () => withContextLoader(loader) { runner.run(testDefinition) }
|
||||
(testDefinition.name, runTest)
|
||||
}
|
||||
}
|
||||
|
||||
val endTask = (result: TestResult.Value) => foreachListenerSafe(_.doComplete(result))
|
||||
|
|
|
|||
Loading…
Reference in New Issue