From b9231a49cc1713ea751473cc73bea113d342dfcf Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Sat, 11 Jan 2020 11:26:37 -0800 Subject: [PATCH] Don't add extra quotation marks in scripted commands Scripted automatically adding quotation marks when an argument contains spaces breaks arguments that already were wrapped in quotations. The scripted test should be responsible for its own escaping. Since this is part of scripted-sbt-redux, we don't have to worry about downstream builds relying on the old escaping behavior. --- sbt/src/sbt-test/tests/arguments/build.sbt | 8 ++++++++ sbt/src/sbt-test/tests/arguments/test | 4 ++++ .../src/main/scala/sbt/scriptedtest/SbtHandler.scala | 10 +--------- 3 files changed, 13 insertions(+), 9 deletions(-) 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 - } }