diff --git a/MLS.Agent.Tests/CommandLine/VerifyCommandTests.cs b/MLS.Agent.Tests/CommandLine/VerifyCommandTests.cs index b41e5860e..384f7d966 100644 --- a/MLS.Agent.Tests/CommandLine/VerifyCommandTests.cs +++ b/MLS.Agent.Tests/CommandLine/VerifyCommandTests.cs @@ -805,6 +805,37 @@ DOES NOT COMPILE resultCode.Should().NotBe(0); } + [Fact] + public async Task When_markdown_has_Program_with_a_region_and_markdown_has_destination_file_then_validation_succeeds() + { + var root = Create.EmptyWorkspace(isRebuildablePackage: true).Directory; + + var directoryAccessor = new InMemoryDirectoryAccessor(root, root) + { + ("./subFolder/some.csproj", CsprojContents), + ("Program.cs", CompilingProgramWithRegionCs), + ("doc.md", $@" +```cs --destination-file Program.cs --region targetRegion +Console.WriteLine(""This code should be compiled with the targetRegion in Program.cs""); +``` +") + }.CreateFiles(); + + var console = new TestConsole(); + var project = directoryAccessor.GetFullyQualifiedPath(new RelativeFilePath("./subFolder/some.csproj")); + + var resultCode = await VerifyCommand.Do( + new VerifyOptions(root), + console, + () => directoryAccessor, + PackageRegistry.CreateForTryMode(root), + new StartupOptions(package: project.FullName) + ); + + _output.WriteLine(console.Out.ToString()); + + resultCode.Should().Be(0); + } } } diff --git a/MLS.Agent.Tests/LocalToolPackageDiscoveryStrategyTests.cs b/MLS.Agent.Tests/LocalToolPackageDiscoveryStrategyTests.cs index c3e77232e..89d22d204 100644 --- a/MLS.Agent.Tests/LocalToolPackageDiscoveryStrategyTests.cs +++ b/MLS.Agent.Tests/LocalToolPackageDiscoveryStrategyTests.cs @@ -10,6 +10,8 @@ using Xunit; using Xunit.Abstractions; using WorkspaceServer; +using System.IO; +using System.Linq; namespace MLS.Agent.Tests { @@ -29,14 +31,15 @@ public async Task Discover_tool_from_directory() { var console = new TestConsole(); var temp = directory.Directory; - var asset = (await Create.ConsoleWorkspaceCopy()).Directory; - await PackCommand.Do(new PackOptions(asset, outputDirectory: temp, enableWasm: false), console); - var result = await Tools.CommandLine.Execute("dotnet", $"tool install --add-source {temp.FullName} console --tool-path {temp.FullName}"); + var package = await Create.ConsoleWorkspaceCopy(); + File.Move(package.Directory.GetFiles("*.csproj").First().FullName, Path.Combine(package.Directory.FullName, "not-console.csproj")); + await PackCommand.Do(new PackOptions(package.Directory, outputDirectory: temp, enableWasm: false), console); + var result = await Tools.CommandLine.Execute("dotnet", $"tool install --add-source {temp.FullName} not-console --tool-path {temp.FullName}"); output.WriteLine(string.Join("\n", result.Error)); result.ExitCode.Should().Be(0); var strategy = new LocalToolInstallingPackageDiscoveryStrategy(temp); - var tool = await strategy.Locate(new PackageDescriptor("console")); + var tool = await strategy.Locate(new PackageDescriptor("not-console")); tool.Should().NotBeNull(); } } diff --git a/MLS.Agent/Markdown/AnnotatedCodeBlockExtensions.cs b/MLS.Agent/Markdown/AnnotatedCodeBlockExtensions.cs index 0a6293e4b..beecc33d8 100644 --- a/MLS.Agent/Markdown/AnnotatedCodeBlockExtensions.cs +++ b/MLS.Agent/Markdown/AnnotatedCodeBlockExtensions.cs @@ -16,7 +16,8 @@ public static Buffer GetBufferAsync( { if (block.Annotations is LocalCodeBlockAnnotations localOptions) { - var absolutePath = directoryAccessor.GetFullyQualifiedPath(localOptions.SourceFile).FullName; + var file = localOptions.SourceFile ?? localOptions.DestinationFile; + var absolutePath = directoryAccessor.GetFullyQualifiedPath(file).FullName; var bufferId = new BufferId(absolutePath, block.Annotations.Region); return new Buffer(bufferId, block.SourceCode); } diff --git a/WorkspaceServer.Tests/AspNetWorkspaceTests.cs b/WorkspaceServer.Tests/AspNetWorkspaceTests.cs index 5081e6a68..758020b05 100644 --- a/WorkspaceServer.Tests/AspNetWorkspaceTests.cs +++ b/WorkspaceServer.Tests/AspNetWorkspaceTests.cs @@ -38,7 +38,8 @@ public async Task Run_starts_the_kestrel_server_and_provides_a_WebServer_feature { var registry = Default.PackageFinder; var server = new RoslynWorkspaceServer(registry); - var package = await registry.Get("aspnet.webapi"); + var package = await registry.Get("aspnet.webapi"); + await package.CreateRoslynWorkspaceAsync(new Budget()); // ensure the package exists on disk var workspace = WorkspaceFactory.CreateWorkspaceFromDirectory(package.Directory, "aspnet.webapi"); diff --git a/WorkspaceServer.Tests/RoslynWorkspaceServerConsoleProjectTests.cs b/WorkspaceServer.Tests/RoslynWorkspaceServerConsoleProjectTests.cs index f8dc8d2ff..d42645610 100644 Binary files a/WorkspaceServer.Tests/RoslynWorkspaceServerConsoleProjectTests.cs and b/WorkspaceServer.Tests/RoslynWorkspaceServerConsoleProjectTests.cs differ