mirror of
https://github.com/sbt/sbt.git
synced 2026-09-02 11:07:30 +02:00
Added >1 framework class per framework support, this enables sbt to support both old and new framework API at the same time.
This commit is contained in:
@@ -8,6 +8,7 @@ package sbt
|
||||
import testing.{Logger=>TLogger, _}
|
||||
import org.scalatools.testing.{Framework => OldFramework}
|
||||
import classpath.{ClasspathUtilities, DualLoader, FilteredLoader}
|
||||
import scala.annotation.tailrec
|
||||
|
||||
object TestResult extends Enumeration
|
||||
{
|
||||
@@ -17,30 +18,38 @@ object TestResult extends Enumeration
|
||||
object TestFrameworks
|
||||
{
|
||||
val ScalaCheck = new TestFramework("org.scalacheck.ScalaCheckFramework")
|
||||
val ScalaTest = new TestFramework("org.scalatest.tools.Framework")
|
||||
val ScalaTest = new TestFramework("org.scalatest.tools.Framework", "org.scalatest.tools.ScalaTestFramework")
|
||||
val Specs = new TestFramework("org.specs.runner.SpecsFramework")
|
||||
val Specs2 = new TestFramework("org.specs2.runner.SpecsFramework")
|
||||
val JUnit = new TestFramework("com.novocode.junit.JUnitFramework")
|
||||
}
|
||||
|
||||
case class TestFramework(val implClassName: String)
|
||||
case class TestFramework(val implClassNames: String*)
|
||||
{
|
||||
def create(loader: ClassLoader, log: Logger): Option[Framework] =
|
||||
{
|
||||
try
|
||||
{
|
||||
Some(
|
||||
Class.forName(implClassName, true, loader).newInstance match {
|
||||
case newFramework: Framework => newFramework
|
||||
case oldFramework: OldFramework => new FrameworkWrapper(oldFramework)
|
||||
}
|
||||
)
|
||||
}
|
||||
catch
|
||||
{
|
||||
case e: ClassNotFoundException => log.debug("Framework implementation '" + implClassName + "' not present."); None
|
||||
@tailrec
|
||||
private def createFramework(loader: ClassLoader, log: Logger, frameworkClassNames: List[String]): Option[Framework] = {
|
||||
frameworkClassNames match {
|
||||
case head :: tail =>
|
||||
try
|
||||
{
|
||||
Some(Class.forName(head, true, loader).newInstance match {
|
||||
case newFramework: Framework => newFramework
|
||||
case oldFramework: OldFramework => new FrameworkWrapper(oldFramework)
|
||||
})
|
||||
}
|
||||
catch
|
||||
{
|
||||
case e: ClassNotFoundException =>
|
||||
log.debug("Framework implementation '" + head + "' not present.");
|
||||
createFramework(loader, log, tail)
|
||||
}
|
||||
case Nil =>
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
def create(loader: ClassLoader, log: Logger): Option[Framework] =
|
||||
createFramework(loader, log, implClassNames.toList)
|
||||
}
|
||||
final class TestDefinition(val name: String, val fingerprint: Fingerprint)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user