diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-02-20 13:47:59 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-02-20 13:47:59 -0600 |
commit | da958e4965a49a574d34d90abae296006795c0b8 (patch) | |
tree | fe0e6187a8f3e5929cba2f16f443b5e89f6711de | |
parent | 3eff21ad575a5c4eb9c762869eec0629a700eb9b (diff) | |
download | scala-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.scala | 5 | ||||
-rw-r--r-- | src/main/scala/org/perl8/test/TestHarness.scala | 11 | ||||
-rw-r--r-- | src/main/scala/org/perl8/test/TestMore.scala | 43 | ||||
-rw-r--r-- | src/main/scala/org/perl8/test/builder/util.scala | 6 |
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) } |