diff options
author | James Iry <jamesiry@gmail.com> | 2013-01-17 11:46:10 -0800 |
---|---|---|
committer | James Iry <jamesiry@gmail.com> | 2013-01-22 12:27:12 -0800 |
commit | 1dab5bf91361b8d6073db05ba1dff1bc01a83220 (patch) | |
tree | ea048566662a8a572cad5f49da171dc902a2913e /src | |
parent | e12a5b88acd80a41574d51c88a7776f99c3d2580 (diff) | |
download | scala-1dab5bf91361b8d6073db05ba1dff1bc01a83220.tar.gz scala-1dab5bf91361b8d6073db05ba1dff1bc01a83220.tar.bz2 scala-1dab5bf91361b8d6073db05ba1dff1bc01a83220.zip |
SI-6987 Tests fsc verbose output
This commit includes a test of fsc's verbose output. In order for it
to work, CompileServer's main method had to be modified to remove a
sys exit 0 at the end. It was redundant and made testing a bit harder.
In order to prevent a race condition between server and client start
up, this commit also adds a server callback that decrements a
CountDownLatch that the main testing thread waits for.
Finally, the server had to be modified to use Console.withErr
and Console.withOut instead of mutating the global System.err
and System.out variables. Otherwise the test would be unreliable.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/CompileServer.scala | 41 | ||||
-rw-r--r-- | src/compiler/scala/tools/util/SocketServer.scala | 2 |
2 files changed, 28 insertions, 15 deletions
diff --git a/src/compiler/scala/tools/nsc/CompileServer.scala b/src/compiler/scala/tools/nsc/CompileServer.scala index 74118d1e20..7a0a072bb8 100644 --- a/src/compiler/scala/tools/nsc/CompileServer.scala +++ b/src/compiler/scala/tools/nsc/CompileServer.scala @@ -174,11 +174,22 @@ object CompileServer extends StandardCompileServer { /** A directory holding redirected output */ private lazy val redirectDir = (compileSocket.tmpDir / "output-redirects").createDirectory() - private def redirect(setter: PrintStream => Unit, filename: String) { - setter(new PrintStream((redirectDir / filename).createFile().bufferedOutput())) - } - - def main(args: Array[String]) { + private def createRedirect(filename: String) = + new PrintStream((redirectDir / filename).createFile().bufferedOutput()) + + def main(args: Array[String]) = + execute(() => (), args) + + /** + * Used for internal testing. The callback is called upon + * server start, notifying the caller that the server is + * ready to run. WARNING: the callback runs in the + * server's thread, blocking the server from doing any work + * until the callback is finished. Callbacks should be kept + * simple and clients should not try to interact with the + * server while the callback is processing. + */ + def execute(startupCallback : () => Unit, args: Array[String]) { val debug = args contains "-v" if (debug) { @@ -186,14 +197,16 @@ object CompileServer extends StandardCompileServer { echo("Redirect dir is " + redirectDir) } - redirect(System.setOut, "scala-compile-server-out.log") - redirect(System.setErr, "scala-compile-server-err.log") - System.err.println("...starting server on socket "+port+"...") - System.err.flush() - compileSocket setPort port - run() - - compileSocket deletePort port - sys exit 0 + Console.withErr(createRedirect("scala-compile-server-err.log")) { + Console.withOut(createRedirect("scala-compile-server-out.log")) { + Console.err.println("...starting server on socket "+port+"...") + Console.err.flush() + compileSocket setPort port + startupCallback() + run() + + compileSocket deletePort port + } + } } } diff --git a/src/compiler/scala/tools/util/SocketServer.scala b/src/compiler/scala/tools/util/SocketServer.scala index 21775a01d1..1b06ce2ff2 100644 --- a/src/compiler/scala/tools/util/SocketServer.scala +++ b/src/compiler/scala/tools/util/SocketServer.scala @@ -17,7 +17,7 @@ trait CompileOutputCommon { def info(msg: String) = if (verbose) echo(msg) def echo(msg: String) = {Console println msg; Console.flush} - def warn(msg: String) = System.err println msg + def warn(msg: String) = {Console.err println msg; Console.flush} def fatal(msg: String) = { warn(msg) ; sys.exit(1) } } |