diff options
author | Philipp Haller <hallerp@gmail.com> | 2013-06-27 10:23:35 +0200 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2013-06-27 10:23:35 +0200 |
commit | 092d75e2573245d6fd2500b86ce0a89f7384b3ba (patch) | |
tree | b5543a1e77b0bf2278b5a11a25179e5447471b6a | |
parent | cbd2e54cfa47f685d1210e32bd0ccba27371fac3 (diff) | |
download | scala-092d75e2573245d6fd2500b86ce0a89f7384b3ba.tar.gz scala-092d75e2573245d6fd2500b86ce0a89f7384b3ba.tar.bz2 scala-092d75e2573245d6fd2500b86ce0a89f7384b3ba.zip |
SI-7616 Avoid ClassCastException in scala.concurrent.impl.ExecutionContextImpl
Adds test to scala-concurrent-tck
-rw-r--r-- | src/library/scala/concurrent/impl/ExecutionContextImpl.scala | 2 | ||||
-rw-r--r-- | test/files/jvm/scala-concurrent-tck.scala | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/library/scala/concurrent/impl/ExecutionContextImpl.scala b/src/library/scala/concurrent/impl/ExecutionContextImpl.scala index 9a03b1d5df..697b69badd 100644 --- a/src/library/scala/concurrent/impl/ExecutionContextImpl.scala +++ b/src/library/scala/concurrent/impl/ExecutionContextImpl.scala @@ -115,7 +115,7 @@ private[concurrent] object ExecutionContextImpl { def fromExecutorService(es: ExecutorService, reporter: Throwable => Unit = ExecutionContext.defaultReporter): ExecutionContextImpl with ExecutionContextExecutorService = new ExecutionContextImpl(es, reporter) with ExecutionContextExecutorService { - final def asExecutorService: ExecutorService = executor.right.asInstanceOf[ExecutorService] + final def asExecutorService: ExecutorService = executor.right.get.asInstanceOf[ExecutorService] override def execute(command: Runnable) = executor.right.get.execute(command) override def shutdown() { asExecutorService.shutdown() } override def shutdownNow() = asExecutorService.shutdownNow() diff --git a/test/files/jvm/scala-concurrent-tck.scala b/test/files/jvm/scala-concurrent-tck.scala index 7d79f20064..3988281006 100644 --- a/test/files/jvm/scala-concurrent-tck.scala +++ b/test/files/jvm/scala-concurrent-tck.scala @@ -1027,6 +1027,26 @@ trait ExecutionContextPrepare extends TestBase { testMap() } +trait ExecutorServiceExecutionContext extends TestBase { + import java.util.concurrent.Executors + import scala.concurrent.duration._ + + def testExecutorServiceEC(): Unit = + once { done => + val ec = ExecutionContext.fromExecutorService(Executors.newCachedThreadPool) + val p = Promise[Boolean]() + ec.execute(new Runnable { + def run(): Unit = p.success(true) + }) + assert(Await.result(p.future, 2.seconds)) + ec.shutdown() + assert(true) + done() + } + + testExecutorServiceEC() +} + object Test extends App with FutureCallbacks @@ -1037,6 +1057,7 @@ with BlockContexts with Exceptions with CustomExecutionContext with ExecutionContextPrepare +with ExecutorServiceExecutionContext { System.exit(0) } |