diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-02-23 02:53:43 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-02-23 02:53:43 -0600 |
commit | 0cf9e98c2a04b8e5c4698278bbb2ba22fef7c1a2 (patch) | |
tree | cd700709d5f4b9b15de1974a2694860e7fdb6565 /src/main/scala/org/perl8/test/sbt/SBTReporter.scala | |
parent | c3e56778e8d47aec5c5e8354148ea1356a980e69 (diff) | |
download | scala-test-more-0cf9e98c2a04b8e5c4698278bbb2ba22fef7c1a2.tar.gz scala-test-more-0cf9e98c2a04b8e5c4698278bbb2ba22fef7c1a2.zip |
clean up the test runner
Diffstat (limited to 'src/main/scala/org/perl8/test/sbt/SBTReporter.scala')
-rw-r--r-- | src/main/scala/org/perl8/test/sbt/SBTReporter.scala | 71 |
1 files changed, 71 insertions, 0 deletions
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)) + } +} |