aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-02-20 13:47:59 -0600
committerJesse Luehrs <doy@tozt.net>2013-02-20 13:47:59 -0600
commitda958e4965a49a574d34d90abae296006795c0b8 (patch)
treefe0e6187a8f3e5929cba2f16f443b5e89f6711de
parent3eff21ad575a5c4eb9c762869eec0629a700eb9b (diff)
downloadscala-test-more-da958e4965a49a574d34d90abae296006795c0b8.tar.gz
scala-test-more-da958e4965a49a574d34d90abae296006795c0b8.zip
basic sketch of Test::Harness and Test::More
-rw-r--r--src/main/scala/org/perl8/test/Test.scala5
-rw-r--r--src/main/scala/org/perl8/test/TestHarness.scala11
-rw-r--r--src/main/scala/org/perl8/test/TestMore.scala43
-rw-r--r--src/main/scala/org/perl8/test/builder/util.scala6
4 files changed, 65 insertions, 0 deletions
diff --git a/src/main/scala/org/perl8/test/Test.scala b/src/main/scala/org/perl8/test/Test.scala
new file mode 100644
index 0000000..ec11fab
--- /dev/null
+++ b/src/main/scala/org/perl8/test/Test.scala
@@ -0,0 +1,5 @@
+package org.perl8.test
+
+trait Test {
+ def run (): Int
+}
diff --git a/src/main/scala/org/perl8/test/TestHarness.scala b/src/main/scala/org/perl8/test/TestHarness.scala
new file mode 100644
index 0000000..ec2aafa
--- /dev/null
+++ b/src/main/scala/org/perl8/test/TestHarness.scala
@@ -0,0 +1,11 @@
+package org.perl8.test
+
+object TestHarness {
+ def main (args: Array[String]) {
+ val className = args(0)
+ val loader = classOf[Test].getClassLoader
+ val test = loader.loadClass(className).newInstance.asInstanceOf[Test]
+ val exitCode = test.run
+ sys.exit(exitCode)
+ }
+}
diff --git a/src/main/scala/org/perl8/test/TestMore.scala b/src/main/scala/org/perl8/test/TestMore.scala
new file mode 100644
index 0000000..ce85cc2
--- /dev/null
+++ b/src/main/scala/org/perl8/test/TestMore.scala
@@ -0,0 +1,43 @@
+package org.perl8.test
+
+import org.perl8.test.builder._
+import org.perl8.test.builder.util._
+
+import java.io.OutputStream
+
+class TestMore (
+ plan: Option[Plan],
+ out: OutputStream
+) extends Test with DelayedInit {
+ def this (plan: Plan, out: OutputStream = System.out) =
+ this(Some(plan), out)
+
+ def this (out: OutputStream = System.out) =
+ this(None, out)
+
+ def delayedInit (body: => Unit) {
+ builder = new Builder(plan, out, 0, NoMessage)
+ testBody = () => body
+ }
+
+ def run (): Int = {
+ testBody()
+ builder.doneTesting
+ if (builder.isPassing) 0 else 1
+ }
+
+ def ok (cond: Boolean, desc: Message = NoMessage): Boolean = {
+ builder.ok(cond, desc.map(d => "- " + d))
+ if (!cond) {
+ val caller = Thread.currentThread.getStackTrace()(0)
+ builder.diag(" Failed test '" + desc + "'")
+ builder.diag(
+ " at " + caller.getFileName + " line " + caller.getLineNumber + "."
+ )
+ }
+ cond
+ }
+
+ private var builder: Builder = _
+ private var testBody: () => Unit = _
+}
diff --git a/src/main/scala/org/perl8/test/builder/util.scala b/src/main/scala/org/perl8/test/builder/util.scala
index 9910070..1f45618 100644
--- a/src/main/scala/org/perl8/test/builder/util.scala
+++ b/src/main/scala/org/perl8/test/builder/util.scala
@@ -41,6 +41,12 @@ object util {
case NoMessage => None
}
+ implicit def optionToMessage (option: Option[String]): Message =
+ option match {
+ case Some(x) => HasMessage(x)
+ case None => NoMessage
+ }
+
case class BailOutException (val message: String)
extends RuntimeException(message)
}