Workaround for method not found for sbt 0.13 scripted tests

This commit is contained in:
Alexandre Archambault 2017-11-01 17:07:33 +01:00
parent 948361e429
commit d3360d640d
1 changed files with 72 additions and 4 deletions

View File

@ -2,7 +2,7 @@
import sbt._
import sbt.Defaults.itSettings
import sbt.Keys._
import sbt.ScriptedPlugin.autoImport.{ScriptedConf, ScriptedLaunchConf, scriptedSbt}
import sbt.ScriptedPlugin.autoImport._
import sbt.ScriptedPlugin.{projectSettings => scriptedSettings}
import sbt.librarymanagement.CrossVersion.partialVersion
@ -10,7 +10,72 @@ object Aliases {
def libs = libraryDependencies
def withScriptedTests =
def withScriptedTests = {
// Both tweaked tasks adapted from the scripted sources.
// No idea why this is required to run the scripted tests for sbt 0.13.
def tweakedScriptedRunTask = Def.task {
// similar to https://github.com/sbt/sbt/issues/3245#issuecomment-306045952
val cls = scriptedTests.value.getClass
if (sbtVersion.in(pluginCrossBuild).value.startsWith("0.13."))
cls.getMethod("run",
classOf[File],
classOf[Boolean],
classOf[Array[String]],
classOf[File],
classOf[Array[String]]
)
else
cls.getMethod("run",
classOf[File],
classOf[Boolean],
classOf[Array[String]],
classOf[File],
classOf[Array[String]],
classOf[java.util.List[File]]
)
}
def tweakedScriptedTask = Def.inputTask {
val args = ScriptedPlugin
.asInstanceOf[{
def scriptedParser(f: File): complete.Parser[Seq[String]]
}]
.scriptedParser(sbtTestDirectory.value)
.parsed
scriptedDependencies.value
try {
if (sbtVersion.in(pluginCrossBuild).value.startsWith("0.13."))
scriptedRun.value.invoke(
scriptedTests.value,
sbtTestDirectory.value,
scriptedBufferLog.value: java.lang.Boolean,
args.toArray,
sbtLauncher.value,
scriptedLaunchOpts.value.toArray
)
else
scriptedRun.value.invoke(
scriptedTests.value,
sbtTestDirectory.value,
scriptedBufferLog.value: java.lang.Boolean,
args.toArray,
sbtLauncher.value,
scriptedLaunchOpts.value.toArray,
new java.util.ArrayList()
)
} catch {
case e: java.lang.reflect.InvocationTargetException =>
throw e.getCause
}
}
// see https://github.com/sbt/sbt/issues/3325#issuecomment-315670424
scriptedSettings.filterNot(_.key.key.label == libraryDependencies.key.label) ++ Seq(
libraryDependencies ++= {
@ -33,8 +98,11 @@ object Aliases {
case _ =>
Seq()
}
}
)
},
scriptedRun := tweakedScriptedRunTask.value,
scripted := tweakedScriptedTask.evaluated
)
}
def hasITs = itSettings