aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/scala/async
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/scala/async')
-rw-r--r--src/test/scala/scala/async/TestLatch.scala4
-rw-r--r--src/test/scala/scala/async/TestUtils.scala58
-rw-r--r--src/test/scala/scala/async/TreeInterrogation.scala37
-rw-r--r--src/test/scala/scala/async/neg/LocalClasses0Spec.scala4
-rw-r--r--src/test/scala/scala/async/neg/NakedAwait.scala67
-rw-r--r--src/test/scala/scala/async/neg/SampleNegSpec.scala4
-rw-r--r--src/test/scala/scala/async/package.scala47
-rw-r--r--src/test/scala/scala/async/run/anf/AnfTransformSpec.scala35
-rw-r--r--src/test/scala/scala/async/run/await0/Await0Spec.scala4
-rw-r--r--src/test/scala/scala/async/run/block0/AsyncSpec.scala2
-rw-r--r--src/test/scala/scala/async/run/block1/block1.scala2
-rw-r--r--src/test/scala/scala/async/run/hygiene/Hygiene.scala2
-rw-r--r--src/test/scala/scala/async/run/ifelse0/IfElse0.scala2
-rw-r--r--src/test/scala/scala/async/run/ifelse0/WhileSpec.scala67
-rw-r--r--src/test/scala/scala/async/run/ifelse1/IfElse1.scala2
-rw-r--r--src/test/scala/scala/async/run/ifelse2/ifelse2.scala2
-rw-r--r--src/test/scala/scala/async/run/ifelse3/IfElse3.scala2
-rw-r--r--src/test/scala/scala/async/run/match0/Match0.scala2
-rw-r--r--src/test/scala/scala/async/run/noawait/NoAwaitSpec.scala4
-rw-r--r--src/test/scala/scala/async/run/toughtype/ToughType.scala2
20 files changed, 278 insertions, 71 deletions
diff --git a/src/test/scala/scala/async/TestLatch.scala b/src/test/scala/scala/async/TestLatch.scala
index 676ea63..a119a43 100644
--- a/src/test/scala/scala/async/TestLatch.scala
+++ b/src/test/scala/scala/async/TestLatch.scala
@@ -1,3 +1,7 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala.async
import concurrent.{CanAwait, Awaitable}
diff --git a/src/test/scala/scala/async/TestUtils.scala b/src/test/scala/scala/async/TestUtils.scala
deleted file mode 100644
index 0ae78b8..0000000
--- a/src/test/scala/scala/async/TestUtils.scala
+++ /dev/null
@@ -1,58 +0,0 @@
-package scala.async
-
-import language.reflectiveCalls
-import language.postfixOps
-import language.implicitConversions
-
-import scala.reflect.{ClassTag, classTag}
-
-import scala.collection.mutable
-import scala.concurrent.{Future, Awaitable, CanAwait}
-import java.util.concurrent.{TimeoutException, CountDownLatch, TimeUnit}
-import scala.concurrent.duration.Duration
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import async._
-import tools.reflect.ToolBoxError
-
-
-trait TestUtils {
-
- implicit class objectops(obj: Any) {
- def mustBe(other: Any) = assert(obj == other, obj + " is not " + other)
-
- def mustEqual(other: Any) = mustBe(other)
- }
-
- implicit class stringops(text: String) {
- def mustContain(substring: String) = assert(text contains substring, text)
- }
-
- def intercept[T <: Throwable : ClassTag](body: => Any): T = {
- try {
- body
- throw new Exception(s"Exception of type ${classTag[T]} was not thrown")
- } catch {
- case t: Throwable =>
- if (classTag[T].runtimeClass != t.getClass) throw t
- else t.asInstanceOf[T]
- }
- }
-
- def eval(code: String, compileOptions: String = ""): Any = {
- val tb = mkToolbox(compileOptions)
- tb.eval(tb.parse(code))
- }
-
- def mkToolbox(compileOptions: String = "") = {
- val m = scala.reflect.runtime.currentMirror
- import scala.tools.reflect.ToolBox
- m.mkToolBox(options = compileOptions)
- }
-
- def expectError(errorSnippet: String, compileOptions: String = "", baseCompileOptions: String = "-cp target/scala-2.10/classes")(code: String) {
- intercept[ToolBoxError] {
- eval(code, compileOptions + " " + baseCompileOptions)
- }.getMessage mustContain errorSnippet
- }
-}
diff --git a/src/test/scala/scala/async/TreeInterrogation.scala b/src/test/scala/scala/async/TreeInterrogation.scala
index 9e68005..dd239a3 100644
--- a/src/test/scala/scala/async/TreeInterrogation.scala
+++ b/src/test/scala/scala/async/TreeInterrogation.scala
@@ -1,3 +1,7 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala.async
import org.junit.runner.RunWith
@@ -11,7 +15,7 @@ class TreeInterrogation {
def `a minimal set of vals are lifted to vars`() {
val cm = reflect.runtime.currentMirror
val tb = mkToolbox("-cp target/scala-2.10/classes")
- val tree = mkToolbox().parse(
+ val tree = tb.parse(
"""| import _root_.scala.async.AsyncId._
| async {
| val x = await(1)
@@ -32,6 +36,35 @@ class TreeInterrogation {
val varDefs = tree1.collect {
case ValDef(mods, name, _, _) if mods.hasFlag(Flag.MUTABLE) => name
}
- varDefs.map(_.decoded).toSet mustBe(Set("state$async", "onCompleteHandler$async", "await$1", "await$2"))
+ varDefs.map(_.decoded).toSet mustBe (Set("state$async", "onCompleteHandler$async", "await$1", "await$2"))
+ }
+
+ //@Test
+ def sandbox() {
+ sys.props("scala.async.debug") = true.toString
+ sys.props("scala.async.trace") = false.toString
+
+ val cm = reflect.runtime.currentMirror
+ val tb = mkToolbox("-cp target/scala-2.10/classes")
+ val tree = tb.parse(
+ """ import _root_.scala.async.AsyncId._
+ | async {
+ | var sum = 0
+ | var i = 0
+ | while (i < 5) {
+ | var j = 0
+ | while (j < 5) {
+ | sum += await(i) * await(j)
+ | j += 1
+ | }
+ | i += 1
+ | }
+ | sum
+ | }
+ | """.stripMargin)
+ println(tree)
+ val tree1 = tb.typeCheck(tree.duplicate)
+ println(cm.universe.show(tree1))
+ println(tb.eval(tree))
}
}
diff --git a/src/test/scala/scala/async/neg/LocalClasses0Spec.scala b/src/test/scala/scala/async/neg/LocalClasses0Spec.scala
index 7932744..06a0e71 100644
--- a/src/test/scala/scala/async/neg/LocalClasses0Spec.scala
+++ b/src/test/scala/scala/async/neg/LocalClasses0Spec.scala
@@ -1,3 +1,7 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala.async
package neg
diff --git a/src/test/scala/scala/async/neg/NakedAwait.scala b/src/test/scala/scala/async/neg/NakedAwait.scala
index 8b85977..f4cfca2 100644
--- a/src/test/scala/scala/async/neg/NakedAwait.scala
+++ b/src/test/scala/scala/async/neg/NakedAwait.scala
@@ -1,3 +1,7 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala.async
package neg
@@ -87,4 +91,67 @@ class NakedAwait {
""".stripMargin
}
}
+
+ @Test
+ def tryBody() {
+ expectError("await must not be used under a try/catch.") {
+ """
+ | import _root_.scala.async.AsyncId._
+ | async { try { await(false) } catch { case _ => } }
+ """.stripMargin
+ }
+ }
+
+ @Test
+ def catchBody() {
+ expectError("await must not be used under a try/catch.") {
+ """
+ | import _root_.scala.async.AsyncId._
+ | async { try { () } catch { case _ => await(false) } }
+ """.stripMargin
+ }
+ }
+
+ @Test
+ def finallyBody() {
+ expectError("await must not be used under a try/catch.") {
+ """
+ | import _root_.scala.async.AsyncId._
+ | async { try { () } finally { await(false) } }
+ """.stripMargin
+ }
+ }
+
+ @Test
+ def nestedMethod() {
+ expectError("await must not be used under a nested method.") {
+ """
+ | import _root_.scala.async.AsyncId._
+ | async { def foo = await(false) }
+ """.stripMargin
+ }
+ }
+
+ @Test
+ def returnIllegal() {
+ expectError("return is illegal") {
+ """
+ | import _root_.scala.async.AsyncId._
+ | def foo(): Any = async { return false }
+ | ()
+ |
+ |""".stripMargin
+ }
+ }
+
+ // TODO Anf transform if to have a simple condition.
+ @Test
+ def ifCondition() {
+ expectError("await must not be used under a condition.") {
+ """
+ | import _root_.scala.async.AsyncId._
+ | async { if (await(true)) () }
+ |""".stripMargin
+ }
+ }
}
diff --git a/src/test/scala/scala/async/neg/SampleNegSpec.scala b/src/test/scala/scala/async/neg/SampleNegSpec.scala
index 94dbc1d..76f9c3e 100644
--- a/src/test/scala/scala/async/neg/SampleNegSpec.scala
+++ b/src/test/scala/scala/async/neg/SampleNegSpec.scala
@@ -1,3 +1,7 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala.async
package neg
diff --git a/src/test/scala/scala/async/package.scala b/src/test/scala/scala/async/package.scala
index 32e8be4..bc4ebac 100644
--- a/src/test/scala/scala/async/package.scala
+++ b/src/test/scala/scala/async/package.scala
@@ -1,5 +1,50 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala
-package object async extends TestUtils {
+import reflect._
+import tools.reflect.ToolBoxError
+
+package object async {
+
+
+ implicit class objectops(obj: Any) {
+ def mustBe(other: Any) = assert(obj == other, obj + " is not " + other)
+
+ def mustEqual(other: Any) = mustBe(other)
+ }
+
+ implicit class stringops(text: String) {
+ def mustContain(substring: String) = assert(text contains substring, text)
+ }
+
+ def intercept[T <: Throwable : ClassTag](body: => Any): T = {
+ try {
+ body
+ throw new Exception(s"Exception of type ${classTag[T]} was not thrown")
+ } catch {
+ case t: Throwable =>
+ if (classTag[T].runtimeClass != t.getClass) throw t
+ else t.asInstanceOf[T]
+ }
+ }
+
+ def eval(code: String, compileOptions: String = ""): Any = {
+ val tb = mkToolbox(compileOptions)
+ tb.eval(tb.parse(code))
+ }
+
+ def mkToolbox(compileOptions: String = "") = {
+ val m = scala.reflect.runtime.currentMirror
+ import scala.tools.reflect.ToolBox
+ m.mkToolBox(options = compileOptions)
+ }
+ def expectError(errorSnippet: String, compileOptions: String = "", baseCompileOptions: String = "-cp target/scala-2.10/classes")(code: String) {
+ intercept[ToolBoxError] {
+ eval(code, compileOptions + " " + baseCompileOptions)
+ }.getMessage mustContain errorSnippet
+ }
}
diff --git a/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala b/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala
index 872e44d..41eeaa5 100644
--- a/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala
+++ b/src/test/scala/scala/async/run/anf/AnfTransformSpec.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
@@ -172,4 +172,37 @@ class AnfTransformSpec {
}
result mustBe (103)
}
+
+ @Test
+ def nestedAwaitAsBareExpression() {
+ import ExecutionContext.Implicits.global
+ import _root_.scala.async.AsyncId.{async, await}
+ val result = async {
+ await(await("").isEmpty)
+ }
+ result mustBe (true)
+ }
+
+ @Test
+ def nestedAwaitInBlock() {
+ import ExecutionContext.Implicits.global
+ import _root_.scala.async.AsyncId.{async, await}
+ val result = async {
+ ()
+ await(await("").isEmpty)
+ }
+ result mustBe (true)
+ }
+
+ @Test
+ def nestedAwaitInIf() {
+ import ExecutionContext.Implicits.global
+ import _root_.scala.async.AsyncId.{async, await}
+ val result = async {
+ if ("".isEmpty)
+ await(await("").isEmpty)
+ else 0
+ }
+ result mustBe (true)
+ }
}
diff --git a/src/test/scala/scala/async/run/await0/Await0Spec.scala b/src/test/scala/scala/async/run/await0/Await0Spec.scala
index 42d4ef2..111602a 100644
--- a/src/test/scala/scala/async/run/await0/Await0Spec.scala
+++ b/src/test/scala/scala/async/run/await0/Await0Spec.scala
@@ -1,3 +1,7 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala.async
package run
package await0
diff --git a/src/test/scala/scala/async/run/block0/AsyncSpec.scala b/src/test/scala/scala/async/run/block0/AsyncSpec.scala
index 5a7247c..5f38086 100644
--- a/src/test/scala/scala/async/run/block0/AsyncSpec.scala
+++ b/src/test/scala/scala/async/run/block0/AsyncSpec.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/block1/block1.scala b/src/test/scala/scala/async/run/block1/block1.scala
index 0853498..bf9b56f 100644
--- a/src/test/scala/scala/async/run/block1/block1.scala
+++ b/src/test/scala/scala/async/run/block1/block1.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/hygiene/Hygiene.scala b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
index 0cc68a4..d0be2e0 100644
--- a/src/test/scala/scala/async/run/hygiene/Hygiene.scala
+++ b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/ifelse0/IfElse0.scala b/src/test/scala/scala/async/run/ifelse0/IfElse0.scala
index 0363a75..0a72f1e 100644
--- a/src/test/scala/scala/async/run/ifelse0/IfElse0.scala
+++ b/src/test/scala/scala/async/run/ifelse0/IfElse0.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/ifelse0/WhileSpec.scala b/src/test/scala/scala/async/run/ifelse0/WhileSpec.scala
new file mode 100644
index 0000000..1f1033a
--- /dev/null
+++ b/src/test/scala/scala/async/run/ifelse0/WhileSpec.scala
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
+package scala.async
+package run
+package ifelse0
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+
+@RunWith(classOf[JUnit4])
+class WhileSpec {
+
+ @Test
+ def whiling1() {
+ import AsyncId._
+
+ val result = async {
+ var xxx: Int = 0
+ var y = 0
+ while (xxx < 3) {
+ y = await(xxx)
+ xxx = xxx + 1
+ }
+ y
+ }
+ result mustBe (2)
+ }
+
+ @Test
+ def whiling2() {
+ import AsyncId._
+
+ val result = async {
+ var xxx: Int = 0
+ var y = 0
+ while (false) {
+ y = await(xxx)
+ xxx = xxx + 1
+ }
+ y
+ }
+ result mustBe (0)
+ }
+
+ @Test
+ def nestedWhile() {
+ import AsyncId._
+
+ val result = async {
+ var sum = 0
+ var i = 0
+ while (i < 5) {
+ var j = 0
+ while (j < 5) {
+ sum += await(i) * await(j)
+ j += 1
+ }
+ i += 1
+ }
+ sum
+ }
+ result mustBe (100)
+ }
+} \ No newline at end of file
diff --git a/src/test/scala/scala/async/run/ifelse1/IfElse1.scala b/src/test/scala/scala/async/run/ifelse1/IfElse1.scala
index 3ca3a94..b567ee6 100644
--- a/src/test/scala/scala/async/run/ifelse1/IfElse1.scala
+++ b/src/test/scala/scala/async/run/ifelse1/IfElse1.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/ifelse2/ifelse2.scala b/src/test/scala/scala/async/run/ifelse2/ifelse2.scala
index 84974b6..92a76e4 100644
--- a/src/test/scala/scala/async/run/ifelse2/ifelse2.scala
+++ b/src/test/scala/scala/async/run/ifelse2/ifelse2.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/ifelse3/IfElse3.scala b/src/test/scala/scala/async/run/ifelse3/IfElse3.scala
index d475a0c..8a2ab13 100644
--- a/src/test/scala/scala/async/run/ifelse3/IfElse3.scala
+++ b/src/test/scala/scala/async/run/ifelse3/IfElse3.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/match0/Match0.scala b/src/test/scala/scala/async/run/match0/Match0.scala
index 6a17e2b..f550a69 100644
--- a/src/test/scala/scala/async/run/match0/Match0.scala
+++ b/src/test/scala/scala/async/run/match0/Match0.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
diff --git a/src/test/scala/scala/async/run/noawait/NoAwaitSpec.scala b/src/test/scala/scala/async/run/noawait/NoAwaitSpec.scala
index 90be946..e2c69d0 100644
--- a/src/test/scala/scala/async/run/noawait/NoAwaitSpec.scala
+++ b/src/test/scala/scala/async/run/noawait/NoAwaitSpec.scala
@@ -1,3 +1,7 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
package scala.async
package run
package noawait
diff --git a/src/test/scala/scala/async/run/toughtype/ToughType.scala b/src/test/scala/scala/async/run/toughtype/ToughType.scala
index f576ddc..9cfc1ca 100644
--- a/src/test/scala/scala/async/run/toughtype/ToughType.scala
+++ b/src/test/scala/scala/async/run/toughtype/ToughType.scala
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/