diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/foo | 0 | ||||
-rw-r--r-- | compiler/test/dotty/tools/dotc/ParallelTestTests.scala | 3 | ||||
-rw-r--r-- | compiler/test/dotty/tools/dotc/ParallelTesting.scala | 23 |
3 files changed, 22 insertions, 4 deletions
diff --git a/compiler/foo b/compiler/foo new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/compiler/foo diff --git a/compiler/test/dotty/tools/dotc/ParallelTestTests.scala b/compiler/test/dotty/tools/dotc/ParallelTestTests.scala index 9964be036..cfb108ea7 100644 --- a/compiler/test/dotty/tools/dotc/ParallelTestTests.scala +++ b/compiler/test/dotty/tools/dotc/ParallelTestTests.scala @@ -52,4 +52,7 @@ class ParallelTestTests extends ParallelTesting { @Test def runStackOverflow: Unit = compileFile("../tests/partest-test/stackOverflow.scala", defaultOptions).expectFailure.checkRuns() + + @Test def runOutRedirects: Unit = + compileFile("../tests/partest-test/i2147.scala", defaultOptions).expectFailure.checkRuns() } diff --git a/compiler/test/dotty/tools/dotc/ParallelTesting.scala b/compiler/test/dotty/tools/dotc/ParallelTesting.scala index 30679de9e..06105b043 100644 --- a/compiler/test/dotty/tools/dotc/ParallelTesting.scala +++ b/compiler/test/dotty/tools/dotc/ParallelTesting.scala @@ -28,7 +28,7 @@ import dotc.util.DiffUtil * using this, you should be running your JUnit tests **sequentially**, as the * test suite itself runs with a high level of concurrency. */ -trait ParallelTesting { +trait ParallelTesting { self => import ParallelTesting._ import ParallelSummaryReport._ @@ -399,18 +399,33 @@ trait ParallelTesting { .takeWhile(_.getMethodName != "invoke0") .mkString(" ", "\n ", "") - import java.io.ByteArrayOutputStream + import java.io.{ ByteArrayOutputStream, PrintStream } import java.net.{ URL, URLClassLoader } val printStream = new ByteArrayOutputStream + val oldOut = System.out + val oldErr = System.out + try { // Do classloading magic and running here: val ucl = new URLClassLoader(Array(dir.toURI.toURL)) val cls = ucl.loadClass("Test") val meth = cls.getMethod("main", classOf[Array[String]]) - Console.withOut(printStream) { - meth.invoke(null, Array("jvm")) // partest passes at least "jvm" as an arg + self.synchronized { + try { + val ps = new PrintStream(printStream) + System.setOut(ps) + System.setErr(ps) + Console.withOut(printStream) { + Console.withErr(printStream) { + meth.invoke(null, Array("jvm")) // partest passes at least "jvm" as an arg + } + } + } finally { + System.setOut(oldOut) + System.setErr(oldErr) + } } } catch { |