diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2015-07-30 15:41:12 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2015-07-30 15:41:12 +1000 |
commit | 5ee834d4fce81e25cfcc3ae770e3f1583d82d658 (patch) | |
tree | 7bfedd4f30b05bdba8905e83a87b2c6d926e3e5f /src/test | |
parent | a7a1e5b5e93724d7195ced9168f17e43438bff66 (diff) | |
parent | 7238bc1982cb1d87157c650115a2ae92a58430c9 (diff) | |
download | scala-async-5ee834d4fce81e25cfcc3ae770e3f1583d82d658.tar.gz scala-async-5ee834d4fce81e25cfcc3ae770e3f1583d82d658.tar.bz2 scala-async-5ee834d4fce81e25cfcc3ae770e3f1583d82d658.zip |
Merge pull request #132 from retronym/ticket/105
Avoid dead code warnings for users of async.
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/scala/scala/async/package.scala | 12 | ||||
-rw-r--r-- | src/test/scala/scala/async/run/WarningsSpec.scala | 48 |
2 files changed, 57 insertions, 3 deletions
diff --git a/src/test/scala/scala/async/package.scala b/src/test/scala/scala/async/package.scala index 166edaa..9fbb7df 100644 --- a/src/test/scala/scala/async/package.scala +++ b/src/test/scala/scala/async/package.scala @@ -51,6 +51,18 @@ package object async { m.mkToolBox(options = compileOptions) } + import scala.tools.nsc._, reporters._ + def mkGlobal(compileOptions: String = ""): Global = { + val settings = new Settings() + settings.processArgumentString(compileOptions) + val initClassPath = settings.classpath.value + settings.embeddedDefaults(getClass.getClassLoader) + if (initClassPath == settings.classpath.value) + settings.usejavacp.value = true // not running under SBT, try to use the Java claspath instead + val reporter = new StoreReporter + new Global(settings, reporter) + } + def scalaBinaryVersion: String = { val PreReleasePattern = """.*-(M|RC).*""".r val Pattern = """(\d+\.\d+)\..*""".r diff --git a/src/test/scala/scala/async/run/WarningsSpec.scala b/src/test/scala/scala/async/run/WarningsSpec.scala index 3a7843a..00c6466 100644 --- a/src/test/scala/scala/async/run/WarningsSpec.scala +++ b/src/test/scala/scala/async/run/WarningsSpec.scala @@ -7,10 +7,8 @@ package run import org.junit.Test -import scala.async.internal.AsyncId -import scala.concurrent.Await -import scala.concurrent.duration._ import scala.language.{postfixOps, reflectiveCalls} +import scala.tools.nsc.reporters.StoreReporter class WarningsSpec { @@ -32,4 +30,48 @@ class WarningsSpec { """.stripMargin }) } + + @Test + // https://github.com/scala/async/issues/74 + def noDeadCodeWarningForAsyncThrow() { + val global = mkGlobal("-cp ${toolboxClasspath} -Yrangepos -Ywarn-dead-code -Xfatal-warnings -Ystop-after:refchecks") + // was: "a pure expression does nothing in statement position; you may be omitting necessary parentheses" + val source = + """ + | class Test { + | import scala.async.Async._ + | import scala.concurrent.ExecutionContext.Implicits.global + | async { throw new Error() } + | } + """.stripMargin + val run = new global.Run + val sourceFile = global.newSourceFile(source) + run.compileSources(sourceFile :: Nil) + assert(!global.reporter.hasErrors, global.reporter.asInstanceOf[StoreReporter].infos) + } + + @Test + def noDeadCodeWarningInMacroExpansion() { + val global = mkGlobal("-cp ${toolboxClasspath} -Yrangepos -Ywarn-dead-code -Xfatal-warnings -Ystop-after:refchecks") + val source = """ + | class Test { + | def test = { + | import scala.async.Async._, scala.concurrent._, ExecutionContext.Implicits.global + | async { + | val opt = await(async(Option.empty[String => Future[Unit]])) + | opt match { + | case None => + | throw new RuntimeException("case a") + | case Some(f) => + | await(f("case b")) + | } + | } + | } + |} + """.stripMargin + val run = new global.Run + val sourceFile = global.newSourceFile(source) + run.compileSources(sourceFile :: Nil) + assert(!global.reporter.hasErrors, global.reporter.asInstanceOf[StoreReporter].infos) + } } |