From b3ef656ec980699238c948c1af5bc1b52e5ef131 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 20 Aug 2022 14:12:45 -0700 Subject: [PATCH] [release/7.0-rc1] [wasm] Unwrap exception when calling entrypoint (#74263) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Unwrap exception, * WBT. Co-authored-by: Marek FiĊĦera --- .../JavaScript/Interop/JavaScriptExports.cs | 3 +++ .../Wasm.Build.Tests/WasmBuildAppTest.cs | 20 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs index 3c7ba82f162641..3a884729fedfbf 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs @@ -85,6 +85,9 @@ public static void CallEntrypoint(JSMarshalerArgument* arguments_buffer) } catch (Exception ex) { + if (ex is TargetInvocationException refEx && refEx.InnerException != null) + ex = refEx.InnerException; + arg_exc.ToJS(ex); } } diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/WasmBuildAppTest.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/WasmBuildAppTest.cs index 8a2eaa9f8b0b1c..a1aeee5933cf92 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/WasmBuildAppTest.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/WasmBuildAppTest.cs @@ -55,6 +55,18 @@ public static int Main() } }", buildArgs, host, id); + [Theory] + [MemberData(nameof(MainMethodTestData), parameters: new object[] { /*aot*/ false, RunHost.All })] + public void ExceptionFromMain(BuildArgs buildArgs, RunHost host, string id) + => TestMain("main_exception", """ + using System; + using System.Threading.Tasks; + + public class TestClass { + public static int Main() => throw new Exception("MessageFromMyException"); + } + """, buildArgs, host, id, expectedExitCode: 71, expectedOutput: "Error: MessageFromMyException"); + private static string s_bug49588_ProgramCS = @" using System; public class TestClass { @@ -165,7 +177,9 @@ protected void TestMain(string projectName, RunHost host, string id, string extraProperties = "", - bool? dotnetWasmFromRuntimePack = null) + bool? dotnetWasmFromRuntimePack = null, + int expectedExitCode = 42, + string expectedOutput = "Hello, World!") { buildArgs = buildArgs with { ProjectName = projectName }; buildArgs = ExpandBuildArgs(buildArgs, extraProperties); @@ -179,8 +193,8 @@ protected void TestMain(string projectName, InitProject: () => File.WriteAllText(Path.Combine(_projectDir!, "Program.cs"), programText), DotnetWasmFromRuntimePack: dotnetWasmFromRuntimePack)); - RunAndTestWasmApp(buildArgs, expectedExitCode: 42, - test: output => Assert.Contains("Hello, World!", output), host: host, id: id); + RunAndTestWasmApp(buildArgs, expectedExitCode: expectedExitCode, + test: output => Assert.Contains(expectedOutput, output), host: host, id: id); } } }