summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2013-06-27 10:23:35 +0200
committerPhilipp Haller <hallerp@gmail.com>2013-06-27 10:23:35 +0200
commit092d75e2573245d6fd2500b86ce0a89f7384b3ba (patch)
treeb5543a1e77b0bf2278b5a11a25179e5447471b6a
parentcbd2e54cfa47f685d1210e32bd0ccba27371fac3 (diff)
downloadscala-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.scala2
-rw-r--r--test/files/jvm/scala-concurrent-tck.scala21
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)
}