can directly specify Scala versions to test in scripted framework

This commit is contained in:
Mark Harrah 2010-04-25 13:17:46 -04:00
parent dac3714558
commit 2e9dfa02be
2 changed files with 23 additions and 18 deletions

View File

@ -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)

View File

@ -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) =
<x>
sbt.version={sbtVersion}