michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // Test that ObjectClient.prototype.getDefinitionSite and the "definitionSite" michael@0: // request work properly. michael@0: michael@0: var gDebuggee; michael@0: var gClient; michael@0: var gThreadClient; michael@0: michael@0: function run_test() michael@0: { michael@0: initTestDebuggerServer(); michael@0: gDebuggee = addTestGlobal("test-grips"); michael@0: gDebuggee.eval(function stopMe() { michael@0: debugger; michael@0: }.toString()); michael@0: michael@0: gClient = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: gClient.connect(function() { michael@0: attachTestTabAndResume(gClient, "test-grips", function(aResponse, aTabClient, aThreadClient) { michael@0: gThreadClient = aThreadClient; michael@0: add_pause_listener(); michael@0: }); michael@0: }); michael@0: do_test_pending(); michael@0: } michael@0: michael@0: function add_pause_listener() michael@0: { michael@0: gThreadClient.addOneTimeListener("paused", function(aEvent, aPacket) { michael@0: const [funcGrip, objGrip] = aPacket.frame.arguments; michael@0: const func = gThreadClient.pauseGrip(funcGrip); michael@0: const obj = gThreadClient.pauseGrip(objGrip); michael@0: test_definition_site(func, obj); michael@0: }); michael@0: michael@0: eval_code(); michael@0: } michael@0: michael@0: function eval_code() { michael@0: gDebuggee.eval([ michael@0: "this.line0 = Error().lineNumber;", michael@0: "function f() {}", michael@0: "stopMe(f, {});" michael@0: ].join("\n")); michael@0: } michael@0: michael@0: function test_definition_site(func, obj) { michael@0: func.getDefinitionSite(({ error, url, line, column }) => { michael@0: do_check_true(!error); michael@0: do_check_eq(url, getFilePath("test_objectgrips-13.js")); michael@0: do_check_eq(line, gDebuggee.line0 + 1); michael@0: do_check_eq(column, 0); michael@0: michael@0: test_bad_definition_site(obj); michael@0: }); michael@0: } michael@0: michael@0: function test_bad_definition_site(obj) { michael@0: try { michael@0: obj._client.request("definitionSite", () => do_check_true(false)); michael@0: } catch (e) { michael@0: gThreadClient.resume(() => finishClient(gClient)); michael@0: } michael@0: }