diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2016-11-07 09:30:17 -0500 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2016-11-07 09:31:14 -0500 |
commit | d9400855a2f8539d2ca88b6f7e4731dc37a1411d (patch) | |
tree | c62a5de32e771b9e2f4c709bde74b1a0c8425089 | |
parent | 4c561daeecf9eb23e1048160d70a2d2d64f47164 (diff) | |
download | cbt-d9400855a2f8539d2ca88b6f7e4731dc37a1411d.tar.gz cbt-d9400855a2f8539d2ca88b6f7e4731dc37a1411d.tar.bz2 cbt-d9400855a2f8539d2ca88b6f7e4731dc37a1411d.zip |
Fix bug in tests that could block infinitely
-rw-r--r-- | test/test.scala | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/test/test.scala b/test/test.scala index 86ab44b..039ee6a 100644 --- a/test/test.scala +++ b/test/test.scala @@ -4,7 +4,8 @@ import java.util.concurrent.ConcurrentHashMap import java.io.File import java.nio.file._ import java.net.URL - +import scala.concurrent._ +import scala.concurrent.duration._ // micro framework object Main{ def main(_args: Array[String]): Unit = { @@ -43,13 +44,17 @@ object Main{ val pb = new ProcessBuilder( allArgs :_* ) pb.directory(cbtHome ++ ("/test/" ++ path)) val p = pb.start - val berr = new BufferedReader(new InputStreamReader(p.getErrorStream)); - val bout = new BufferedReader(new InputStreamReader(p.getInputStream)); - import collection.JavaConversions._ - val err = Stream.continually(berr.readLine()).takeWhile(_ != null).mkString("\n") - val out = Stream.continually(bout.readLine()).takeWhile(_ != null).mkString("\n") + val serr = new InputStreamReader(p.getErrorStream); + val sout = new InputStreamReader(p.getInputStream); + import scala.concurrent.ExecutionContext.Implicits.global + val err = Future(blocking(Iterator.continually(serr.read).takeWhile(_ != -1).map(_.toChar).mkString)) + val out = Future(blocking(Iterator.continually(sout.read).takeWhile(_ != -1).map(_.toChar).mkString)) p.waitFor - Result(p.exitValue == 0, out, err) + Result( + p.exitValue == 0, + Await.result( out, Duration.Inf ), + Await.result( err, Duration.Inf ) + ) } case class Result(exit0: Boolean, out: String, err: String) def assertSuccess(res: Result, msg: => String)(implicit logger: Logger) = { @@ -213,15 +218,15 @@ object Main{ { val res = task("docJar","simple-fixed-cbt") - assert( res.out endsWith "simple-fixed-cbt_2.11-0.1-javadoc.jar", res.out ) + assert( res.out endsWith "simple-fixed-cbt_2.11-0.1-javadoc.jar\n", res.out ) assert( res.err contains "model contains", res.err ) - assert( res.err endsWith "documentable templates", res.err ) + assert( res.err endsWith "documentable templates\n", res.err ) } { val res = runCbt("simple", Seq("printArgs","1","2","3")) assert(res.exit0) - assert(res.out == "1 2 3", res.out) + assert(res.out == "1 2 3\n", res.out) } { |