diff --git a/sbt/src/sbt-test/tests/arguments/build.sbt b/sbt/src/sbt-test/tests/arguments/build.sbt index 4c441e7dd..9d9f79162 100644 --- a/sbt/src/sbt-test/tests/arguments/build.sbt +++ b/sbt/src/sbt-test/tests/arguments/build.sbt @@ -2,8 +2,16 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" ThisBuild / scalaVersion := "2.12.10" +val foo = settingKey[Seq[String]]("foo") +val checkFoo = inputKey[Unit]("check contents of foo") + lazy val root = (project in file(".")) .settings( + foo := Nil, + checkFoo := { + val arguments = Def.spaceDelimited("").parsed.mkString(" ") + assert(foo.value.contains(arguments)) + }, libraryDependencies += scalatest % Test, // testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-f", "result.txt", "-eNDXEHLO") testOptions in Configurations.Test ++= { diff --git a/sbt/src/sbt-test/tests/arguments/test b/sbt/src/sbt-test/tests/arguments/test index 90bdc402e..792eb6bc7 100644 --- a/sbt/src/sbt-test/tests/arguments/test +++ b/sbt/src/sbt-test/tests/arguments/test @@ -26,3 +26,7 @@ $ touch failure3 $ delete failure3 > set Compile / scalacOptions += "-Xfatal-warnings" + +> set foo += "an argument with spaces" + +> checkFoo an argument with spaces diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala index 842662a95..78ec27c87 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala @@ -27,7 +27,7 @@ final class SbtHandler(remoteSbtCreator: RemoteSbtCreator) extends StatementHand def apply(command: String, arguments: List[String], i: Option[SbtInstance]): Option[SbtInstance] = onSbtInstance(i) { (_, server) => - send((command :: arguments.map(escape)).mkString(" "), server) + send((command :: arguments).mkString(" "), server) receive(s"$command failed", server) } @@ -80,12 +80,4 @@ final class SbtHandler(remoteSbtCreator: RemoteSbtCreator) extends StatementHand catch { case _: SocketException => throw new TestFailed("Remote sbt initialization failed") } p } - - // if the argument contains spaces, enclose it in quotes, quoting backslashes and quotes - def escape(argument: String) = { - import java.util.regex.Pattern.{ quote => q } - if (argument.contains(" ")) - "\"" + argument.replaceAll(q("""\"""), """\\""").replaceAll(q("\""), "\\\"") + "\"" - else argument - } }