summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraleksandar <aleksandar@lampmac14.epfl.ch>2011-12-13 15:26:12 +0100
committeraleksandar <aleksandar@lampmac14.epfl.ch>2011-12-13 15:26:12 +0100
commitc3477895c08397234a4a103911a4b55517a440b6 (patch)
tree7179e8ffc916937180711c155b51cb5ec29b63b8
parent65b27aa3ab58b39a3b68999f4c6b9d3af7a81f85 (diff)
downloadscala-c3477895c08397234a4a103911a4b55517a440b6.tar.gz
scala-c3477895c08397234a4a103911a4b55517a440b6.tar.bz2
scala-c3477895c08397234a4a103911a4b55517a440b6.zip
Add test cases for blocking. Fix in the failed projection.
-rw-r--r--src/library/scala/concurrent/Future.scala14
-rw-r--r--src/library/scala/concurrent/package.scala2
-rw-r--r--test/files/jvm/scala-concurrent-tck.scala30
3 files changed, 37 insertions, 9 deletions
diff --git a/src/library/scala/concurrent/Future.scala b/src/library/scala/concurrent/Future.scala
index 9937d43b23..36126056c9 100644
--- a/src/library/scala/concurrent/Future.scala
+++ b/src/library/scala/concurrent/Future.scala
@@ -161,11 +161,15 @@ self =>
}
this
}
- def await(timeout: Timeout)(implicit canblock: CanBlock) = try {
- val res = self.await(timeout)
- throw noSuchElem(res)
- } catch {
- case t: Throwable => t
+ def await(timeout: Timeout)(implicit canblock: CanBlock): Throwable = {
+ var t: Throwable = null
+ try {
+ val res = self.await(timeout)
+ t = noSuchElem(res)
+ } catch {
+ case t: Throwable => return t
+ }
+ throw t
}
private def noSuchElem(v: T) =
new NoSuchElementException("Future.failed not completed with a throwable. Instead completed with: " + v)
diff --git a/src/library/scala/concurrent/package.scala b/src/library/scala/concurrent/package.scala
index d9923d6d56..0cdb52fb69 100644
--- a/src/library/scala/concurrent/package.scala
+++ b/src/library/scala/concurrent/package.scala
@@ -33,7 +33,7 @@ package object concurrent {
*/
lazy val scheduler =
new default.SchedulerImpl
-
+
private[concurrent] def currentExecutionContext: ThreadLocal[ExecutionContext] = new ThreadLocal[ExecutionContext] {
override protected def initialValue = null
}
diff --git a/test/files/jvm/scala-concurrent-tck.scala b/test/files/jvm/scala-concurrent-tck.scala
index 774d4236b7..ffe23de756 100644
--- a/test/files/jvm/scala-concurrent-tck.scala
+++ b/test/files/jvm/scala-concurrent-tck.scala
@@ -268,7 +268,7 @@ trait FutureProjections extends TestBase {
done =>
val f = future { 0 }
try {
- println(await(0, f.failed))
+ await(0, f.failed)
assert(false)
} catch {
case nsee: NoSuchElementException => done()
@@ -280,14 +280,38 @@ trait FutureProjections extends TestBase {
testFailedSuccessOnComplete()
testFailedSuccessOnFailure()
testFailedFailureAwait()
- //testFailedSuccessAwait()
+ testFailedSuccessAwait()
}
trait Blocking extends TestBase {
- // TODO
+ def testAwaitSuccess(): Unit = once {
+ done =>
+ val f = future { 0 }
+ await(0, f)
+ done()
+ }
+
+ def testAwaitFailure(): Unit = once {
+ done =>
+ val cause = new RuntimeException
+ val f = future {
+ throw cause
+ }
+ try {
+ await(0, f)
+ assert(false)
+ } catch {
+ case t =>
+ assert(t == cause)
+ done()
+ }
+ }
+
+ testAwaitSuccess()
+ testAwaitFailure()
}