summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Iry <james.iry@typesafe.com>2013-06-04 10:22:43 -0700
committerJames Iry <james.iry@typesafe.com>2013-06-04 10:22:43 -0700
commitac4e3ca19246ae3d983f99607b865c5ed3acb2b9 (patch)
tree71df59ffda407ea0e527aeec3cea38fe7edc4043
parentfc6da8d8b765ddc3c492d0884164561ca7a8b4d8 (diff)
downloadscala-ac4e3ca19246ae3d983f99607b865c5ed3acb2b9.tar.gz
scala-ac4e3ca19246ae3d983f99607b865c5ed3acb2b9.tar.bz2
scala-ac4e3ca19246ae3d983f99607b865c5ed3acb2b9.zip
Refactor testing logic for only running under certain JDK versions
We had several tests designed to only run if the JDK version was at least some specified version. This commit refactors that common logic into DirectTest.
-rw-r--r--src/partest/scala/tools/partest/DirectTest.scala27
-rw-r--r--test/files/run/classfile-format-51.scala8
-rw-r--r--test/files/run/classfile-format-52.scala11
-rw-r--r--test/files/run/t7398.scala11
4 files changed, 39 insertions, 18 deletions
diff --git a/src/partest/scala/tools/partest/DirectTest.scala b/src/partest/scala/tools/partest/DirectTest.scala
index e2dac2fd55..8fcaa6423c 100644
--- a/src/partest/scala/tools/partest/DirectTest.scala
+++ b/src/partest/scala/tools/partest/DirectTest.scala
@@ -6,6 +6,7 @@
package scala.tools.partest
import scala.tools.nsc._
+import settings.ScalaVersion
import io.Directory
import util.{ SourceFile, BatchSourceFile, CommandLineParser }
import reporters.{Reporter, ConsoleReporter}
@@ -101,4 +102,30 @@ abstract class DirectTest extends App {
final def log(msg: => Any) {
if (isDebug) Console.err println msg
}
+
+ /**
+ * Run a test only if the current java version is at least the version specified.
+ */
+ def testUnderJavaAtLeast[A](version: String)(yesRun: =>A) = new TestUnderJavaAtLeast(version, { yesRun })
+
+ class TestUnderJavaAtLeast[A](version: String, yesRun: => A) {
+ val javaVersion = System.getProperty("java.specification.version")
+
+ // the "ScalaVersion" class parses Java specification versions just fine
+ val requiredJavaVersion = ScalaVersion(version)
+ val executingJavaVersion = ScalaVersion(javaVersion)
+ val shouldRun = executingJavaVersion >= requiredJavaVersion
+ val preamble = if (shouldRun) "Attempting" else "Doing fallback for"
+
+ def logInfo() = log(s"$preamble java $version specific test under java version $javaVersion")
+
+ /*
+ * If the current java version is at least 'version' then 'yesRun' is evaluated
+ * otherwise 'fallback' is
+ */
+ def otherwise(fallback: =>A): A = {
+ logInfo()
+ if (shouldRun) yesRun else fallback
+ }
+ }
}
diff --git a/test/files/run/classfile-format-51.scala b/test/files/run/classfile-format-51.scala
index 9b1e612f4f..378caa7936 100644
--- a/test/files/run/classfile-format-51.scala
+++ b/test/files/run/classfile-format-51.scala
@@ -112,12 +112,12 @@ object Driver {
System.setErr(System.out)
try {
// this test is only valid under JDK 1.7+
- // cheat a little by using 'ScalaVersion' because it can parse java versions just as well
- val requiredJavaVersion = ScalaVersion("1.7")
- val executingJavaVersion = ScalaVersion(System.getProperty("java.specification.version"))
- if (executingJavaVersion >= requiredJavaVersion) {
+ testUnderJavaAtLeast("1.7") {
generateClass()
compile()
+ ()
+ } otherwise {
+ ()
}
}
finally
diff --git a/test/files/run/classfile-format-52.scala b/test/files/run/classfile-format-52.scala
index f0ad7c2ed6..7afa09ae0b 100644
--- a/test/files/run/classfile-format-52.scala
+++ b/test/files/run/classfile-format-52.scala
@@ -61,17 +61,14 @@ class Driver extends HasDefaultMethod {
System.setErr(System.out)
try {
// this test is only valid under JDK 1.8+
- // cheat a little by using 'ScalaVersion' because it can parse java versions just as well
- val requiredJavaVersion = ScalaVersion("1.8")
- val executingJavaVersion = ScalaVersion(System.getProperty("java.specification.version"))
- if (executingJavaVersion >= requiredJavaVersion) {
+ testUnderJavaAtLeast("1.8") {
generateInterface()
compile()
Class.forName("Driver").newInstance()
- } else {
- // under other versions just dump the expected results
+ ()
+ } otherwise {
println("hello from publicMethod")
- println("hello from staticMethod")
+ println("hello from staticMethod")
}
}
finally
diff --git a/test/files/run/t7398.scala b/test/files/run/t7398.scala
index e4090f7db3..dd59697b71 100644
--- a/test/files/run/t7398.scala
+++ b/test/files/run/t7398.scala
@@ -3,14 +3,11 @@ import scala.tools.partest._
object Test extends CompilerTest {
import global._
- def javaVersion = scala.util.Properties.javaVersion
- def isJavaEight = javaVersion startsWith "1.8"
// This way we auto-pass on non-java8 since there's nothing to check
- override lazy val units = {
- val res: List[CompilationUnit] = if (isJavaEight) javaCompilationUnits(global)(defaultMethodSource) else Nil
- val word = if (isJavaEight) "Attempting" else "Skipping"
- log(s"$word java8-specific test under java version $javaVersion")
- res
+ override lazy val units: List[CompilationUnit] = testUnderJavaAtLeast("1.8") {
+ javaCompilationUnits(global)(defaultMethodSource)
+ } otherwise {
+ Nil
}
private def defaultMethodSource = """