From 571df2ac796d2bf369c5f27aa99277599af01f9a Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Fri, 23 Oct 2009 09:18:00 -0400 Subject: [PATCH] Cleanup test framework creation --- src/main/scala/sbt/DefaultProject.scala | 3 +-- src/main/scala/sbt/TestFramework.scala | 9 ++++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/scala/sbt/DefaultProject.scala b/src/main/scala/sbt/DefaultProject.scala index 6b3b2057b..21d7be00f 100644 --- a/src/main/scala/sbt/DefaultProject.scala +++ b/src/main/scala/sbt/DefaultProject.scala @@ -195,8 +195,7 @@ abstract class BasicScalaProject extends ScalaProject with BasicDependencyProjec { val loader = new URLClassLoader(classpath.get.map(_.asURL).toSeq.toArray, getClass.getClassLoader) def getTestNames(framework: TestFramework): Seq[String] = - try { framework.create(loader).tests.map(_.superClassName) } - catch { case e: ClassNotFoundException => log.debug("Framework implementation '" + framework.implClassName + "' not present."); Nil } + framework.create(loader, log).toList.flatMap(_.tests.map(_.superClassName)) frameworks.flatMap(getTestNames) } } diff --git a/src/main/scala/sbt/TestFramework.scala b/src/main/scala/sbt/TestFramework.scala index c653ae822..84368661f 100644 --- a/src/main/scala/sbt/TestFramework.scala +++ b/src/main/scala/sbt/TestFramework.scala @@ -19,8 +19,11 @@ object TestFrameworks } class TestFramework(val implClassName: String) extends NotNull { - def create(loader: ClassLoader): Framework = - Class.forName(implClassName, true, loader).newInstance.asInstanceOf[Framework] + def create(loader: ClassLoader, log: Logger): Option[Framework] = + { + try { Some(Class.forName(implClassName, true, loader).newInstance.asInstanceOf[Framework]) } + catch { case e: ClassNotFoundException => log.debug("Framework implementation '" + implClassName + "' not present."); None } + } } final class TestRunner(framework: Framework, loader: ClassLoader, listeners: Seq[TestReportListener], log: Logger) extends NotNull { @@ -83,7 +86,7 @@ object TestFramework cleanup: Iterable[() => Option[String]]): (Iterable[NamedTestTask], Iterable[NamedTestTask], Iterable[NamedTestTask]) = { val loader = createTestLoader(classpath) - val rawFrameworks = frameworks.map(_.create(loader)) + val rawFrameworks = frameworks.flatMap(_.create(loader, log)) val mappedTests = testMap(rawFrameworks, tests) if(mappedTests.isEmpty) (new NamedTestTask(TestStartName, None) :: Nil, Nil, new NamedTestTask(TestFinishName, { log.info("No tests to run."); None }) :: Nil )