aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-02-21 13:27:40 -0600
committerJesse Luehrs <doy@tozt.net>2013-02-21 15:02:01 -0600
commitb8012cce2cf68d2f7c94a42dba4c0f5074e55c1d (patch)
tree117bbdaa28fb0d38c9d83bd8b089ead139557aaa
parent22a7e25c0bca5f08d9d8c9df8793238750d091a3 (diff)
downloadscala-test-more-b8012cce2cf68d2f7c94a42dba4c0f5074e55c1d.tar.gz
scala-test-more-b8012cce2cf68d2f7c94a42dba4c0f5074e55c1d.zip
start fleshing out the harness
-rw-r--r--src/main/scala/org/perl8/test/harness/MultiTestReporter.scala12
-rw-r--r--src/main/scala/org/perl8/test/harness/Reporter.scala13
-rw-r--r--src/main/scala/org/perl8/test/harness/TAPReporter.scala8
-rw-r--r--src/main/scala/org/perl8/test/harness/TestHarness.scala9
-rw-r--r--src/main/scala/org/perl8/test/harness/Utils.scala21
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]
+ }
+}