]>
Dogcows Code - chaz/sbt-tap/blob - src/main/scala/SbtTapReporting.scala
50035afa33babf70a5a9422fd323e497fbb79d9e
4 import org
.scalatools
.testing
.{Event
=> TEvent
, Result
=> TResult
}
7 import java
.util
.concurrent
.atomic
.AtomicInteger
9 import java
.io
.{File
, FileWriter
, PrintWriter
, StringWriter
}
11 object SbtTapReporting
extends Plugin
{
12 override def settings
= Seq(
13 testListeners
++= Seq(new SbtTapListener
)
18 * Listens to sbt test listener events and writes them to a tap compatible file. Results for all groups
19 * go to a single file although it might be desirable to generate one tap file per group.
21 * sbt runs tests in parallel and the protocol does not seem to provide a way to match a group to a test event. It
22 * does look line one thread calls startGroup/testEvent/endGroup sequentially and using thread local to keep
23 * the current active group might be one way to go.
25 class SbtTapListener
extends TestsListener
{
26 var testId
= new AtomicInteger(0)
27 var fileWriter
: FileWriter
= _
30 new File("test-results").mkdirs()
32 fileWriter
= new FileWriter("test-results/test.tap")
35 def startGroup(name
: String
) {}
37 def testEvent(event
: TestEvent
) {
38 event
.detail
.foreach
{ e
: TEvent
=>
40 case TResult
.Success
=> writeTapFields("ok", testId
.incrementAndGet(), "-", e
.testName())
41 case TResult
.Error
| TResult
.Failure
=>
42 writeTapFields("not ok", testId
.incrementAndGet(), "-", e
.testName())
43 // TODO: for exceptions, write stack trace to tap file.
44 case TResult
.Skipped
=>
45 // it doesn't look like this framework distinguishes between pending and ignored.
46 writeTapFields("ok", testId
.incrementAndGet(), "#", "skip", e
.testName())
51 override def doComplete(finalResult
: TestResult
.Value
) {
52 writeTapFields("1.." + testId
.get
)
56 private def writeTapFields(s
: Any
*) { fileWriter
.write(s
.mkString("", " ", "\n")) }
58 def endGroup(name
: String
, t
: Throwable
) { }
60 def endGroup(name
: String
, result
: TestResult
.Value
) { }
This page took 0.037872 seconds and 4 git commands to generate.