aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-02-27 19:19:13 -0600
committerJesse Luehrs <doy@tozt.net>2013-02-27 19:19:13 -0600
commit90ca99b744e638b569d8a6bba2cc076c9a419cd2 (patch)
tree6e73ce4886467f0c508e1477746c74851d10b7ce
parente669339dc394cfa42ae7d7ccae291328dc64e5d8 (diff)
downloadscala-test-more-90ca99b744e638b569d8a6bba2cc076c9a419cd2.tar.gz
scala-test-more-90ca99b744e638b569d8a6bba2cc076c9a419cd2.zip
add a leading newline to diags when running under a non-raw reporter
makes things easier to read this way, when diags are printed to stderr interspersed with test summary information
-rw-r--r--src/main/scala/org/perl8/test/ExternalTest.scala2
-rw-r--r--src/main/scala/org/perl8/test/Test.scala8
-rw-r--r--src/main/scala/org/perl8/test/TestMore.scala74
-rw-r--r--src/main/scala/org/perl8/test/harness/TAPReporter.scala2
-rw-r--r--src/main/scala/org/perl8/test/tap/TestBuilder.scala17
-rw-r--r--src/test/scala/org/perl8/test/ExtensionTest.scala2
-rw-r--r--src/test/scala/org/perl8/test/TestMoreTest.scala2
7 files changed, 72 insertions, 35 deletions
diff --git a/src/main/scala/org/perl8/test/ExternalTest.scala b/src/main/scala/org/perl8/test/ExternalTest.scala
index 73016e4..89d7bbc 100644
--- a/src/main/scala/org/perl8/test/ExternalTest.scala
+++ b/src/main/scala/org/perl8/test/ExternalTest.scala
@@ -8,7 +8,7 @@ import scala.concurrent.Future._
import scala.annotation.tailrec
class ExternalTest (cmdLine: String*) extends Test {
- def run: Int = {
+ def runTests (raw: Boolean): Int = {
val processBuilder = new ProcessBuilder(cmdLine: _*)
// Ensure that if stdout and stderr are both pointing to the same place (a
diff --git a/src/main/scala/org/perl8/test/Test.scala b/src/main/scala/org/perl8/test/Test.scala
index a348871..9868174 100644
--- a/src/main/scala/org/perl8/test/Test.scala
+++ b/src/main/scala/org/perl8/test/Test.scala
@@ -6,5 +6,11 @@ trait Test {
/** Runs the test. The TAP stream will be written to Console.out and
* Console.err, so you can swap these out as required in order to parse it.
*/
- def run: Int
+ def run: Int =
+ runTests(false)
+
+ def runRaw: Int =
+ runTests(true)
+
+ protected def runTests (raw: Boolean): Int
}
diff --git a/src/main/scala/org/perl8/test/TestMore.scala b/src/main/scala/org/perl8/test/TestMore.scala
index 3872a86..3cb0cfa 100644
--- a/src/main/scala/org/perl8/test/TestMore.scala
+++ b/src/main/scala/org/perl8/test/TestMore.scala
@@ -9,23 +9,25 @@ class TestMore (plan: Option[Plan] = None) extends Test with DelayedInit {
this(Some(plan))
def delayedInit (body: => Unit) {
- todo = NoMessage
- builder = new TestBuilder(plan, "")
- testBody = () => body
+ testBody = { raw =>
+ todo = NoMessage
+ builder = new TestBuilder(plan, "", raw)
+ body
+ }
}
- def run: Int = {
+ def runTests (raw: Boolean): Int = {
if (testBody == null) {
delayedInit { }
}
- testBody()
+ testBody(raw)
builder.doneTesting
builder.exitCode
}
def ok (cond: Boolean, desc: Message = NoMessage): Boolean = {
- builder.ok(cond, desc.map(d => "- " + d), todo)
+ builderOk(cond, desc)
if (!cond) {
failed(desc)
}
@@ -33,37 +35,49 @@ class TestMore (plan: Option[Plan] = None) extends Test with DelayedInit {
}
def is[T] (got: T, expected: T, desc: Message = NoMessage): Boolean = {
- val cond = ok(got == expected, desc)
+ val cond = got == expected
+ builderOk(cond, desc)
if (!cond) {
- builder.diag(" got: '" + got + "'")
- builder.diag(" expected: '" + expected + "'")
+ val reason =
+ " got: '" + got + "'\n" +
+ " expected: '" + expected + "'\n"
+ failed(desc, reason)
}
cond
}
def isnt[T] (got: T, expected: T, desc: Message = NoMessage): Boolean = {
- val cond = ok(got != expected, desc)
+ val cond = got != expected
+ builderOk(cond, desc)
if (!cond) {
- builder.diag(" got: '" + got + "'")
- builder.diag(" expected: anything else")
+ val reason =
+ " got: '" + got + "'\n" +
+ " expected: anything else\n"
+ failed(desc, reason)
}
cond
}
def like (got: String, rx: Regex, desc: Message = NoMessage): Boolean = {
- val cond = ok(rx.findFirstIn(got).nonEmpty, desc)
+ val cond = rx.findFirstIn(got).nonEmpty
+ builderOk(cond, desc)
if (!cond) {
- builder.diag(" '" + got + "'")
- builder.diag(" doesn't match '" + rx + "'")
+ val reason =
+ " '" + got + "'\n" +
+ " doesn't match '" + rx + "'\n"
+ failed(desc, reason)
}
cond
}
def unlike (got: String, rx: Regex, desc: Message = NoMessage): Boolean = {
- val cond = ok(rx.findFirstIn(got).isEmpty, desc)
+ val cond = rx.findFirstIn(got).isEmpty
+ builderOk(cond, desc)
if (!cond) {
- builder.diag(" '" + got + "'")
- builder.diag(" matches '" + rx + "'")
+ val reason =
+ " '" + got + "'\n" +
+ " matches '" + rx + "'\n"
+ failed(desc, reason)
}
cond
}
@@ -108,7 +122,11 @@ class TestMore (plan: Option[Plan] = None) extends Test with DelayedInit {
)(body: => Unit): Boolean = {
val oldBuilder = builder
val success = try {
- builder = new TestBuilder(plan, oldBuilder.indent + " ")
+ builder = new TestBuilder(
+ plan,
+ oldBuilder.indent + " ",
+ oldBuilder.raw
+ )
body
builder.doneTesting
}
@@ -135,7 +153,15 @@ class TestMore (plan: Option[Plan] = None) extends Test with DelayedInit {
"""\$class$""".r.findFirstIn(className).nonEmpty
}
- private def failed (desc: Message) {
+ private def builderOk (cond: Boolean, desc: Message) {
+ builder.ok(cond, desc.map(d => "- " + d), todo)
+ }
+
+ private def failed (desc: Message, reason: String) {
+ failed(desc, Some(reason))
+ }
+
+ private def failed (desc: Message, reason: Option[String] = None) {
val stack = Thread.currentThread.getStackTrace.drop(1).filter { frame =>
!ignoreFrame(frame)
}
@@ -162,7 +188,7 @@ class TestMore (plan: Option[Plan] = None) extends Test with DelayedInit {
case NoMessage => " "
})
val trace = "at " + file + " line " + line + "."
- builder.diag(message + trace)
+ builder.diag(message + trace + reason.map("\n" + _).getOrElse(""))
}
// this just adds a method call with a known name to the stack trace, so
@@ -171,7 +197,7 @@ class TestMore (plan: Option[Plan] = None) extends Test with DelayedInit {
body
}
- private var todo: Message = _
- private var builder: TestBuilder = _
- private var testBody: () => Unit = _
+ private var todo: Message = _
+ private var builder: TestBuilder = _
+ private var testBody: Boolean => Unit = _
}
diff --git a/src/main/scala/org/perl8/test/harness/TAPReporter.scala b/src/main/scala/org/perl8/test/harness/TAPReporter.scala
index d6f27fd..340c0db 100644
--- a/src/main/scala/org/perl8/test/harness/TAPReporter.scala
+++ b/src/main/scala/org/perl8/test/harness/TAPReporter.scala
@@ -7,5 +7,5 @@ import org.perl8.test.Test
class TAPReporter extends Reporter {
def run (testName: String): Int =
- newInstance[Test](testName).run
+ newInstance[Test](testName).runRaw
}
diff --git a/src/main/scala/org/perl8/test/tap/TestBuilder.scala b/src/main/scala/org/perl8/test/tap/TestBuilder.scala
index 39b38c9..9f7e874 100644
--- a/src/main/scala/org/perl8/test/tap/TestBuilder.scala
+++ b/src/main/scala/org/perl8/test/tap/TestBuilder.scala
@@ -2,14 +2,14 @@ package org.perl8.test.tap
import org.perl8.test._
-class TestBuilder (plan: Option[Plan], val indent: String) {
+class TestBuilder (plan: Option[Plan], val indent: String, val raw: Boolean) {
plan.foreach(p => outLine(Producer.plan(p)))
- def this (plan: Plan, indent: String = "") =
- this(Some(plan), indent)
+ def this (plan: Plan, indent: String = "", raw: Boolean = true) =
+ this(Some(plan), indent, raw)
- def this (indent: String = "") =
- this(None, indent)
+ def this (indent: String = "", raw: Boolean = true) =
+ this(None, indent, raw)
def ok (
test: Boolean,
@@ -28,7 +28,12 @@ class TestBuilder (plan: Option[Plan], val indent: String) {
}
def diag (message: Message) {
- message.foreach(m => errLine(Producer.comment(m)))
+ message.foreach { m =>
+ if (!raw) {
+ Console.err.print("\n")
+ }
+ errLine(Producer.comment(m))
+ }
}
def note (message: Message) {
diff --git a/src/test/scala/org/perl8/test/ExtensionTest.scala b/src/test/scala/org/perl8/test/ExtensionTest.scala
index f5635c4..0d14d7a 100644
--- a/src/test/scala/org/perl8/test/ExtensionTest.scala
+++ b/src/test/scala/org/perl8/test/ExtensionTest.scala
@@ -30,7 +30,7 @@ class ExtensionTest extends TestMore {
val out = new ByteArrayOutputStream
Console.withOut(out) {
Console.withErr(out) {
- (new ExtensionTestTest).run
+ (new ExtensionTestTest).runRaw
}
}
diff --git a/src/test/scala/org/perl8/test/TestMoreTest.scala b/src/test/scala/org/perl8/test/TestMoreTest.scala
index b1af5da..5e5156d 100644
--- a/src/test/scala/org/perl8/test/TestMoreTest.scala
+++ b/src/test/scala/org/perl8/test/TestMoreTest.scala
@@ -60,7 +60,7 @@ class TestMoreTest extends TestMore {
val out = new ByteArrayOutputStream
Console.withOut(out) {
Console.withErr(out) {
- (new MyBasicTest).run
+ (new MyBasicTest).runRaw
}
}