aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/scala/async/Async.scala5
-rw-r--r--src/test/scala/scala/async/TestUtils.scala17
-rw-r--r--src/test/scala/scala/async/neg/NakedAwait.scala19
-rw-r--r--src/test/scala/scala/async/neg/SampleNegSpec.scala17
-rw-r--r--src/test/scala/scala/async/neg/package.scala11
5 files changed, 44 insertions, 25 deletions
diff --git a/src/main/scala/scala/async/Async.scala b/src/main/scala/scala/async/Async.scala
index 0bf4362..d4b950e 100644
--- a/src/main/scala/scala/async/Async.scala
+++ b/src/main/scala/scala/async/Async.scala
@@ -21,7 +21,9 @@ class FallbackToCpsException extends scala.util.control.ControlThrowable
object Async extends AsyncUtils {
def async[T](body: T): Future[T] = macro asyncImpl[T]
-
+
+ // TODO Replace with `@compileTimeOnly when this is implemented SI-6539
+ @deprecated("`await` must be enclosed in an `async` block", "0.1")
def await[T](awaitable: Future[T]): T = ???
/* Fall back for `await` when it is called at an unsupported position.
@@ -132,5 +134,4 @@ object Async extends AsyncUtils {
}
}
}
-
}
diff --git a/src/test/scala/scala/async/TestUtils.scala b/src/test/scala/scala/async/TestUtils.scala
index f4def22..0920659 100644
--- a/src/test/scala/scala/async/TestUtils.scala
+++ b/src/test/scala/scala/async/TestUtils.scala
@@ -12,9 +12,12 @@ 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)
@@ -35,4 +38,18 @@ trait TestUtils {
else t.asInstanceOf[T]
}
}
+
+ def eval(code: String, compileOptions: String = ""): Any = {
+ val m = scala.reflect.runtime.currentMirror
+ import scala.tools.reflect.ToolBox
+ val tb = m.mkToolBox(options = compileOptions)
+ val result = tb.eval(tb.parse(code))
+ result
+ }
+
+ def expectError(errorSnippet: String, compileOptions: String = "")(code: String) {
+ intercept[ToolBoxError] {
+ eval(code, compileOptions)
+ }.getMessage mustContain errorSnippet
+ }
}
diff --git a/src/test/scala/scala/async/neg/NakedAwait.scala b/src/test/scala/scala/async/neg/NakedAwait.scala
new file mode 100644
index 0000000..db67f18
--- /dev/null
+++ b/src/test/scala/scala/async/neg/NakedAwait.scala
@@ -0,0 +1,19 @@
+package scala.async
+package neg
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+
+@RunWith(classOf[JUnit4])
+class NakedAwait {
+ @Test
+ def `await only allowed in async neg`() {
+ expectError("`await` must be enclosed in an `async` block", "-deprecation -Xfatal-warnings") {
+ """
+ | import _root_.scala.async.Async._
+ | await[Any](null)
+ """.stripMargin
+ }
+ }
+}
diff --git a/src/test/scala/scala/async/neg/SampleNegSpec.scala b/src/test/scala/scala/async/neg/SampleNegSpec.scala
index 00daf44..94dbc1d 100644
--- a/src/test/scala/scala/async/neg/SampleNegSpec.scala
+++ b/src/test/scala/scala/async/neg/SampleNegSpec.scala
@@ -1,25 +1,18 @@
package scala.async
package neg
-import java.io.File
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.junit.Test
-import tools.reflect.ToolBoxError
@RunWith(classOf[JUnit4])
class SampleNegSpec {
- val f = new File("/Users/jason/code/scala-async/test/files/run/await0")
-
@Test
def `missing symbol`() {
- intercept[ToolBoxError] {
- eval {
- """
- | kaboom
- """.stripMargin
- }
- }.getMessage mustContain "not found: value kaboom"
-
+ expectError("not found: value kaboom") {
+ """
+ | kaboom
+ """.stripMargin
+ }
}
}
diff --git a/src/test/scala/scala/async/neg/package.scala b/src/test/scala/scala/async/neg/package.scala
deleted file mode 100644
index 1326394..0000000
--- a/src/test/scala/scala/async/neg/package.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package scala.async
-
-package object neg {
- def eval(code: String): Any = {
- val m = scala.reflect.runtime.currentMirror
- import scala.tools.reflect.ToolBox
- val tb = m.mkToolBox()
- val result = tb.eval(tb.parse(code))
- result
- }
-}