From 2e9dfa02be6c9a21bb7c13f567d1daac154e69aa Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sun, 25 Apr 2010 13:17:46 -0400 Subject: [PATCH] can directly specify Scala versions to test in scripted framework --- sbt/scripted/src/main/scala/Scripted.scala | 8 +++-- .../src/main/scala/ScriptedTests.scala | 33 ++++++++++--------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/sbt/scripted/src/main/scala/Scripted.scala b/sbt/scripted/src/main/scala/Scripted.scala index 3b5962cda..450b79e33 100644 --- a/sbt/scripted/src/main/scala/Scripted.scala +++ b/sbt/scripted/src/main/scala/Scripted.scala @@ -29,6 +29,7 @@ final case class ScriptedTest(group: String, name: String) extends NotNull trait Scripted extends Project with MultiTaskProject { def scriptedCompatibility = CompatibilityLevel.Minimal + def scriptedBuildVersions = CompatibilityLevel.defaultVersions(scriptedCompatibility) def scriptedDefScala = buildScalaVersion def scriptedSbt = projectVersion.value.toString def scriptedBufferLog = true @@ -36,18 +37,19 @@ trait Scripted extends Project with MultiTaskProject def sbtTests: Path def scriptedTask(dependencies: ManagedTask*) = dynamic(scriptedTests(listTests)) dependsOn(dependencies : _*) def scriptedMethodTask(dependencies: ManagedTask*) = multiTask(listTests.map(_.toString).toList) { (args, includeFunction) => - scriptedTests(listTests.filter(test => includeFunction(test.toString)), dependencies : _*) + try { scriptedTests(listTests.filter(test => includeFunction(test.toString)), dependencies : _*) } + catch { case e: TestSetupException => task { Some(e.getMessage) } named("test-setup") } } def listTests = (new ListTests(sbtTests.asFile, include _, log)).listTests def scriptedTests(tests: Seq[ScriptedTest], dependencies: ManagedTask*) = { - val runner = new ScriptedTests(sbtTests.asFile, scriptedBufferLog, scriptedSbt, scriptedDefScala, scriptedCompatibility) + val runner = new ScriptedTests(sbtTests.asFile, scriptedBufferLog, scriptedSbt, scriptedDefScala, scriptedBuildVersions) val startTask = task { None } named("scripted-test-start") dependsOn(dependencies : _*) def scriptedTest(test: ScriptedTest) = task { runner.scriptedTest(test.group, test.name, log) } named test.toString dependsOn(startTask) val testTasks = tests.map(scriptedTest) - task { None } named("scripted-test-complete") dependsOn(testTasks : _*) + Empty named("scripted-test-complete") dependsOn(testTasks : _*) } private def unwrapOption[T](s: T): Option[T] = if(s == null) None else Some(s) diff --git a/sbt/scripted/src/main/scala/ScriptedTests.scala b/sbt/scripted/src/main/scala/ScriptedTests.scala index 6c8265bff..39588f13d 100644 --- a/sbt/scripted/src/main/scala/ScriptedTests.scala +++ b/sbt/scripted/src/main/scala/ScriptedTests.scala @@ -10,8 +10,11 @@ import java.nio.charset.Charset import xsbt.IPC import xsbt.test.{CommentHandler, FileCommands, ScriptRunner, TestScriptParser} -final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, level: CompatibilityLevel.Value) extends NotNull +final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String) extends NotNull { + @deprecated def this(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, level: CompatibilityLevel.Value) = + this(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, CompatibilityLevel.defaultVersions(level)) = + private val testResources = new Resources(resourceBaseDirectory) val ScriptFilename = "test" @@ -24,7 +27,7 @@ final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVe IPC.pullServer( scriptedTest0(label, testDirectory, log) ) private def scriptedTest0(label: String, testDirectory: File, log: Logger)(server: IPC.Server): Option[String] = { - FillProperties(testDirectory, sbtVersion, defScalaVersion, level) + FillProperties(testDirectory, sbtVersion, defScalaVersion, buildScalaVersions) val buffered = new BufferedLogger(log) if(bufferLog) buffered.recordAll @@ -70,31 +73,31 @@ final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVe object CompatibilityLevel extends Enumeration { val Full, Basic, Minimal, Minimal27, Minimal28 = Value + + def defaultVersions(level: Value) = + level match + { + case Full => "2.7.2 2.7.3 2.7.5 2.7.7 2.8.0.Beta1 2.8.0.RC1 2.8.0-SNAPSHOT" + case Basic => "2.7.7 2.7.2 2.8.0.RC1" + case Minimal => "2.7.7 2.8.0.RC1" + case Minimal27 => "2.7.7" + case Minimal28 => "2.8.0.RC1" + } } object FillProperties { def apply(projectDirectory: File, sbtVersion: String, defScalaVersion: String, level: CompatibilityLevel.Value): Unit = + apply(projectDirectory, sbtVersion, defScalaVersion, defaultVersions(level)) + def apply(projectDirectory: File, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String): Unit = { import xsbt.Paths._ - fill(projectDirectory / "project" / "build.properties", sbtVersion, defScalaVersion, getVersions(level)) + fill(projectDirectory / "project" / "build.properties", sbtVersion, defScalaVersion, buildScalaVersions) } def fill(properties: File, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String) { val toAppend = extraProperties(sbtVersion, defScalaVersion, buildScalaVersions) xsbt.OpenResource.fileWriter(Charset.forName("ISO-8859-1"), true)(properties) { _.write(toAppend) } } - def getVersions(level: CompatibilityLevel.Value) = - { - import CompatibilityLevel._ - level match - { - case Full => "2.7.2 2.7.3 2.7.5 2.7.7 2.8.0.Beta1 2.8.0-SNAPSHOT" - case Basic => "2.7.7 2.7.2 2.8.0.Beta1" - case Minimal => "2.7.7 2.8.0.Beta1" - case Minimal27 => "2.7.7" - case Minimal28 => "2.8.0.Beta1" - } - } def extraProperties(sbtVersion: String, defScalaVersion: String, buildScalaVersions: String) = sbt.version={sbtVersion}