summaryrefslogtreecommitdiff
path: root/src/partest
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-06-10 06:20:37 -0400
committerJason Zaugg <jzaugg@gmail.com>2013-06-10 06:20:37 -0400
commit549cb905aa6a4facb3cb12628a76ab8273658170 (patch)
tree0213972eb9f2fb3f82472063873bf90e18f0446c /src/partest
parent16c31f4923b3714d2780f0a494b3da07c1ac12bc (diff)
parente3c318649c4318412c8d7e3cbee4689489f6ccb1 (diff)
downloadscala-549cb905aa6a4facb3cb12628a76ab8273658170.tar.gz
scala-549cb905aa6a4facb3cb12628a76ab8273658170.tar.bz2
scala-549cb905aa6a4facb3cb12628a76ab8273658170.zip
Merge branch '2.10.x' into topic/merge-v2.10.2-RC1-35-ga54d86b-to-master
Conflicts: src/partest/scala/tools/partest/DirectTest.scala
Diffstat (limited to 'src/partest')
-rw-r--r--src/partest/scala/tools/partest/DirectTest.scala27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/partest/scala/tools/partest/DirectTest.scala b/src/partest/scala/tools/partest/DirectTest.scala
index 7f9ca3a321..953b5e5535 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 util.{ SourceFile, BatchSourceFile, CommandLineParser }
import reporters.{Reporter, ConsoleReporter}
@@ -97,4 +98,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
+ }
+ }
}