aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/testbuilder.scala35
-rw-r--r--src/main/scala/testbuilder/package.scala3
-rw-r--r--src/main/scala/testbuilder/tap.scala23
-rw-r--r--src/main/scala/testbuilder/util.scala4
-rw-r--r--src/test/scala/basic.scala6
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)