79 lines
2.6 KiB
JavaScript
79 lines
2.6 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
|
|
|
|
"use strict";
|
|
|
|
// This test focuses on verifying that the conditional breakpoint are trigerred.
|
|
|
|
add_task(async function () {
|
|
const dbg = await initDebugger("doc-scripts.html", "simple2.js");
|
|
|
|
await selectSource(dbg, "simple2.js");
|
|
|
|
info("Set condition `x === 1` in the foo function, and pause");
|
|
await setConditionalBreakpoint(dbg, 5, "x === 1");
|
|
|
|
invokeInTab("foo", /* x */ 1);
|
|
await waitForPaused(dbg);
|
|
ok(true, "Conditional breakpoint was hit");
|
|
await resume(dbg);
|
|
|
|
await removeBreakpoint(dbg, findSource(dbg, "simple2.js").id, 5);
|
|
|
|
info("Set condition `x === 2` in the foo function, and do not pause");
|
|
await setConditionalBreakpoint(dbg, 5, "x == 2");
|
|
|
|
invokeInTab("foo", /* x */ 1);
|
|
// Let some time for a leftover breakpoint to be hit
|
|
await wait(500);
|
|
assertNotPaused(dbg);
|
|
|
|
await removeBreakpoint(dbg, findSource(dbg, "simple2.js").id, 5);
|
|
|
|
info("Set condition `foo(` (syntax error), and pause on the exception");
|
|
await setConditionalBreakpoint(dbg, 5, "foo(");
|
|
|
|
invokeInTab("main");
|
|
await waitForPaused(dbg);
|
|
let whyPaused = dbg.win.document.querySelector(".why-paused").innerText;
|
|
is(
|
|
whyPaused,
|
|
"Error with conditional breakpoint\nfoo - simple2.js:5:2\nexpected expression, got end of script"
|
|
);
|
|
await resume(dbg);
|
|
assertNotPaused(dbg);
|
|
|
|
info(
|
|
"Retrigger the same breakpoint with pause on exception enabled and ensure it still reports the exception and only once"
|
|
);
|
|
await togglePauseOnExceptions(dbg, true, false);
|
|
|
|
invokeInTab("main");
|
|
await waitForPaused(dbg);
|
|
whyPaused = dbg.win.document.querySelector(".why-paused").innerText;
|
|
is(
|
|
whyPaused,
|
|
"Error with conditional breakpoint\nfoo - simple2.js:5:2\nexpected expression, got end of script"
|
|
);
|
|
await resume(dbg);
|
|
|
|
// Let some time for a duplicated breakpoint to be hit
|
|
await wait(500);
|
|
assertNotPaused(dbg);
|
|
|
|
await removeBreakpoint(dbg, findSource(dbg, "simple2.js").id, 5);
|
|
});
|
|
|
|
async function setConditionalBreakpoint(dbg, index, condition) {
|
|
// Make this work with either add or edit menu items
|
|
const { addConditionItem, editConditionItem } = selectors;
|
|
const selector = `${addConditionItem},${editConditionItem}`;
|
|
rightClickElement(dbg, "gutterElement", index);
|
|
await waitForContextMenu(dbg);
|
|
selectContextMenuItem(dbg, selector);
|
|
const dispatched = waitForDispatch(dbg.store, "SET_BREAKPOINT");
|
|
typeInPanel(dbg, condition);
|
|
await dispatched;
|
|
await waitForCondition(dbg, condition);
|
|
}
|