From 0cf9e98c2a04b8e5c4698278bbb2ba22fef7c1a2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 23 Feb 2013 02:53:43 -0600 Subject: clean up the test runner --- src/main/scala/org/perl8/test/sbt/Runner.scala | 30 ++------- .../scala/org/perl8/test/sbt/SBTReporter.scala | 71 ++++++++++++++++++++++ 2 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 src/main/scala/org/perl8/test/sbt/SBTReporter.scala (limited to 'src') diff --git a/src/main/scala/org/perl8/test/sbt/Runner.scala b/src/main/scala/org/perl8/test/sbt/Runner.scala index cd68fd1..e75f799 100644 --- a/src/main/scala/org/perl8/test/sbt/Runner.scala +++ b/src/main/scala/org/perl8/test/sbt/Runner.scala @@ -1,6 +1,6 @@ package org.perl8.test.sbt -import org.scalatools.testing.{EventHandler,Event,Result} +import org.scalatools.testing.{EventHandler,Logger} import org.perl8.test.harness.Utils._ import org.perl8.test.harness.SummaryReporter @@ -8,7 +8,7 @@ import org.perl8.test.Test class Runner ( loader: ClassLoader, - loggers: Array[org.scalatools.testing.Logger] + loggers: Array[Logger] ) extends org.scalatools.testing.Runner2 { def run ( testClassName: String, @@ -16,29 +16,7 @@ class Runner ( eventHandler: EventHandler, args: Array[String] ) { - val reporter = new SummaryReporter - val results = reporter.runTests(Seq(testClassName)) - results(testClassName)._2.results.foreach { r => - val event = new Event { - val testName: String = testClassName - val description: String = r.description - val result: Result = - if (r.passed) { - org.scalatools.testing.Result.Success - } - else if (r.directive.isDefined) { - org.scalatools.testing.Result.Skipped - } - else { - org.scalatools.testing.Result.Failure - } - val error: Throwable = null - } - eventHandler.handle(event) - } - } - - def println (thing: Any) { - loggers.foreach(_.info(thing.toString)) + val reporter = new SBTReporter(loader, loggers, eventHandler) + reporter.run(testClassName) } } diff --git a/src/main/scala/org/perl8/test/sbt/SBTReporter.scala b/src/main/scala/org/perl8/test/sbt/SBTReporter.scala new file mode 100644 index 0000000..f868e43 --- /dev/null +++ b/src/main/scala/org/perl8/test/sbt/SBTReporter.scala @@ -0,0 +1,71 @@ +package org.perl8.test.sbt + +import org.scalatools.testing.{EventHandler,Event,Result,Logger} +import java.io.ByteArrayOutputStream + +import org.perl8.test.harness._ +import org.perl8.test.tap +import org.perl8.test.Test + +class SBTReporter ( + loader: ClassLoader, + loggers: Array[Logger], + eventHandler: EventHandler +) extends Reporter { + def run (testName: String): Int = { + val test = loader.loadClass(testName).newInstance.asInstanceOf[Test] + + val out = new ByteArrayOutputStream + Console.withOut(out) { + test.run + } + + val result = tap.Consumer.parse(out) + + result.results.foreach { r => + val event = new Event { + val testName: String = r.description + val description: String = r.description + val result: Result = + if (r.passed) { + Result.Success + } + else if (r.directive.isDefined) { + logDebug("Skipped test " + r.description) + Result.Skipped + } + else { + logError("Failed test " + r.description) + Result.Failure + } + val error: Throwable = null + } + eventHandler.handle(event) + } + + if (result.results.exists { r => !r.passed && !r.directive.isDefined }) { + logError(testName + " failed.") + 1 + } + else { + logInfo(testName + " succeeded.") + 0 + } + } + + private def logDebug (msg: String) { + loggers.foreach(_.debug(msg)) + } + + private def logInfo (msg: String) { + loggers.foreach(_.info(msg)) + } + + private def logWarn (msg: String) { + loggers.foreach(_.warn(msg)) + } + + private def logError (msg: String) { + loggers.foreach(_.error(msg)) + } +} -- cgit v1.2.3-54-g00ecf