1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
/* 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;
});
|