diff options
-rw-r--r-- | src/main/scala/testbuilder.scala | 35 | ||||
-rw-r--r-- | src/main/scala/testbuilder/package.scala | 3 | ||||
-rw-r--r-- | src/main/scala/testbuilder/tap.scala | 23 | ||||
-rw-r--r-- | src/main/scala/testbuilder/util.scala | 4 | ||||
-rw-r--r-- | src/test/scala/basic.scala | 6 |
5 files changed, 34 insertions, 37 deletions
diff --git a/src/main/scala/testbuilder.scala b/src/main/scala/testbuilder.scala index 15951cd..edde1f9 100644 --- a/src/main/scala/testbuilder.scala +++ b/src/main/scala/testbuilder.scala @@ -1,6 +1,7 @@ package testbuilder import java.io.OutputStream +import language.implicitConversions import util._ @@ -13,43 +14,27 @@ class Builder (plan: Option[Plan], out: OutputStream) { def this (out: OutputStream = System.out) = this(None, out) - def ok (test: Boolean, description: String, todo: String) { - ok(test, Some(description), Some(todo)) - } - - def ok (test: Boolean, description: String) { - ok(test, Some(description)) - } - def ok ( test: Boolean, - description: Option[String] = None, - todo: Option[String] = None + description: Message = NoMessage, + todo: Message = NoMessage ) { val line = tap.result(test, state.currentTest, description, todo) state.ok(test || todo.isDefined) println(line) } - def skip (reason: String) { - skip(Some(reason)) - } - - def skip (reason: Option[String] = None) { + def skip (reason: Message = NoMessage) { val line = tap.skip(state.currentTest, reason) state.ok(true) println(line) } - def diag (message: String) { - println(tap.comment(message)) - } - - def bailOut (message: String) { - bailOut(Some(message)) + def diag (message: Message) { + message.foreach(m => println(tap.comment(m))) } - def bailOut (message: Option[String] = None) { + def bailOut (message: Message = NoMessage) { println(tap.bailOut(message)) throw new BailOutException(message.getOrElse("")) } @@ -84,6 +69,12 @@ class Builder (plan: Option[Plan], out: OutputStream) { } } + private implicit def messageToOption (message: Message): Option[String] = + message match { + case HasMessage(x) => Some(x) + case NoMessage => None + } + private class TestState { var passCount = 0 var failCount = 0 diff --git a/src/main/scala/testbuilder/package.scala b/src/main/scala/testbuilder/package.scala index 990b871..d4f63cf 100644 --- a/src/main/scala/testbuilder/package.scala +++ b/src/main/scala/testbuilder/package.scala @@ -4,6 +4,9 @@ package object testbuilder { implicit def intToPlan (p: Int): Plan = new NumericPlan(p) + implicit def stringToMessage (s: String): util.Message = + new util.HasMessage(s) + type Plan = util.Plan type NumericPlan = util.NumericPlan type SkipAll = util.SkipAll diff --git a/src/main/scala/testbuilder/tap.scala b/src/main/scala/testbuilder/tap.scala index 5ea5b83..3857524 100644 --- a/src/main/scala/testbuilder/tap.scala +++ b/src/main/scala/testbuilder/tap.scala @@ -1,19 +1,15 @@ package testbuilder +import language.implicitConversions + import util._ object tap { - def result (cond: Boolean, num: Int, desc: String, todo: String): String = - result(cond, num, Some(desc), Some(todo)) - - def result (cond: Boolean, num: Int, desc: String): String = - result(cond, num, Some(desc)) - def result ( cond: Boolean, num: Int, - desc: Option[String] = None, - todo: Option[String] = None + desc: Message = NoMessage, + todo: Message = NoMessage ): String = join( (if (!cond) Some("not") else None), @@ -23,10 +19,7 @@ object tap { todo.map(t => "# TODO " + t) ) - def skip (num: Int, reason: String): String = - skip(num, Some(reason)) - - def skip (num: Int, reason: Option[String] = None): String = + def skip (num: Int, reason: Message = NoMessage): String = join( Some("ok"), Some(num), @@ -53,4 +46,10 @@ object tap { private def join (strings: Option[Any]*): String = strings.flatMap(x => x).mkString(" ") + + private implicit def messageToOption (message: Message): Option[String] = + message match { + case HasMessage(x) => Some(x) + case NoMessage => None + } } diff --git a/src/main/scala/testbuilder/util.scala b/src/main/scala/testbuilder/util.scala index 186954e..1592d70 100644 --- a/src/main/scala/testbuilder/util.scala +++ b/src/main/scala/testbuilder/util.scala @@ -28,5 +28,9 @@ object SkipAll { def apply () = new SkipAll(None) } +trait Message +case class HasMessage (val contents: String) extends Message +case object NoMessage extends Message + case class BailOutException (val message: String) extends RuntimeException(message) diff --git a/src/test/scala/basic.scala b/src/test/scala/basic.scala index 94a2af6..1f9fe6d 100644 --- a/src/test/scala/basic.scala +++ b/src/test/scala/basic.scala @@ -148,13 +148,13 @@ class Basic extends FunSuite with BeforeAndAfter { test ("todo") { val builder = new Builder(output) - builder.ok(false, "do a thing", "not working yet") - builder.ok(true, "some other thing", "is it?") + builder.ok(false, "do a thing", todo = "not working yet") + builder.ok(true, todo = "is it?") builder.doneTesting val expected = "not ok 1 do a thing # TODO not working yet\n" + - "ok 2 some other thing # TODO is it?\n" + + "ok 2 # TODO is it?\n" + "1..2\n" assert(output.toString === expected) |