From defdbb0e849a03b554425738d2eeb91190300a27 Mon Sep 17 00:00:00 2001 From: Will Fuqua Date: Fri, 17 Nov 2023 22:01:41 +0700 Subject: [PATCH 1/2] Fix CSX loading using relative paths from command line We are configuring the correct working directory in the C# compilation options, but we need to pass this down the the script runner's SourceReferenceResolver roslyn integration point. --- .../Roslyn/Scripting/ScriptRunner.cs | 1 + CSharpRepl.Tests/ReadEvalPrintLoopTests.cs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/CSharpRepl.Services/Roslyn/Scripting/ScriptRunner.cs b/CSharpRepl.Services/Roslyn/Scripting/ScriptRunner.cs index 80b30e6..12f1619 100644 --- a/CSharpRepl.Services/Roslyn/Scripting/ScriptRunner.cs +++ b/CSharpRepl.Services/Roslyn/Scripting/ScriptRunner.cs @@ -61,6 +61,7 @@ public ScriptRunner( ); this.scriptOptions = ScriptOptions.Default .WithMetadataResolver(metadataResolver) + .WithSourceResolver(compilationOptions.SourceReferenceResolver) .WithReferences(referenceAssemblyService.LoadedImplementationAssemblies) .WithAllowUnsafe(compilationOptions.AllowUnsafe) .WithLanguageVersion(LanguageVersion.Preview) diff --git a/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs b/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs index 908df0e..2976990 100644 --- a/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs +++ b/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs @@ -119,6 +119,24 @@ await repl.RunAsync(new Configuration( Assert.Contains(@"""Hello World""", console.AnsiConsole.Output); } + [Fact] + public async Task RunAsync_LoadScriptByFilePath_RunsScript() + { + prompt + .ReadLineAsync() + .Returns( + new PromptResult(true, "exit", default) + ); + + await repl.RunAsync(new Configuration( + loadScript: "#load \"Data\\LoadScript.csx\"" + )); + + Assert.DoesNotContain("Exception", console.AnsiConsole.Output); + Assert.DoesNotContain("CS1504", console.AnsiConsole.Output); + Assert.DoesNotContain("Could not find file", console.AnsiConsole.Output); + } + [Fact] public async Task RunAsync_Reference_AddsReference() { From e073462e239adec60d2f8f331e5ae29a640b8099 Mon Sep 17 00:00:00 2001 From: Will Fuqua Date: Fri, 17 Nov 2023 23:01:04 +0700 Subject: [PATCH 2/2] Convert path separator from Windows to Linux in unit test --- CSharpRepl.Tests/ReadEvalPrintLoopTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs b/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs index 2976990..9ad79f5 100644 --- a/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs +++ b/CSharpRepl.Tests/ReadEvalPrintLoopTests.cs @@ -129,7 +129,7 @@ public async Task RunAsync_LoadScriptByFilePath_RunsScript() ); await repl.RunAsync(new Configuration( - loadScript: "#load \"Data\\LoadScript.csx\"" + loadScript: "#load \"Data/LoadScript.csx\"" )); Assert.DoesNotContain("Exception", console.AnsiConsole.Output);