Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnkit Jain <radical@gmail.com>2020-02-20 00:12:44 +0300
committerAnkit Jain <radical@gmail.com>2020-02-22 03:43:07 +0300
commitcbc722ddaf829fb19015700edd6a034d6df1bcdf (patch)
tree04ac505f680a50a414b62248755b49cfd0d87a32 /sdks/wasm/DebuggerTestSuite
parent7707eda633358b3036a227add9c809cb40d19a67 (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.cs8
-rw-r--r--sdks/wasm/DebuggerTestSuite/Tests.cs35
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> ())