aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/scala/async/run/hygiene/Hygiene.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-09 18:33:13 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-09 18:33:13 +0100
commit6226c3583b742e0576e5c598fba4e64622c99165 (patch)
treee54878ce719641166bb13c36bd9ec2f1d5047489 /src/test/scala/scala/async/run/hygiene/Hygiene.scala
parent566102b23cd08f2b6af60121feb28013288a0951 (diff)
downloadscala-async-6226c3583b742e0576e5c598fba4e64622c99165.tar.gz
scala-async-6226c3583b742e0576e5c598fba4e64622c99165.tar.bz2
scala-async-6226c3583b742e0576e5c598fba4e64622c99165.zip
Avoid hygiene problems by suffixing result/result/state.
Perhaps we should freshen them, but that will be a little awkward in our reify block.
Diffstat (limited to 'src/test/scala/scala/async/run/hygiene/Hygiene.scala')
-rw-r--r--src/test/scala/scala/async/run/hygiene/Hygiene.scala52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/test/scala/scala/async/run/hygiene/Hygiene.scala b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
new file mode 100644
index 0000000..0cc68a4
--- /dev/null
+++ b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
@@ -0,0 +1,52 @@
+/**
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
+package scala.async
+package run
+package hygiene
+
+import language.{reflectiveCalls, postfixOps}
+import concurrent._
+import scala.concurrent.{Future, ExecutionContext, future, Await}
+import scala.concurrent.duration._
+import scala.async.Async.{async, await}
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+
+class HygieneClass {
+
+ import ExecutionContext.Implicits.global
+
+ def m1(x: Int): Future[Int] = future {
+ x + 2
+ }
+
+ def m2(y: Int) = {
+ val state = 23
+ val result: Any = "result"
+ def resume(): Any = "resume"
+ async {
+ val f1 = m1(state)
+ val x = await(f1)
+ val y = await(future(result))
+ val z = await(future(resume()))
+ (x, y, z)
+ }
+ }
+}
+
+@RunWith(classOf[JUnit4])
+class HygieneSpec {
+
+ @Test def `is hygenic`() {
+ val o = new HygieneClass
+ val fut = o.m2(10)
+ val res = Await.result(fut, 2 seconds)
+ res._1 mustBe (25)
+ res._2 mustBe ("result")
+ res._3 mustBe ("resume")
+ }
+}