aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/scala/com/iinteractive/test/tap
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/com/iinteractive/test/tap')
-rw-r--r--src/test/scala/com/iinteractive/test/tap/ParserTest.scala127
-rw-r--r--src/test/scala/com/iinteractive/test/tap/TestBuilderTest.scala241
2 files changed, 368 insertions, 0 deletions
diff --git a/src/test/scala/com/iinteractive/test/tap/ParserTest.scala b/src/test/scala/com/iinteractive/test/tap/ParserTest.scala
new file mode 100644
index 0000000..bb871ee
--- /dev/null
+++ b/src/test/scala/com/iinteractive/test/tap/ParserTest.scala
@@ -0,0 +1,127 @@
+package com.iinteractive.test.tap
+
+import com.iinteractive.test.{TestMore,SkipAll,NumericPlan}
+
+class ParserTest extends TestMore {
+ subtest ("basic") {
+ val tap =
+ "1..1\n" +
+ "ok 1\n"
+
+ val result = (new Parser).parse(tap)
+ is(result.plan, NumericPlan(1), "got the right plan")
+ is(result.results.map(_.passed), Seq(true), "got the right results")
+ }
+
+ subtest ("skip all") {
+ val tap =
+ "1..0 # SKIP nope\n"
+
+ val result = (new Parser).parse(tap)
+ is(result.plan, SkipAll("nope"), "got the right plan")
+ is(result.results, Nil, "got the right results")
+ }
+
+ subtest ("more complicated") {
+ val tap =
+ "# starting...\n" +
+ "ok 1 - stuff\n" +
+ "not ok 2 - does this work?\n" +
+ "not ok 3 - eventually # TODO doesn't work yet\n" +
+ "# skipping some stuff\n" +
+ "ok 4 # skip don't do this yet\n" +
+ "# finished!\n" +
+ "1..4\n" +
+ "# Looks like you failed 1 test of 4.\n"
+
+ val result = (new Parser).parse(tap)
+ is(result.plan, NumericPlan(4))
+ is(result.results.map(_.passed), Seq(true, false, false, true))
+ is(result.results.map(_.number), Seq(1, 2, 3, 4))
+ is(
+ result.results.map(_.description),
+ Seq(
+ "- stuff",
+ "- does this work?",
+ "- eventually",
+ ""
+ )
+ )
+
+ is(
+ result.results.map(_.directive),
+ Seq(
+ None,
+ None,
+ Some(TodoDirective(Some("doesn't work yet"))),
+ Some(SkipDirective(Some("don't do this yet")))
+ )
+ )
+ }
+
+ subtest ("subtests") {
+ val tap =
+ "ok 1 - not subtest\n" +
+ " ok 1 - passed\n" +
+ " not ok 2 - failed\n" +
+ " ok 3 - passed again\n" +
+ " 1..1\n" +
+ " ok 1 - sub-sub-test\n" +
+ " ok 4 - nested subtests\n" +
+ " 1..4\n" +
+ " # Looks like you failed 1 test of 4.\n" +
+ "not ok 2 - subtest\n" +
+ "1..2\n" +
+ "# Looks like you failed 1 test of 2.\n"
+
+ val result = (new Parser).parse(tap)
+ is(result.plan, NumericPlan(2))
+ is(result.results.map(_.passed), Seq(true, false))
+ is(result.results.map(_.number), Seq(1, 2))
+ is(
+ result.results.map(_.description),
+ Seq(
+ "- not subtest",
+ "- subtest"
+ )
+ )
+ is(result.results.map(_.directive), Seq(None, None))
+
+ is(result.results(0).subtest, None)
+ ok(result.results(1).subtest.isDefined)
+
+ val subtest = result.results(1).subtest.get
+ is(subtest.plan, NumericPlan(4))
+ is(subtest.results.map(_.passed), Seq(true, false, true, true))
+ is(subtest.results.map(_.number), Seq(1, 2, 3, 4))
+ is(
+ subtest.results.map(_.description),
+ Seq(
+ "- passed",
+ "- failed",
+ "- passed again",
+ "- nested subtests"
+ )
+ )
+ is(subtest.results.map(_.directive), Seq(None, None, None, None))
+
+ is(subtest.results(0).subtest, None)
+ is(subtest.results(1).subtest, None)
+ is(subtest.results(2).subtest, None)
+ ok(subtest.results(3).subtest.isDefined)
+
+ val subsubtest = subtest.results(3).subtest.get
+ is(subsubtest.plan, NumericPlan(1))
+ is(subsubtest.results.map(_.passed), Seq(true))
+ is(subsubtest.results.map(_.number), Seq(1))
+ is(
+ subsubtest.results.map(_.description),
+ Seq(
+ "- sub-sub-test"
+ )
+ )
+ is(subsubtest.results.map(_.directive), Seq(None))
+
+ is(subsubtest.results(0).subtest, None)
+ }
+}
diff --git a/src/test/scala/com/iinteractive/test/tap/TestBuilderTest.scala b/src/test/scala/com/iinteractive/test/tap/TestBuilderTest.scala
new file mode 100644
index 0000000..bc873c8
--- /dev/null
+++ b/src/test/scala/com/iinteractive/test/tap/TestBuilderTest.scala
@@ -0,0 +1,241 @@
+package com.iinteractive.test.tap
+
+import java.io.ByteArrayOutputStream
+
+import com.iinteractive.test.{TestMore,SkipAll,BailOutException}
+
+class TestBuilderTest extends TestMore {
+ subtest ("ok") {
+ val output = new ByteArrayOutputStream
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder(4)
+ builder.ok(true, "test succeeded")
+ builder.ok(false, "test failed")
+ builder.ok(true)
+ builder.ok(false)
+ builder.doneTesting
+ }
+ }
+
+ val expected =
+ "1..4\n" +
+ "ok 1 test succeeded\n" +
+ "not ok 2 test failed\n" +
+ "ok 3\n" +
+ "not ok 4\n" +
+ "# Looks like you failed 2 tests of 4.\n"
+
+ is(output.toString, expected)
+ }
+
+ subtest ("no plan") {
+ val output = new ByteArrayOutputStream
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.ok(true, "test succeeded")
+ builder.ok(false, "test failed")
+ builder.ok(true)
+ builder.ok(false)
+ builder.doneTesting
+ }
+ }
+
+ val expected =
+ "ok 1 test succeeded\n" +
+ "not ok 2 test failed\n" +
+ "ok 3\n" +
+ "not ok 4\n" +
+ "1..4\n" +
+ "# Looks like you failed 2 tests of 4.\n"
+
+ is(output.toString, expected)
+ }
+
+ subtest ("empty") {
+ val output = new ByteArrayOutputStream
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.doneTesting
+ }
+ }
+
+ val expected =
+ "1..0\n" +
+ "# No tests run!\n"
+
+ is(output.toString, expected)
+ }
+
+ subtest ("diag") {
+ val output = new ByteArrayOutputStream
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.ok(true, "the test passes")
+ builder.ok(false, "the test passes")
+ builder.diag("got false, expected true")
+ builder.ok(true)
+ builder.diag("ending\nnow")
+ builder.doneTesting
+ }
+ }
+
+ val expected =
+ "ok 1 the test passes\n" +
+ "not ok 2 the test passes\n" +
+ "# got false, expected true\n" +
+ "ok 3\n" +
+ "# ending\n" +
+ "# now\n" +
+ "1..3\n" +
+ "# Looks like you failed 1 test of 3.\n"
+
+ is(output.toString, expected)
+ }
+
+ subtest ("is passing") {
+ val output = new ByteArrayOutputStream
+ val oldOut = Console.out
+ val oldErr = Console.err
+
+ is(
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.doneTesting
+ }
+ },
+ false
+ )
+
+ is(
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.ok(true)
+ builder.doneTesting
+ }
+ },
+ true
+ )
+
+ is(
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.ok(true)
+ builder.ok(false)
+ builder.doneTesting
+ }
+ },
+ false
+ )
+
+ is(
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.ok(true)
+ builder.ok(false)
+ builder.ok(true)
+ builder.doneTesting
+ }
+ },
+ false
+ )
+ }
+
+ subtest ("bail out") {
+ val output = new ByteArrayOutputStream
+ val oldOut = Console.out
+ val oldErr = Console.err
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.ok(true)
+ try {
+ builder.bailOut("oh no!")
+ Console.withOut(oldOut) {
+ Console.withErr(oldErr) {
+ fail
+ }
+ }
+ }
+ catch {
+ case e: BailOutException => Console.withOut(oldOut) {
+ Console.withErr(oldErr) {
+ is(e.message, "Bail out! oh no!")
+ }
+ }
+ case _: Throwable => Console.withOut(oldOut) {
+ Console.withErr(oldErr) {
+ fail
+ }
+ }
+ }
+ }
+ }
+
+ val expected =
+ "ok 1\n" +
+ "Bail out! oh no!\n"
+
+ is(output.toString, expected)
+ }
+
+ subtest ("skip all") {
+ val output = new ByteArrayOutputStream
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder(SkipAll("foo bar"))
+ }
+ }
+
+ val expected =
+ "1..0 # SKIP foo bar\n"
+
+ is(output.toString, expected)
+ }
+
+ subtest ("skip") {
+ val output = new ByteArrayOutputStream
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.ok(false)
+ builder.skip("not now")
+ builder.doneTesting
+ }
+ }
+
+ val expected =
+ "not ok 1\n" +
+ "ok 2 # skip not now\n" +
+ "1..2\n" +
+ "# Looks like you failed 1 test of 2.\n"
+
+ is(output.toString, expected)
+ }
+
+ subtest ("todo") {
+ val output = new ByteArrayOutputStream
+ Console.withOut(output) {
+ Console.withErr(output) {
+ val builder = new TestBuilder
+ builder.todo("not working yet", false, "do a thing")
+ builder.todo("is it?", true)
+ builder.doneTesting
+ }
+ }
+
+ val expected =
+ "not ok 1 do a thing # TODO not working yet\n" +
+ "ok 2 # TODO is it?\n" +
+ "1..2\n"
+
+ is(output.toString, expected)
+ }
+}