diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-02-24 04:08:57 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-02-24 04:08:57 -0600 |
commit | 5293e6ecfc80b9ce6c5f030527f132048f2c95bd (patch) | |
tree | 7bf8f241d0e556e165fe2a1648b6e1daa01382ea | |
parent | c761daa2d35879f74333847a122941c3573c8563 (diff) | |
download | scala-test-more-5293e6ecfc80b9ce6c5f030527f132048f2c95bd.tar.gz scala-test-more-5293e6ecfc80b9ce6c5f030527f132048f2c95bd.zip |
allow running external programs as tap producers
-rw-r--r-- | perl/test.t | 9 | ||||
-rw-r--r-- | src/main/scala/org/perl8/test/ExternalTest.scala | 41 | ||||
-rw-r--r-- | src/test/scala/org/perl8/test/ExternalTestTest.scala | 5 |
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") +) |