Bug 1333219 - Allow setBreakpoint on server fail when script is absent. r=jlast

MozReview-Commit-ID: 4CDeTToUPfi

--HG--
extra : rebase_source : caba187788fd05566871827936fe6140d244946e
This commit is contained in:
Yury Delendik 2017-01-30 13:53:42 -06:00
parent 54a4bc08ea
commit 9a8debf6a5
3 changed files with 87 additions and 6 deletions

View File

@ -795,12 +795,15 @@ let SourceActor = ActorClassWithSpec(sourceSpec, {
// because we found scripts on the line we started from,
// which means there must be valid entry points somewhere
// within those scripts.
assert(
actualLine <= maxLine,
"Could not find any entry points to set a breakpoint on, " +
"even though I was told a script existed on the line I started " +
"the search with."
);
if (actualLine > maxLine) {
return promise.reject({
error: "noCodeAtLineColumn",
message:
"Could not find any entry points to set a breakpoint on, " +
"even though I was told a script existed on the line I started " +
"the search with."
});
}
// Update the actor to use the new location (reusing a
// previous breakpoint if it already exists on that line).

View File

@ -0,0 +1,77 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Bug 1333219 - make that setBreakpoint fails when script is not found
* at the specified line.
*/
var gDebuggee;
var gClient;
var gThreadClient;
var gCallback;
function run_test()
{
run_test_with_server(DebuggerServer, function () {
run_test_with_server(WorkerDebuggerServer, do_test_finished);
});
do_test_pending();
}
function run_test_with_server(aServer, aCallback)
{
gCallback = aCallback;
initTestDebuggerServer(aServer);
gDebuggee = addTestGlobal("test-breakpoints", aServer);
gClient = new DebuggerClient(aServer.connectPipe());
gClient.connect().then(function () {
attachTestTabAndResume(gClient,
"test-breakpoints",
function (aResponse, aTabClient, aThreadClient) {
gThreadClient = aThreadClient;
test();
});
});
}
const test = Task.async(function* () {
// Populate the `ScriptStore` so that we only test that the script
// is added through `onNewScript`
yield getSources(gThreadClient);
let packet = yield executeOnNextTickAndWaitForPause(evalCode, gClient);
let source = gThreadClient.source(packet.frame.where.source);
let location = {
line: gDebuggee.line0 + 2
};
let [res, bpClient] = yield setBreakpoint(source, location);
ok(!res.error);
let location2 = {
line: gDebuggee.line0 + 5
};
yield source.setBreakpoint(location2).then(_ => {
do_throw("no code shall not be found the specified line or below it");
}, reason => {
do_check_eq(reason.error, "noCodeAtLineColumn");
ok(reason.message);
});
yield resume(gThreadClient);
finishClient(gClient);
});
function evalCode() {
// Start a new script
Components.utils.evalInSandbox(`
var line0 = Error().lineNumber;
function some_function() {
// breakpoint is valid here -- it slides one line below (line0 + 2)
}
debugger;
// no breakpoint is allowed here (line0 + 5)
`, gDebuggee);
}

View File

@ -130,6 +130,7 @@ skip-if = true
reason = bug 1104838
[test_breakpoint-20.js]
[test_breakpoint-21.js]
[test_breakpoint-22.js]
[test_conditional_breakpoint-01.js]
[test_conditional_breakpoint-02.js]
[test_conditional_breakpoint-03.js]