aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/testbuilder.scala22
-rw-r--r--src/main/scala/testbuilder/package.scala13
-rw-r--r--src/main/scala/testbuilder/tap.scala11
-rw-r--r--src/main/scala/testbuilder/util.scala32
-rw-r--r--src/test/scala/basic.scala20
5 files changed, 84 insertions, 14 deletions
diff --git a/src/main/scala/testbuilder.scala b/src/main/scala/testbuilder.scala
index 23da7e7..bfca692 100644
--- a/src/main/scala/testbuilder.scala
+++ b/src/main/scala/testbuilder.scala
@@ -2,14 +2,14 @@ package testbuilder
import java.io.OutputStream
-class Builder (plan: Option[Int], out: OutputStream) {
- if (plan.isDefined) {
- Console.withOut(out) {
- println(tap.plan(plan.get))
- }
+import util._
+
+class Builder (plan: Option[Plan], out: OutputStream) {
+ Console.withOut(out) {
+ plan.foreach(p => println(tap.plan(p)))
}
- def this (plan: Int, out: OutputStream = System.out) =
+ def this (plan: Plan, out: OutputStream = System.out) =
this(Some(plan), out)
def this (out: OutputStream = System.out) =
@@ -47,9 +47,10 @@ class Builder (plan: Option[Int], out: OutputStream) {
}
def doneTesting () {
- if (plan.isEmpty) {
- Console.withOut(out) {
- println(tap.plan(state.currentTest - 1))
+ Console.withOut(out) {
+ plan match {
+ case None => println(tap.plan(state.currentTest - 1))
+ case _ => ()
}
}
@@ -91,6 +92,3 @@ class Builder (plan: Option[Int], out: OutputStream) {
currentTest > 1 && failCount == 0
}
}
-
-case class BailOutException (val message: String)
- extends RuntimeException(message)
diff --git a/src/main/scala/testbuilder/package.scala b/src/main/scala/testbuilder/package.scala
new file mode 100644
index 0000000..990b871
--- /dev/null
+++ b/src/main/scala/testbuilder/package.scala
@@ -0,0 +1,13 @@
+package object testbuilder {
+ import language.implicitConversions
+
+ implicit def intToPlan (p: Int): Plan =
+ new NumericPlan(p)
+
+ type Plan = util.Plan
+ type NumericPlan = util.NumericPlan
+ type SkipAll = util.SkipAll
+ val SkipAll = util.SkipAll
+
+ type BailOutException = util.BailOutException
+}
diff --git a/src/main/scala/testbuilder/tap.scala b/src/main/scala/testbuilder/tap.scala
index ea8a764..1505245 100644
--- a/src/main/scala/testbuilder/tap.scala
+++ b/src/main/scala/testbuilder/tap.scala
@@ -1,5 +1,7 @@
package testbuilder
+import util._
+
object tap {
def result (cond: Boolean, num: Int, desc: String): String =
result(cond, num, Some(desc))
@@ -14,8 +16,13 @@ object tap {
def comment (message: String): String =
"# " + message
- def plan (num: Int) =
- "1.." + num
+ def plan (plan: Plan): String =
+ Seq(
+ Some("1.." + plan.plan),
+ (if (plan.skipAll || plan.message.isDefined) Some("#") else None),
+ (if (plan.skipAll) Some("SKIP") else None),
+ plan.message
+ ).flatMap(x => x).mkString(" ")
def bailOut (message: String): String =
bailOut(Some(message))
diff --git a/src/main/scala/testbuilder/util.scala b/src/main/scala/testbuilder/util.scala
new file mode 100644
index 0000000..186954e
--- /dev/null
+++ b/src/main/scala/testbuilder/util.scala
@@ -0,0 +1,32 @@
+package testbuilder.util
+
+trait Plan {
+ val plan: Int
+ val skipAll: Boolean
+ val message: Option[String]
+}
+
+case class NumericPlan (
+ override val plan: Int,
+ override val message: Option[String] = None
+) extends Plan {
+ override val skipAll = false
+
+ def this (plan: Int, message: String) =
+ this(plan, Some(message))
+}
+
+case class SkipAll (
+ override val message: Option[String]
+) extends Plan {
+ override val plan = 0
+ override val skipAll = true
+}
+
+object SkipAll {
+ def apply (reason: String) = new SkipAll(Some(reason))
+ def apply () = new SkipAll(None)
+}
+
+case class BailOutException (val message: String)
+ extends RuntimeException(message)
diff --git a/src/test/scala/basic.scala b/src/test/scala/basic.scala
index 30db4dc..5ee863e 100644
--- a/src/test/scala/basic.scala
+++ b/src/test/scala/basic.scala
@@ -107,4 +107,24 @@ class Basic extends FunSuite {
assert(output.toString === expected)
}
+
+ test ("skip all") {
+ val output = new ByteArrayOutputStream
+ val builder = new Builder(SkipAll(), output)
+
+ val expected =
+ "1..0 # SKIP\n"
+
+ assert(output.toString === expected)
+ }
+
+ test ("skip all with reason") {
+ val output = new ByteArrayOutputStream
+ val builder = new Builder(SkipAll("foo bar"), output)
+
+ val expected =
+ "1..0 # SKIP foo bar\n"
+
+ assert(output.toString === expected)
+ }
}