From 3f78bee128bd6a478bef6a66c5574f77a2d6dd74 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 30 Jan 2013 17:08:42 +0100 Subject: SI-7029 - Makes sure that uncaught exceptions are propagated to the UEH for the global ExecutionContext --- test/files/jvm/future-spec/FutureTests.scala | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'test/files') diff --git a/test/files/jvm/future-spec/FutureTests.scala b/test/files/jvm/future-spec/FutureTests.scala index 8674be168c..ae2e72bf96 100644 --- a/test/files/jvm/future-spec/FutureTests.scala +++ b/test/files/jvm/future-spec/FutureTests.scala @@ -74,6 +74,30 @@ object FutureTests extends MinimalScalaTest { "A future with global ExecutionContext" should { import ExecutionContext.Implicits._ + "output uncaught exceptions" in { + import java.io.{ ByteArrayOutputStream, PrintStream } + + val baos = new ByteArrayOutputStream(1 << 16) { def isEmpty: Boolean = count == 0 } + val tmpErr = new PrintStream(baos) + + def assertPrintedToErr(t: Throwable): Unit = { + t.printStackTrace(tmpErr) + tmpErr.flush() + val expected = baos.toByteArray.toIndexedSeq + baos.reset() + val f = Future(throw t) + val d = Deadline.now + 5.seconds + while(d.hasTimeLeft && baos.isEmpty) Thread.sleep(10) + baos.toByteArray.toIndexedSeq mustBe (expected) + } + + val oldErr = System.err + System.setErr(tmpErr) + try { + assertPrintedToErr(new NotImplementedError("foo")) + } finally System.setErr(oldErr) + } + "compose with for-comprehensions" in { def async(x: Int) = future { (x * 2).toString } val future0 = future[Any] { -- cgit v1.2.3