diff options
-rw-r--r-- | src/main/scala/testbuilder.scala | 22 | ||||
-rw-r--r-- | src/main/scala/testbuilder/package.scala | 13 | ||||
-rw-r--r-- | src/main/scala/testbuilder/tap.scala | 11 | ||||
-rw-r--r-- | src/main/scala/testbuilder/util.scala | 32 | ||||
-rw-r--r-- | src/test/scala/basic.scala | 20 |
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) + } } |