aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-02-24 04:08:57 -0600
committerJesse Luehrs <doy@tozt.net>2013-02-24 04:08:57 -0600
commit5293e6ecfc80b9ce6c5f030527f132048f2c95bd (patch)
tree7bf8f241d0e556e165fe2a1648b6e1daa01382ea
parentc761daa2d35879f74333847a122941c3573c8563 (diff)
downloadscala-test-more-5293e6ecfc80b9ce6c5f030527f132048f2c95bd.tar.gz
scala-test-more-5293e6ecfc80b9ce6c5f030527f132048f2c95bd.zip
allow running external programs as tap producers
-rw-r--r--perl/test.t9
-rw-r--r--src/main/scala/org/perl8/test/ExternalTest.scala41
-rw-r--r--src/test/scala/org/perl8/test/ExternalTestTest.scala5
3 files changed, 55 insertions, 0 deletions
diff --git a/perl/test.t b/perl/test.t
new file mode 100644
index 0000000..5dd36ae
--- /dev/null
+++ b/perl/test.t
@@ -0,0 +1,9 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+
+ok(0);
+is("foo", "foo", "is foo foo?");
+
+done_testing;
diff --git a/src/main/scala/org/perl8/test/ExternalTest.scala b/src/main/scala/org/perl8/test/ExternalTest.scala
new file mode 100644
index 0000000..a58fb33
--- /dev/null
+++ b/src/main/scala/org/perl8/test/ExternalTest.scala
@@ -0,0 +1,41 @@
+package org.perl8.test
+
+import scala.concurrent.Await
+import scala.concurrent.duration.Duration
+import scala.concurrent.ExecutionContext.Implicits.global
+import scala.concurrent.Future
+import scala.concurrent.Future._
+import scala.annotation.tailrec
+
+class ExternalTest (cmdLine: Seq[String]) extends Test {
+ def run {
+ val processBuilder = new ProcessBuilder(cmdLine: _*)
+ val process = processBuilder.start
+
+ val streams = Seq(
+ Console.out -> process.getInputStream,
+ Console.err -> process.getErrorStream
+ )
+
+ val listeners = streams.map { case (out, in) =>
+ Future {
+ val buf = new Array[Byte](1024)
+
+ @tailrec
+ def read {
+ val bytes = in.read(buf)
+ if (bytes >= 0) {
+ out.print(new String(buf.take(bytes)))
+ read
+ }
+ }
+
+ read
+ true
+ }
+ }
+
+ process.waitFor
+ Await.ready(Future.sequence(listeners), Duration.Inf)
+ }
+}
diff --git a/src/test/scala/org/perl8/test/ExternalTestTest.scala b/src/test/scala/org/perl8/test/ExternalTestTest.scala
new file mode 100644
index 0000000..a11f63e
--- /dev/null
+++ b/src/test/scala/org/perl8/test/ExternalTestTest.scala
@@ -0,0 +1,5 @@
+package org.perl8.test
+
+class ExternalTestTest extends ExternalTest(
+ Seq("perl", "perl/test.t")
+)