From 2bc5f01507b6a621cc6f8bb2a1c3cada741cfc0d Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Sun, 13 Aug 2023 03:19:42 +0000 Subject: [PATCH 1/4] [wasm] Remove all instances of `ConditionalTheory IsUsingWorkloads` .. because we run tests in two modes: 1. with workloads - all the tests *without* `no-workload` category are run (thus the default) 2. no workloads - all the tests *with* `no-workload` category are run (thus need explicitly attributes) --- .../Blazor/SimpleMultiThreadedTests.cs | 2 +- .../wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs | 2 +- src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs | 2 +- .../Wasm.Build.Tests/PInvokeTableGeneratorTests.cs | 2 +- .../Wasm.Build.Tests/Templates/WasmTemplateTests.cs | 10 +++++----- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleMultiThreadedTests.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleMultiThreadedTests.cs index 2815259aa9849e..c28f18a3c57469 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleMultiThreadedTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleMultiThreadedTests.cs @@ -21,7 +21,7 @@ public SimpleMultiThreadedTests(ITestOutputHelper output, SharedBuildPerTestClas } // dotnet-run needed for running with *build* so wwwroot has the index.html etc - // [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + // [Theory] // [InlineData("Debug")] // [InlineData("Release")] // public async Task BlazorBuildRunTest(string config) diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs index 3a8968c4d1458a..903b67ee61fb3d 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs @@ -22,7 +22,7 @@ public SimpleRunTests(ITestOutputHelper output, SharedBuildPerTestClassFixture b _enablePerTestCleanup = true; } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] [InlineData("Debug")] [InlineData("Release")] public async Task BlazorBuildRunTest(string config) diff --git a/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs b/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs index 94b00ede801293..c8cca6cd0774e7 100644 --- a/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs @@ -91,7 +91,7 @@ public static int Main() Assert.Contains("Size: 26462 Height: 599, Width: 499", output); } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] [BuildAndRun(aot: false, host: RunHost.Chrome)] [BuildAndRun(aot: true, host: RunHost.Chrome)] public void ProjectUsingBrowserNativeCrypto(BuildArgs buildArgs, RunHost host, string id) diff --git a/src/mono/wasm/Wasm.Build.Tests/PInvokeTableGeneratorTests.cs b/src/mono/wasm/Wasm.Build.Tests/PInvokeTableGeneratorTests.cs index 4930b2183a91e8..ff8a7c880453f5 100644 --- a/src/mono/wasm/Wasm.Build.Tests/PInvokeTableGeneratorTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/PInvokeTableGeneratorTests.cs @@ -375,7 +375,7 @@ public static int Main() Assert.Matches("warning\\sWASM0001.*Skipping.*Test::SomeFunction1.*because.*function\\spointer", output); } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] [BuildAndRun(host: RunHost.None)] public void IcallWithOverloadedParametersAndEnum(BuildArgs buildArgs, string id) { diff --git a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs index 0688948f84d676..5ad4ac4d6320ae 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs @@ -179,7 +179,7 @@ public void ConsoleBuildThenPublish(string config) IsBrowserProject: false)); } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] [InlineData("Debug", false)] [InlineData("Debug", true)] [InlineData("Release", false)] @@ -187,7 +187,7 @@ public void ConsoleBuildThenPublish(string config) public void ConsoleBuildAndRunDefault(string config, bool relinking) => ConsoleBuildAndRun(config, relinking, string.Empty, DefaultTargetFramework); - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] // [ActiveIssue("https://github.com/dotnet/runtime/issues/79313")] // [InlineData("Debug", "-f net7.0", "net7.0")] [InlineData("Debug", "-f net8.0", "net8.0")] @@ -253,7 +253,7 @@ void AddTestData(bool forConsole, bool runOutsideProjectDirectory) return data; } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] [MemberData(nameof(TestDataForAppBundleDir))] public async Task RunWithDifferentAppBundleLocations(bool forConsole, bool runOutsideProjectDirectory, string extraProperties) => await (forConsole @@ -354,7 +354,7 @@ public static TheoryData TestDataForConsolePublishAndRun() return data; } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] [MemberData(nameof(TestDataForConsolePublishAndRun))] public void ConsolePublishAndRun(string config, bool aot, bool relinking) { @@ -406,7 +406,7 @@ public void ConsolePublishAndRun(string config, bool aot, bool relinking) Assert.Contains("args[2] = z", res.Output); } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] [InlineData("", BuildTestBase.DefaultTargetFramework, DefaultRuntimeAssetsRelativePath)] [InlineData("", BuildTestBase.DefaultTargetFramework, "./")] // [ActiveIssue("https://github.com/dotnet/runtime/issues/79313")] From b78153f5c25dd584a8be2dd6d9845ca32b8beb0a Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Sun, 13 Aug 2023 03:21:29 +0000 Subject: [PATCH 2/4] Allow custom bin framework dirs for asserting bundles --- .../Blazor/BlazorBuildOptions.cs | 4 +- .../Blazor/BlazorWasmProjectProvider.cs | 2 +- .../Blazor/BlazorWasmTestBase.cs | 38 +++++++++---------- .../Wasm.Build.Tests/BuildProjectOptions.cs | 3 +- .../TestMainJsProjectProvider.cs | 3 +- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorBuildOptions.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorBuildOptions.cs index f8ccf6a5e31408..025ea7e38eef88 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorBuildOptions.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorBuildOptions.cs @@ -18,5 +18,7 @@ public record BlazorBuildOptions bool ExpectFingerprintOnDotnetJs = false, RuntimeVariant RuntimeType = RuntimeVariant.SingleThreaded, GlobalizationMode GlobalizationMode = GlobalizationMode.Sharded, - string PredefinedIcudt = "" + string PredefinedIcudt = "", + bool AssertAppBundle = true, + string? BinFrameworkDir = null ); diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs index 6ae7c8c4380dbc..ea6cc51fc6c9fa 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs @@ -18,7 +18,7 @@ public void AssertBundle(BlazorBuildOptions options) Config: options.Config, IsPublish: options.IsPublish, TargetFramework: options.TargetFramework, - BinFrameworkDir: FindBinFrameworkDir(options.Config, options.IsPublish, options.TargetFramework), + BinFrameworkDir: options.BinFrameworkDir ?? FindBinFrameworkDir(options.Config, options.IsPublish, options.TargetFramework), GlobalizationMode: options.GlobalizationMode, PredefinedIcudt: options.PredefinedIcudt, ExpectFingerprintOnDotnetJs: options.ExpectFingerprintOnDotnetJs, diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs index 79f16d31bbd275..c94b660ab1598a 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs @@ -60,7 +60,7 @@ public string CreateBlazorWasmTemplateProject(string id) (CommandResult res, string logPath) = BlazorBuildInternal(options.Id, options.Config, publish: false, setWasmDevel: false, expectSuccess: options.ExpectSuccess, extraArgs); - if (options.ExpectSuccess) + if (options.ExpectSuccess && options.AssertAppBundle) AssertBundle(res.Output, options with { IsPublish = false }); return (res, logPath); @@ -73,26 +73,9 @@ public string CreateBlazorWasmTemplateProject(string id) (CommandResult res, string logPath) = BlazorBuildInternal(options.Id, options.Config, publish: true, setWasmDevel: false, expectSuccess: options.ExpectSuccess, extraArgs); - if (options.ExpectSuccess) + if (options.ExpectSuccess && options.AssertAppBundle) { AssertBundle(res.Output, options with { IsPublish = true }); - - if (options.ExpectedFileType == NativeFilesType.AOT) - { - // check for this too, so we know the format is correct for the negative - // test for jsinterop.webassembly.dll - Assert.Contains("Microsoft.JSInterop.dll -> Microsoft.JSInterop.dll.bc", res.Output); - - // make sure this assembly gets skipped - Assert.DoesNotContain("Microsoft.JSInterop.WebAssembly.dll -> Microsoft.JSInterop.WebAssembly.dll.bc", res.Output); - } - - string objBuildDir = Path.Combine(_projectDir!, "obj", options.Config, options.TargetFramework!, "wasm", "for-build"); - // Check that we linked only for publish - if (options.ExpectRelinkDirWhenPublishing) - Assert.True(Directory.Exists(objBuildDir), $"Could not find expected {objBuildDir}, which gets created when relinking during Build. This is likely a test authoring error"); - else - Assert.False(File.Exists(Path.Combine(objBuildDir, "emcc-link.rsp")), $"Found unexpected files in {objBuildDir}, which gets created when relinking during Build"); } return (res, logPath); @@ -135,6 +118,23 @@ public void AssertBundle(string buildOutput, BlazorBuildOptions blazorBuildOptio } _provider.AssertBundle(blazorBuildOptions); + + if (blazorBuildOptions.ExpectedFileType == NativeFilesType.AOT) + { + // check for this too, so we know the format is correct for the negative + // test for jsinterop.webassembly.dll + Assert.Contains("Microsoft.JSInterop.dll -> Microsoft.JSInterop.dll.bc", buildOutput); + + // make sure this assembly gets skipped + Assert.DoesNotContain("Microsoft.JSInterop.WebAssembly.dll -> Microsoft.JSInterop.WebAssembly.dll.bc", buildOutput); + } + + string objBuildDir = Path.Combine(_projectDir!, "obj", blazorBuildOptions.Config, blazorBuildOptions.TargetFramework!, "wasm", "for-build"); + // Check that we linked only for publish + if (blazorBuildOptions.ExpectRelinkDirWhenPublishing) + Assert.True(Directory.Exists(objBuildDir), $"Could not find expected {objBuildDir}, which gets created when relinking during Build. This is likely a test authoring error"); + else + Assert.False(File.Exists(Path.Combine(objBuildDir, "emcc-link.rsp")), $"Found unexpected files in {objBuildDir}, which gets created when relinking during Build"); } protected string CreateProjectWithNativeReference(string id) diff --git a/src/mono/wasm/Wasm.Build.Tests/BuildProjectOptions.cs b/src/mono/wasm/Wasm.Build.Tests/BuildProjectOptions.cs index 438dd1e9616576..c86c4cda6e7f93 100644 --- a/src/mono/wasm/Wasm.Build.Tests/BuildProjectOptions.cs +++ b/src/mono/wasm/Wasm.Build.Tests/BuildProjectOptions.cs @@ -26,5 +26,6 @@ public record BuildProjectOptions string TargetFramework = BuildTestBase.DefaultTargetFramework, string? MainJS = null, bool IsBrowserProject = true, - IDictionary? ExtraBuildEnvironmentVariables = null + IDictionary? ExtraBuildEnvironmentVariables = null, + string? BinFrameworkDir = null ); diff --git a/src/mono/wasm/Wasm.Build.Tests/TestMainJsProjectProvider.cs b/src/mono/wasm/Wasm.Build.Tests/TestMainJsProjectProvider.cs index d31a1fad077ba2..7042c4855549d2 100644 --- a/src/mono/wasm/Wasm.Build.Tests/TestMainJsProjectProvider.cs +++ b/src/mono/wasm/Wasm.Build.Tests/TestMainJsProjectProvider.cs @@ -82,7 +82,8 @@ public void AssertBundle(AssertTestMainJsAppBundleOptions assertOptions) public void AssertBundle(BuildArgs buildArgs, BuildProjectOptions buildProjectOptions) { - string binFrameworkDir = FindBinFrameworkDir(buildArgs.Config, + string binFrameworkDir = buildProjectOptions.BinFrameworkDir + ?? FindBinFrameworkDir(buildArgs.Config, buildProjectOptions.Publish, buildProjectOptions.TargetFramework); NativeFilesType expectedFileType = buildArgs.AOT From 9f78e7462748b0f36542d1454d63ec2f4bcdf346 Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Sun, 13 Aug 2023 03:22:12 +0000 Subject: [PATCH 3/4] [wasm] Respect `AppendRuntimeIdentifierToOutputPath`, and .. `UseArtifactsOutput`. Fixes https://github.com/dotnet/runtime/issues/89744 . --- .../Wasi.Build.Tests/WasiTemplateTests.cs | 41 ++++++++++++++ src/mono/wasi/build/WasiApp.targets | 12 ++++- .../Wasm.Build.Tests/Blazor/SimpleRunTests.cs | 44 ++++++++++++++- .../Templates/WasmTemplateTests.cs | 54 +++++++++++++++++++ src/mono/wasm/build/WasmApp.targets | 10 +++- 5 files changed, 157 insertions(+), 4 deletions(-) diff --git a/src/mono/wasi/Wasi.Build.Tests/WasiTemplateTests.cs b/src/mono/wasi/Wasi.Build.Tests/WasiTemplateTests.cs index 85f7bacf6fcea1..dc2829e05bef5e 100644 --- a/src/mono/wasi/Wasi.Build.Tests/WasiTemplateTests.cs +++ b/src/mono/wasi/Wasi.Build.Tests/WasiTemplateTests.cs @@ -138,6 +138,47 @@ public void ConsolePublishAndRunForSingleFileBundle(string config, bool relinkin } + [Theory] + [InlineData("Debug", /*appendRID*/ true, /*useArtifacts*/ false)] + [InlineData("Debug", /*appendRID*/ true, /*useArtifacts*/ true)] + [InlineData("Debug", /*appendRID*/ false, /*useArtifacts*/ false)] + [InlineData("Debug", /*appendRID*/ false, /*useArtifacts*/ true)] + public void ConsoleBuildAndRunForDifferentOutputPaths(string config, bool appendRID, bool useArtifacts) + { + string extraPropertiesForDBP = ""; + if (appendRID) + extraPropertiesForDBP += "true"; + if (useArtifacts) + extraPropertiesForDBP += "true."; + + string id = $"{config}_{GetRandomId()}"; + string projectFile = CreateWasmTemplateProject(id, "wasiconsole"); + string projectName = Path.GetFileNameWithoutExtension(projectFile); + + if (!string.IsNullOrEmpty(extraPropertiesForDBP)) + AddItemsPropertiesToProject(Path.Combine(Path.GetDirectoryName(projectFile)!, "Directory.Build.props"), + extraPropertiesForDBP); + + var buildArgs = new BuildArgs(projectName, config, false, id, null); + buildArgs = ExpandBuildArgs(buildArgs); + + BuildProject(buildArgs, + id: id, + new BuildProjectOptions( + DotnetWasmFromRuntimePack: true, + CreateProject: false, + Publish: false, + TargetFramework: BuildTestBase.DefaultTargetFramework, + UseCache: false)); + + CommandResult res = new RunCommand(s_buildEnv, _testOutput) + .WithWorkingDirectory(_projectDir!) + .ExecuteWithCapturedOutput($"run --no-silent --no-build -c {config} x y z") + .EnsureSuccessful(); + + Assert.Contains("Hello, Wasi Console!", res.Output); + } + private static readonly string s_simpleMainWithArgs = """ using System; diff --git a/src/mono/wasi/build/WasiApp.targets b/src/mono/wasi/build/WasiApp.targets index c5669bc8a561ca..1b8fc4e3fa9333 100644 --- a/src/mono/wasi/build/WasiApp.targets +++ b/src/mono/wasi/build/WasiApp.targets @@ -145,12 +145,20 @@ The path might not have been created yet, for example when creating a new project in VS, so don't use an Exists() check --> - <_AppBundleDirForRunCommand Condition="'$(_AppBundleDirForRunCommand)' == ''">$([System.IO.Path]::Combine($(OutputPath), $(RuntimeIdentifier), 'AppBundle')) + + + <_AppBundleDirForRunCommand Condition="'$(_AppBundleDirForRunCommand)' == '' and '$(UseArtifactsOutput)' == '' and '$(AppendRuntimeIdentifierToOutputPath)' != 'false'">$([System.IO.Path]::Combine($(OutputPath), 'wasi-wasm', 'AppBundle')) + + + <_AppBundleDirForRunCommand Condition="'$(_AppBundleDirForRunCommand)' == ''">$([System.IO.Path]::Combine($(OutputPath), 'AppBundle')) <_AppBundleDirForRunCommand Condition="'$(_AppBundleDirForRunCommand)' != '' and !$([System.IO.Path]::IsPathRooted($(_AppBundleDirForRunCommand)))">$([System.IO.Path]::Combine($(MSBuildProjectDirectory), $(_AppBundleDirForRunCommand))) - + $(DOTNET_HOST_PATH) diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs index 903b67ee61fb3d..fdce8ea756f844 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/SimpleRunTests.cs @@ -34,7 +34,49 @@ public async Task BlazorBuildRunTest(string config) await BlazorRunForBuildWithDotnetRun(new BlazorRunOptions() { Config = config }); } - [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [Theory] + [InlineData("Debug", /*appendRID*/ true, /*useArtifacts*/ false)] + [InlineData("Debug", /*appendRID*/ true, /*useArtifacts*/ true)] + [InlineData("Debug", /*appendRID*/ false, /*useArtifacts*/ true)] + [InlineData("Debug", /*appendRID*/ false, /*useArtifacts*/ false)] + public async Task BlazorBuildAndRunForDifferentOutputPaths(string config, bool appendRID, bool useArtifacts) + { + string id = $"{config}_{GetRandomId()}"; + string projectFile = CreateWasmTemplateProject(id, "blazorwasm"); + string projectName = Path.GetFileNameWithoutExtension(projectFile); + + string extraPropertiesForDBP = ""; + if (appendRID) + extraPropertiesForDBP += "true"; + if (useArtifacts) + extraPropertiesForDBP += "true."; + + string projectDirectory = Path.GetDirectoryName(projectFile)!; + if (!string.IsNullOrEmpty(extraPropertiesForDBP)) + AddItemsPropertiesToProject(Path.Combine(projectDirectory, "Directory.Build.props"), + extraPropertiesForDBP); + + var buildArgs = new BuildArgs(projectName, config, false, id, null); + buildArgs = ExpandBuildArgs(buildArgs); + + BlazorBuildOptions buildOptions = new(id, config, NativeFilesType.FromRuntimePack); + if (useArtifacts) + { + buildOptions = buildOptions with + { + BinFrameworkDir = Path.Combine(projectDirectory, + "bin", + id, + config.ToLower(), + "wwwroot", + "_framework") + }; + } + BlazorBuild(buildOptions); + await BlazorRunForBuildWithDotnetRun(new BlazorRunOptions() { Config = config }); + } + + [Theory] [InlineData("Debug", false)] [InlineData("Debug", true)] [InlineData("Release", false)] diff --git a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs index 5ad4ac4d6320ae..76a64c9fe4e76a 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs @@ -434,5 +434,59 @@ public async Task BrowserBuildAndRun(string extraNewArgs, string targetFramework await runner.WaitForExitMessageAsync(TimeSpan.FromMinutes(2)); Assert.Contains("Hello, Browser!", string.Join(Environment.NewLine, runner.OutputLines)); } + + [Theory] + [InlineData("Debug", /*appendRID*/ true, /*useArtifacts*/ false)] + [InlineData("Debug", /*appendRID*/ true, /*useArtifacts*/ true)] + [InlineData("Debug", /*appendRID*/ false, /*useArtifacts*/ true)] + [InlineData("Debug", /*appendRID*/ false, /*useArtifacts*/ false)] + public void BuildAndRunForDifferentOutputPaths(string config, bool appendRID, bool useArtifacts) + { + string id = $"{config}_{GetRandomId()}"; + string projectFile = CreateWasmTemplateProject(id, "wasmconsole"); + string projectName = Path.GetFileNameWithoutExtension(projectFile); + + string extraPropertiesForDBP = ""; + if (appendRID) + extraPropertiesForDBP += "true"; + if (useArtifacts) + extraPropertiesForDBP += "true."; + + string projectDirectory = Path.GetDirectoryName(projectFile)!; + if (!string.IsNullOrEmpty(extraPropertiesForDBP)) + AddItemsPropertiesToProject(Path.Combine(projectDirectory, "Directory.Build.props"), + extraPropertiesForDBP); + + var buildOptions = new BuildProjectOptions( + DotnetWasmFromRuntimePack: true, + CreateProject: false, + HasV8Script: false, + MainJS: "main.mjs", + Publish: false, + TargetFramework: DefaultTargetFramework, + IsBrowserProject: false); + if (useArtifacts) + { + buildOptions = buildOptions with + { + BinFrameworkDir = Path.Combine( + projectDirectory, + "bin", + id, + $"{config.ToLower()}_{BuildEnvironment.DefaultRuntimeIdentifier}", + "AppBundle", + "_framework") + }; + } + + var buildArgs = new BuildArgs(projectName, config, false, id, null); + buildArgs = ExpandBuildArgs(buildArgs); + BuildTemplateProject(buildArgs, id: id, buildOptions); + + CommandResult res = new RunCommand(s_buildEnv, _testOutput) + .WithWorkingDirectory(_projectDir!) + .ExecuteWithCapturedOutput($"run --no-silent --no-build -c {config} x y z") + .EnsureSuccessful(); + } } } diff --git a/src/mono/wasm/build/WasmApp.targets b/src/mono/wasm/build/WasmApp.targets index 36d6aeb0ceb0d0..be1b7214e2c0bd 100644 --- a/src/mono/wasm/build/WasmApp.targets +++ b/src/mono/wasm/build/WasmApp.targets @@ -175,7 +175,15 @@ The path might not have been created yet, for example when creating a new project in VS, so don't use an Exists() check --> - <_AppBundleDirForRunCommand Condition="'$(_AppBundleDirForRunCommand)' == ''">$([System.IO.Path]::Combine($(OutputPath), 'browser-wasm', 'AppBundle')) + + + <_AppBundleDirForRunCommand Condition="'$(_AppBundleDirForRunCommand)' == '' and '$(UseArtifactsOutput)' == '' and '$(AppendRuntimeIdentifierToOutputPath)' != 'false'">$([System.IO.Path]::Combine($(OutputPath), 'browser-wasm', 'AppBundle')) + + + <_AppBundleDirForRunCommand Condition="'$(_AppBundleDirForRunCommand)' == ''">$([System.IO.Path]::Combine($(OutputPath), 'AppBundle')) From dccad58e258180650696613d872288efe413fdc6 Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Sun, 13 Aug 2023 16:45:56 -0400 Subject: [PATCH 4/4] fix tests --- .../wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs index c94b660ab1598a..ecf4cd7c135678 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs @@ -119,6 +119,11 @@ public void AssertBundle(string buildOutput, BlazorBuildOptions blazorBuildOptio _provider.AssertBundle(blazorBuildOptions); + if (!blazorBuildOptions.IsPublish) + return; + + // Publish specific checks + if (blazorBuildOptions.ExpectedFileType == NativeFilesType.AOT) { // check for this too, so we know the format is correct for the negative @@ -134,7 +139,7 @@ public void AssertBundle(string buildOutput, BlazorBuildOptions blazorBuildOptio if (blazorBuildOptions.ExpectRelinkDirWhenPublishing) Assert.True(Directory.Exists(objBuildDir), $"Could not find expected {objBuildDir}, which gets created when relinking during Build. This is likely a test authoring error"); else - Assert.False(File.Exists(Path.Combine(objBuildDir, "emcc-link.rsp")), $"Found unexpected files in {objBuildDir}, which gets created when relinking during Build"); + Assert.False(File.Exists(Path.Combine(objBuildDir, "emcc-link.rsp")), $"Found unexpected `emcc-link.rsp` in {objBuildDir}, which gets created when relinking during Build."); } protected string CreateProjectWithNativeReference(string id)