diff options
author | Ankit Jain <radical@gmail.com> | 2020-02-20 00:12:44 +0300 |
---|---|---|
committer | Ankit Jain <radical@gmail.com> | 2020-02-22 03:43:07 +0300 |
commit | cbc722ddaf829fb19015700edd6a034d6df1bcdf (patch) | |
tree | 04ac505f680a50a414b62248755b49cfd0d87a32 /sdks/wasm/DebuggerTestSuite | |
parent | 7707eda633358b3036a227add9c809cb40d19a67 (diff) |
[wasm][debugger] SetException on all the inspector waiters for uncaught exceptions
Diffstat (limited to 'sdks/wasm/DebuggerTestSuite')
-rw-r--r-- | sdks/wasm/DebuggerTestSuite/Support.cs | 8 | ||||
-rw-r--r-- | sdks/wasm/DebuggerTestSuite/Tests.cs | 35 |
2 files changed, 43 insertions, 0 deletions
diff --git a/sdks/wasm/DebuggerTestSuite/Support.cs b/sdks/wasm/DebuggerTestSuite/Support.cs index 38b844fc289..a9ffeff99be 100644 --- a/sdks/wasm/DebuggerTestSuite/Support.cs +++ b/sdks/wasm/DebuggerTestSuite/Support.cs @@ -42,6 +42,12 @@ namespace DebuggerTests eventListeners[evtName] = cb; } + void FailAllWaitersWithException (JObject exception) + { + foreach (var tcs in notifications.Values) + tcs.SetException (new ArgumentException (exception.ToString ())); + } + async Task OnMessage(string method, JObject args, CancellationToken token) { //System.Console.WriteLine("OnMessage " + method + args); @@ -58,6 +64,8 @@ namespace DebuggerTests } if (eventListeners.ContainsKey (method)) await eventListeners[method](args, token); + else if (String.Compare (method, "Runtime.exceptionThrown") == 0) + FailAllWaitersWithException (args); } public async Task Ready (Func<InspectorClient, CancellationToken, Task> cb = null, TimeSpan? span = null) { diff --git a/sdks/wasm/DebuggerTestSuite/Tests.cs b/sdks/wasm/DebuggerTestSuite/Tests.cs index 9f621caaac8..8fd1ff368f6 100644 --- a/sdks/wasm/DebuggerTestSuite/Tests.cs +++ b/sdks/wasm/DebuggerTestSuite/Tests.cs @@ -31,6 +31,8 @@ namespace DebuggerTests dbgUrl = arrStr[0] + "/" + arrStr[1] + "/" + arrStr[2] + "/" + arrStr[arrStr.Length - 1]; dicScriptsIdToUrl[script_id] = dbgUrl; dicFileToUrl[dbgUrl] = args["url"]?.Value<string>(); + } else if (!String.IsNullOrEmpty (url)) { + dicFileToUrl[new Uri (url).AbsolutePath] = url; } await Task.FromResult (0); }); @@ -160,6 +162,39 @@ namespace DebuggerTests }); } + [Fact] + public async Task ExceptionThrownInJSOutOfBand () { + var insp = new Inspector (); + + //Collect events + var scripts = SubscribeToScripts(insp); + + await Ready (); + await insp.Ready (async (cli, token) => { + var bp1_req = JObject.FromObject(new { + lineNumber = 27, + columnNumber = 2, + url = dicFileToUrl["/debugger-driver.html"], + }); + + var bp1_res = await cli.SendCommand ("Debugger.setBreakpointByUrl", bp1_req, token); + Assert.True (bp1_res.IsOk); + + var eval_req = JObject.FromObject(new { + expression = "window.setTimeout(function() { invoke_bad_js_test(); }, 1);", + }); + + var eval_res = await cli.SendCommand ("Runtime.evaluate", eval_req, token); + // Response here will be the id for the timer from JS! + Assert.True (eval_res.IsOk); + + var ex = await Assert.ThrowsAsync<ArgumentException> (async () => await insp.WaitFor("Runtime.exceptionThrown")); + var ex_json = JObject.Parse (ex.Message); + Assert.Equal (dicFileToUrl["/debugger-driver.html"], ex_json ["exceptionDetails"]? ["url"]? .Value<string> ()); + }); + + } + void CheckNumber (JToken locals, string name, int value) { foreach (var l in locals) { if (name != l["name"]?.Value<string> ()) |