diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-02-21 13:27:40 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-02-21 15:02:01 -0600 |
commit | b8012cce2cf68d2f7c94a42dba4c0f5074e55c1d (patch) | |
tree | 117bbdaa28fb0d38c9d83bd8b089ead139557aaa /src | |
parent | 22a7e25c0bca5f08d9d8c9df8793238750d091a3 (diff) | |
download | scala-test-more-b8012cce2cf68d2f7c94a42dba4c0f5074e55c1d.tar.gz scala-test-more-b8012cce2cf68d2f7c94a42dba4c0f5074e55c1d.zip |
start fleshing out the harness
Diffstat (limited to 'src')
5 files changed, 59 insertions, 4 deletions
diff --git a/src/main/scala/org/perl8/test/harness/MultiTestReporter.scala b/src/main/scala/org/perl8/test/harness/MultiTestReporter.scala new file mode 100644 index 0000000..9f128d6 --- /dev/null +++ b/src/main/scala/org/perl8/test/harness/MultiTestReporter.scala @@ -0,0 +1,12 @@ +package org.perl8.test.harness + +import org.perl8.test.Test +import Utils._ + +trait MultiTestReporter extends Reporter { + def run (tests: Array[Test]): Int = + tests.map(run).sum min 255 + + def run (testNames: Array[String]): Int = + run(testNames.map(newInstance[Test])) +} diff --git a/src/main/scala/org/perl8/test/harness/Reporter.scala b/src/main/scala/org/perl8/test/harness/Reporter.scala new file mode 100644 index 0000000..3bfb874 --- /dev/null +++ b/src/main/scala/org/perl8/test/harness/Reporter.scala @@ -0,0 +1,13 @@ +package org.perl8.test.harness + +import java.io.OutputStream + +import org.perl8.test.Test +import Utils._ + +trait Reporter { + def run (test: Test): Int + + def run (testName: String): Int = + run(newInstance[Test](testName)) +} diff --git a/src/main/scala/org/perl8/test/harness/TAPReporter.scala b/src/main/scala/org/perl8/test/harness/TAPReporter.scala new file mode 100644 index 0000000..94d0b8a --- /dev/null +++ b/src/main/scala/org/perl8/test/harness/TAPReporter.scala @@ -0,0 +1,8 @@ +package org.perl8.test.harness + +import org.perl8.test.Test + +class TAPReporter extends Reporter { + def run (test: Test): Int = + test.run +} diff --git a/src/main/scala/org/perl8/test/harness/TestHarness.scala b/src/main/scala/org/perl8/test/harness/TestHarness.scala index 2d152d8..2ca33c6 100644 --- a/src/main/scala/org/perl8/test/harness/TestHarness.scala +++ b/src/main/scala/org/perl8/test/harness/TestHarness.scala @@ -1,13 +1,14 @@ package org.perl8.test.harness import org.perl8.test.Test +import Utils._ 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 + val reporterName = args(0) + val testName = args(1) + val reporter = newInstance[Reporter](reporterName) + val exitCode = reporter.run(testName) sys.exit(exitCode) } } diff --git a/src/main/scala/org/perl8/test/harness/Utils.scala b/src/main/scala/org/perl8/test/harness/Utils.scala new file mode 100644 index 0000000..acde332 --- /dev/null +++ b/src/main/scala/org/perl8/test/harness/Utils.scala @@ -0,0 +1,21 @@ +package org.perl8.test.harness + +import scala.reflect.{ClassTag,classTag} + +object Utils { + def loadClass[T: ClassTag] (className: String): Class[_] = + classTag[T].runtimeClass.getClassLoader.loadClass(className) + + def newInstance[T: ClassTag] (className: String): T = + loadClass[T](className).newInstance.asInstanceOf[T] + + def newInstance[T: ClassTag, U <: AnyRef: ClassTag] ( + className: String, + arg: U + ): T = { + val classObj = loadClass[T](className) + val argClassObj = classTag[U].runtimeClass + val constructor = classObj.getConstructor(argClassObj) + constructor.newInstance(arg).asInstanceOf[T] + } +} |