mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-20 03:13:09 +09:00
80 lines
2.7 KiB
JavaScript
80 lines
2.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Tests opening the variable inspection popup while stopped at a debugger statement,
|
|
* clicking "step in" and verifying that the popup is gone.
|
|
*/
|
|
|
|
const TAB_URL = EXAMPLE_URL + "doc_with-frame.html";
|
|
|
|
let gTab, gPanel, gDebugger;
|
|
let actions, gSources, gVariables;
|
|
|
|
function test() {
|
|
let options = {
|
|
source: TAB_URL,
|
|
line: 1
|
|
};
|
|
initDebugger(TAB_URL, options).then(([aTab,, aPanel]) => {
|
|
gTab = aTab;
|
|
gPanel = aPanel;
|
|
gDebugger = gPanel.panelWin;
|
|
actions = bindActionCreators(gPanel);
|
|
gSources = gDebugger.DebuggerView.Sources;
|
|
gVariables = gDebugger.DebuggerView.Variables;
|
|
let bubble = gDebugger.DebuggerView.VariableBubble;
|
|
let tooltip = bubble._tooltip.panel;
|
|
let testPopupHiding = Task.async(function* () {
|
|
yield addBreakpoint();
|
|
yield ensureThreadClientState(gPanel, "resumed");
|
|
yield pauseDebuggee();
|
|
yield openVarPopup(gPanel, { line: 20, ch: 17 });
|
|
is(tooltip.querySelectorAll(".devtools-tooltip-simple-text").length, 1,
|
|
"The popup should be open with a simple text entry");
|
|
// Now we're stopped at a breakpoint with an open popup
|
|
// we'll send a keypress and check if the popup closes
|
|
executeSoon(() => EventUtils.synthesizeKey("VK_F11", {}));
|
|
// The keypress should cause one resumed event and one paused event
|
|
yield waitForThreadEvents(gPanel, "resumed");
|
|
yield waitForThreadEvents(gPanel, "paused");
|
|
// Here's the state we're actually interested in checking..
|
|
checkVariablePopupClosed(bubble);
|
|
yield resumeDebuggerThenCloseAndFinish(gPanel);
|
|
});
|
|
testPopupHiding();
|
|
});
|
|
}
|
|
|
|
function addBreakpoint() {
|
|
return actions.addBreakpoint({ actor: gSources.selectedValue, line: 21 });
|
|
}
|
|
|
|
function pauseDebuggee() {
|
|
generateMouseClickInTab(gTab, "content.document.querySelector('button')");
|
|
|
|
// The first 'with' scope should be expanded by default, but the
|
|
// variables haven't been fetched yet. This is how 'with' scopes work.
|
|
return promise.all([
|
|
waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FETCHED_SCOPES),
|
|
waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FETCHED_VARIABLES)
|
|
]);
|
|
}
|
|
|
|
function checkVariablePopupClosed(bubble) {
|
|
ok(!bubble.contentsShown(),
|
|
"When stepping, popup should close and be hidden.");
|
|
ok(bubble._tooltip.isEmpty(),
|
|
"The variable inspection popup should now be empty.");
|
|
ok(!bubble._markedText,
|
|
"The marked text in the editor was removed.");
|
|
}
|
|
|
|
registerCleanupFunction(function () {
|
|
gTab = null;
|
|
gPanel = null;
|
|
gDebugger = null;
|
|
actions = null;
|
|
gSources = null;
|
|
gVariables = null;
|
|
});
|