]> Dogcows Code - chaz/sbt-tap/blobdiff - src/main/scala/SbtTapReporting.scala
remove unused import
[chaz/sbt-tap] / src / main / scala / SbtTapReporting.scala
index 531a86b463b9af88ba0650108a2779788268a96e..8d90fbeccace323b9691ef5d9b7369ee70f35fc5 100644 (file)
@@ -2,8 +2,6 @@ import java.io.{PrintWriter, StringWriter, File, FileWriter}
 import sbt._
 import org.scalatools.testing.{Event => TEvent, Result => TResult}
 
-import java.util.concurrent.atomic.AtomicInteger
-
 object SbtTapReporting extends Plugin {
   def apply() = new SbtTapListener
 }
@@ -17,15 +15,15 @@ object SbtTapReporting extends Plugin {
  * the current active group might be one way to go.
  */
 class SbtTapListener extends TestsListener {
-  var testId = new AtomicInteger(0)
+  var testId = 0
   var fileWriter: FileWriter = _
 
   override def doInit = {
-    new File("test-results").mkdirs
-
-    fileWriter = new FileWriter(
-      scala.util.Properties.envOrElse("SBT_TAP_OUTPUT", "test-results/test.tap")
-    )
+    val filename = scala.util.Properties.envOrElse("SBT_TAP_OUTPUT", "test-results/test.tap")
+    val file = new File(filename)
+    new File(file.getParent).mkdirs
+    fileWriter = new FileWriter(file)
+    writeTap("TAP", "version", 13)
   }
 
   def startGroup(name: String) =
@@ -39,23 +37,29 @@ class SbtTapListener extends TestsListener {
     writeTapDiag(stackTraceForError(t))
   }
 
-  def testEvent(event: TestEvent) = {
-    event.detail.foreach { e: TEvent =>
+  def testEvent(event: TestEvent) = this.synchronized {
+    event.detail.foreach { e: TEvent => testId += 1
+      var modified = false
+      val description = (if (e.testName.contains("#")) {
+        modified = true
+        e.testName.replaceAll("#", "")
+      } else e.testName).replaceAll("\n", "")
       e.result match {
-        case TResult.Success => writeTap("ok", testId.incrementAndGet, "-", e.testName)
+        case TResult.Success =>
+          writeTap("ok", testId, "-", description)
+        case TResult.Skipped =>
+          writeTap("ok", testId, "-", description, "# SKIP")
         case TResult.Error | TResult.Failure =>
-          writeTap("not ok", testId.incrementAndGet, "-", e.testName)
+          writeTap("not ok", testId, "-", description)
           // TODO: It would be nice if we could report the exact line in the test where this happened.
           writeTapDiag(stackTraceForError(e.error))
-        case TResult.Skipped =>
-          // it doesn't look like this framework distinguishes between pending and ignored.
-          writeTap("ok", testId.incrementAndGet, e.testName, "#", "skip", e.testName)
       }
+      if (modified) writeTapDiag("warning: hash character(s) removed from test " + testId + " description")
     }
   }
 
   override def doComplete(finalResult: TestResult.Value) = {
-    writeTap("1.." + testId.get)
+    writeTap("1.." + testId)
     fileWriter.close
   }
 
This page took 0.022682 seconds and 4 git commands to generate.