From 73962012e546229975007f0ca887a9776930fccc Mon Sep 17 00:00:00 2001 From: "DESKTOP-GEPIA6N\\Thays" Date: Mon, 29 Nov 2021 12:03:29 -0300 Subject: [PATCH] Fix set value. Implement Runtime.evaluate. --- .../BrowserDebugProxy/EvaluateExpression.cs | 2 +- .../debugger/BrowserDebugProxy/MonoProxy.cs | 12 ++++++- .../DebuggerTestSuite/DebuggerTestBase.cs | 31 +++++++++++++++++++ .../EvaluateOnCallFrameTests.cs | 14 +++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/mono/wasm/debugger/BrowserDebugProxy/EvaluateExpression.cs b/src/mono/wasm/debugger/BrowserDebugProxy/EvaluateExpression.cs index 5545a262036979..6e52ae37c528e8 100644 --- a/src/mono/wasm/debugger/BrowserDebugProxy/EvaluateExpression.cs +++ b/src/mono/wasm/debugger/BrowserDebugProxy/EvaluateExpression.cs @@ -329,7 +329,7 @@ internal static async Task CompileAndRunTheExpression(string expression expression = expression.Trim(); if (!expression.StartsWith('(')) { - expression = "(" + expression + ")"; + expression = "(" + expression + "\n)"; } SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(expression + @";", cancellationToken: token); diff --git a/src/mono/wasm/debugger/BrowserDebugProxy/MonoProxy.cs b/src/mono/wasm/debugger/BrowserDebugProxy/MonoProxy.cs index 1238fc7c9761c1..f6689614aafd71 100644 --- a/src/mono/wasm/debugger/BrowserDebugProxy/MonoProxy.cs +++ b/src/mono/wasm/debugger/BrowserDebugProxy/MonoProxy.cs @@ -401,7 +401,17 @@ protected override async Task AcceptCommand(MessageId id, string method, J { return await Step(id, StepKind.Over, token); } - + case "Runtime.evaluate": + { + if (context.CallStack != null) + { + Frame scope = context.CallStack.First(); + return await OnEvaluateOnCallFrame(id, + scope.Id, + args?["expression"]?.Value(), token); + } + break; + } case "Debugger.evaluateOnCallFrame": { if (!DotnetObjectId.TryParse(args?["callFrameId"], out DotnetObjectId objectId)) diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/DebuggerTestBase.cs b/src/mono/wasm/debugger/DebuggerTestSuite/DebuggerTestBase.cs index c908343d9ef820..c94697133d5330 100644 --- a/src/mono/wasm/debugger/DebuggerTestSuite/DebuggerTestBase.cs +++ b/src/mono/wasm/debugger/DebuggerTestSuite/DebuggerTestBase.cs @@ -841,6 +841,37 @@ internal async Task GetProperties(string id, JToken fn_args = null, bool return (null, res); } + internal async Task RuntimeEvaluateAndCheck(params (string expression, JObject expected)[] args) + { + foreach (var arg in args) + { + var (eval_val, _) = await RuntimeEvaluate(arg.expression); + try + { + await CheckValue(eval_val, arg.expected, arg.expression); + } + catch + { + Console.WriteLine($"CheckValue failed for {arg.expression}. Expected: {arg.expected}, vs {eval_val}"); + throw; + } + } + } + internal async Task<(JToken, Result)> RuntimeEvaluate(string expression, bool expect_ok = true) + { + var evaluate_req = JObject.FromObject(new + { + expression = expression + }); + + var res = await cli.SendCommand("Runtime.evaluate", evaluate_req, token); + AssertEqual(expect_ok, res.IsOk, $"Runtime.evaluate ('{expression}') returned {res.IsOk} instead of {expect_ok}, with Result: {res}"); + if (res.IsOk) + return (res.Value["result"], res); + + return (null, res); + } + internal async Task<(JToken, Result)> SetVariableValueOnCallFrame(JObject parms, bool expect_ok = true) { var res = await cli.SendCommand("Debugger.setVariableValue", parms, token); diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrameTests.cs b/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrameTests.cs index b33adf6f944ffc..600067a47be62b 100644 --- a/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrameTests.cs +++ b/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrameTests.cs @@ -840,6 +840,20 @@ await EvaluateOnCallFrameFail(id, (" str", "ReferenceError") ); }); + + [Fact] + public async Task EvaluateConstantValueUsingRuntimeEvaluate() => await CheckInspectLocalsAtBreakpointSite( + "DebuggerTests.EvaluateTestsClass", "EvaluateLocals", 9, "EvaluateLocals", + "window.setTimeout(function() { invoke_static_method ('[debugger-test] DebuggerTests.EvaluateTestsClass:EvaluateLocals'); })", + wait_for_event_fn: async (pause_location) => + { + var dt = new DateTime(2020, 1, 2, 3, 4, 5); + await RuntimeEvaluateAndCheck( + ("15\n//comment as vs does\n", TNumber(15)), + ("15", TNumber(15)), + ("\"15\"\n//comment as vs does\n", TString("15")), + ("\"15\"", TString("15"))); + }); }