diff --git a/modules/build/src/main/scala/scala/build/input/Inputs.scala b/modules/build/src/main/scala/scala/build/input/Inputs.scala index 24e70d9fd4..0cb7f5876d 100644 --- a/modules/build/src/main/scala/scala/build/input/Inputs.scala +++ b/modules/build/src/main/scala/scala/build/input/Inputs.scala @@ -157,6 +157,11 @@ object Inputs { ) (f.path / os.up, true, WorkspaceOrigin.SourcePaths) } + }.orElse { + validElems.collectFirst { + case _: Virtual => + (os.temp.dir(), true, WorkspaceOrigin.VirtualForced) + } }.getOrElse((os.pwd, true, WorkspaceOrigin.Forced)) } diff --git a/modules/build/src/main/scala/scala/build/input/WorkspaceOrigin.scala b/modules/build/src/main/scala/scala/build/input/WorkspaceOrigin.scala index 1604770c45..2235e36362 100644 --- a/modules/build/src/main/scala/scala/build/input/WorkspaceOrigin.scala +++ b/modules/build/src/main/scala/scala/build/input/WorkspaceOrigin.scala @@ -9,5 +9,6 @@ object WorkspaceOrigin { case object ResourcePaths extends WorkspaceOrigin - case object HomeDir extends WorkspaceOrigin + case object HomeDir extends WorkspaceOrigin + case object VirtualForced extends WorkspaceOrigin } diff --git a/modules/integration/src/test/scala/scala/cli/integration/RunSnippetTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/RunSnippetTestDefinitions.scala index e894168403..141d39edc3 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/RunSnippetTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/RunSnippetTestDefinitions.scala @@ -144,4 +144,30 @@ trait RunSnippetTestDefinitions { _: RunTestDefinitions => expect(res.out.trim() == expectedOutput) } } + test("running a script snippet should not create the workspace dir in cwd") { + emptyInputs.fromRoot { root => + val quotation = TestUtil.argQuotationMark + val msg = "Hello" + os.proc(TestUtil.cli, "-e", s"println($quotation$msg$quotation)", extraOptions) + .call(cwd = root) + .out.trim() + expect(!os.exists(root / Constants.workspaceDirName)) + } + } + test("running a script snippet with one source file should create the workspace dir in cwd") { + val msg = "Hello" + val inputs = TestInputs( + os.rel / "Hello.scala" -> + s"""object Hello { + | val hello = $msg + |}""".stripMargin + ) + inputs.fromRoot { root => + val quotation = TestUtil.argQuotationMark + os.proc(TestUtil.cli, "-e", s"println($quotation$msg$quotation)", ".", extraOptions) + .call(cwd = root) + .out.trim() + expect(os.exists(root / Constants.workspaceDirName)) + } + } }