aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/scala/com/iinteractive/test/sbt
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-03-06 15:32:26 -0600
committerJesse Luehrs <doy@tozt.net>2013-03-06 15:32:26 -0600
commit7efb2caf7d8832a7d3a9d2ac55862e43267a3eb2 (patch)
tree49fcb4d31bec67bcb67c1262abc25c5e5ecb1e51 /src/main/scala/com/iinteractive/test/sbt
parent66bcf3627a38ef58dabaf90b7e597569b91ea3e8 (diff)
downloadscala-test-more-7efb2caf7d8832a7d3a9d2ac55862e43267a3eb2.tar.gz
scala-test-more-7efb2caf7d8832a7d3a9d2ac55862e43267a3eb2.zip
move the directory structure too
Diffstat (limited to 'src/main/scala/com/iinteractive/test/sbt')
-rw-r--r--src/main/scala/com/iinteractive/test/sbt/Fingerprint.scala11
-rw-r--r--src/main/scala/com/iinteractive/test/sbt/Framework.scala18
-rw-r--r--src/main/scala/com/iinteractive/test/sbt/Runner.scala25
-rw-r--r--src/main/scala/com/iinteractive/test/sbt/SBTReporter.scala99
-rw-r--r--src/main/scala/com/iinteractive/test/sbt/package.scala4
5 files changed, 157 insertions, 0 deletions
diff --git a/src/main/scala/com/iinteractive/test/sbt/Fingerprint.scala b/src/main/scala/com/iinteractive/test/sbt/Fingerprint.scala
new file mode 100644
index 0000000..bab13c5
--- /dev/null
+++ b/src/main/scala/com/iinteractive/test/sbt/Fingerprint.scala
@@ -0,0 +1,11 @@
+package com.iinteractive.test.sbt
+
+import org.scalatools.testing
+
+/** Implementation of
+ * [[http://github.com/harrah/test-interface/blob/master/src/org/scalatools/testing/Fingerprint.java org.scalatools.testing.Fingerprint]].
+ */
+object Fingerprint extends testing.SubclassFingerprint {
+ def isModule: Boolean = false
+ def superClassName: String = "com.iinteractive.test.Test"
+}
diff --git a/src/main/scala/com/iinteractive/test/sbt/Framework.scala b/src/main/scala/com/iinteractive/test/sbt/Framework.scala
new file mode 100644
index 0000000..bb3d0bb
--- /dev/null
+++ b/src/main/scala/com/iinteractive/test/sbt/Framework.scala
@@ -0,0 +1,18 @@
+package com.iinteractive.test.sbt
+
+import org.scalatools.testing
+
+/** Implementation of
+ * [[http://github.com/harrah/test-interface/blob/master/src/org/scalatools/testing/Framework.java org.scalatools.testing.Framework]].
+ */
+class Framework extends testing.Framework {
+ val name: String = "Perl8 Test"
+ val tests: Array[testing.Fingerprint] = Array(Fingerprint)
+
+ def testRunner (
+ testClassLoader: ClassLoader,
+ loggers: Array[testing.Logger]
+ ): testing.Runner = {
+ new Runner(testClassLoader, loggers)
+ }
+}
diff --git a/src/main/scala/com/iinteractive/test/sbt/Runner.scala b/src/main/scala/com/iinteractive/test/sbt/Runner.scala
new file mode 100644
index 0000000..0eee4cf
--- /dev/null
+++ b/src/main/scala/com/iinteractive/test/sbt/Runner.scala
@@ -0,0 +1,25 @@
+package com.iinteractive.test.sbt
+
+import org.scalatools.testing
+
+import com.iinteractive.test.harness.SummaryReporter
+import com.iinteractive.test.Test
+
+/** Implementation of
+ * [[http://github.com/harrah/test-interface/blob/master/src/org/scalatools/testing/Runner2.java org.scalatools.testing.Runner2]]
+ * using [[com.iinteractive.test.sbt.SBTReporter SBTReporter]].
+ */
+class Runner (
+ loader: ClassLoader,
+ loggers: Array[testing.Logger]
+) extends testing.Runner2 {
+ def run (
+ testClassName: String,
+ fingerprint: testing.Fingerprint,
+ eventHandler: testing.EventHandler,
+ args: Array[String]
+ ) {
+ val reporter = new SBTReporter(loader, loggers, eventHandler)
+ reporter.run(testClassName)
+ }
+}
diff --git a/src/main/scala/com/iinteractive/test/sbt/SBTReporter.scala b/src/main/scala/com/iinteractive/test/sbt/SBTReporter.scala
new file mode 100644
index 0000000..34df60d
--- /dev/null
+++ b/src/main/scala/com/iinteractive/test/sbt/SBTReporter.scala
@@ -0,0 +1,99 @@
+package com.iinteractive.test.sbt
+
+import org.scalatools.testing
+
+import com.iinteractive.test.harness.{Reporter,SummarizedTests}
+import com.iinteractive.test.tap.{TAPEvent,ResultEvent,EndEvent}
+import com.iinteractive.test.Test
+
+/** Runs a single test under the SBT test harness. */
+class SBTReporter (
+ loader: ClassLoader,
+ loggers: Array[testing.Logger],
+ eventHandler: testing.EventHandler
+) extends Reporter with SummarizedTests {
+ def run (testName: String): Int = {
+ val cb = (e: TAPEvent) => e match {
+ case ResultEvent(r) => {
+ val event = new testing.Event {
+ val testName: String = r.description
+ val description: String = r.description
+ val result: testing.Result =
+ if (r.passed) {
+ testing.Result.Success
+ }
+ else if (r.directive.isDefined) {
+ testing.Result.Skipped
+ }
+ else {
+ testing.Result.Failure
+ }
+ val error: Throwable = null
+ }
+ eventHandler.handle(event)
+ }
+ case EndEvent(result) => {
+ val testsPassed = result.success
+ val correctCode = result.exitCode == 0
+ val event = new testing.Event {
+ val testName: String = "exit code is 0"
+ val description: String = "exit code is 0"
+ val result: testing.Result =
+ if (correctCode) {
+ testing.Result.Success
+ }
+ else {
+ testing.Result.Failure
+ }
+ val error: Throwable = null
+ }
+ eventHandler.handle(event)
+
+ if (testsPassed && correctCode) {
+ logInfo("PASS " + testName)
+ }
+ else {
+ val results = result.results.length
+ val failed = result.results.count { t =>
+ !t.passed && !t.directive.isDefined
+ }
+
+ val errors = Seq(
+ (if (testsPassed)
+ None
+ else
+ Some("failed " + failed + "/" + results)),
+ (if (correctCode)
+ None
+ else
+ Some("non-zero exit code: " + result.exitCode))
+ ).flatten.mkString("(", ", ", ")")
+
+ logError("FAIL " + testName + " " + errors)
+ }
+ }
+ case _ => ()
+ }
+
+ runOneTest(
+ loader.loadClass(testName).newInstance.asInstanceOf[Test],
+ cb
+ ).exitCode
+ }
+
+ 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))
+ }
+}
diff --git a/src/main/scala/com/iinteractive/test/sbt/package.scala b/src/main/scala/com/iinteractive/test/sbt/package.scala
new file mode 100644
index 0000000..eeb1f68
--- /dev/null
+++ b/src/main/scala/com/iinteractive/test/sbt/package.scala
@@ -0,0 +1,4 @@
+package com.iinteractive.test
+
+/** Classes for interoperating with `sbt test`. */
+package object sbt