diff --git a/project/Aliases.scala b/project/Aliases.scala index d7fa8b5aa..c052d0a1e 100644 --- a/project/Aliases.scala +++ b/project/Aliases.scala @@ -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