X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fscala%2FSbtTapReporting.scala;h=8d90fbeccace323b9691ef5d9b7369ee70f35fc5;hb=HEAD;hp=eb6eac44c42b34e8054ae779b6a91e248da5deaa;hpb=89b9b5242336c7e2bfe27464ab203846f73969b6;p=chaz%2Fsbt-tap diff --git a/src/main/scala/SbtTapReporting.scala b/src/main/scala/SbtTapReporting.scala index eb6eac4..8d90fbe 100644 --- a/src/main/scala/SbtTapReporting.scala +++ b/src/main/scala/SbtTapReporting.scala @@ -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,7 +15,7 @@ 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 = { @@ -25,6 +23,7 @@ class SbtTapListener extends TestsListener { val file = new File(filename) new File(file.getParent).mkdirs fileWriter = new FileWriter(file) + writeTap("TAP", "version", 13) } def startGroup(name: String) = @@ -38,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 }