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
81
82
83
84
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/test-bug-632347-iterators-generators.html";
function test() {
requestLongerTimeout(6);
loadTab(TEST_URI).then(() => {
openConsole().then(consoleOpened);
});
}
function consoleOpened(HUD) {
let {JSPropertyProvider} = require("devtools/shared/webconsole/js-property-provider");
let tmp = Cu.import("resource://gre/modules/jsdebugger.jsm", {});
tmp.addDebuggerToGlobal(tmp);
let dbg = new tmp.Debugger();
let jsterm = HUD.jsterm;
let win = content.wrappedJSObject;
let dbgWindow = dbg.addDebuggee(content);
let container = win._container;
// Make sure autocomplete does not walk through iterators and generators.
let result = container.gen1.next();
let completion = JSPropertyProvider(dbgWindow, null, "_container.gen1.");
isnot(completion.matches.length, 0, "Got matches for gen1");
is(result + 1, container.gen1.next(), "gen1.next() did not execute");
result = container.gen2.next().value;
completion = JSPropertyProvider(dbgWindow, null, "_container.gen2.");
isnot(completion.matches.length, 0, "Got matches for gen2");
is((result / 2 + 1) * 2, container.gen2.next().value,
"gen2.next() did not execute");
result = container.iter1.next();
is(result[0], "foo", "iter1.next() [0] is correct");
is(result[1], "bar", "iter1.next() [1] is correct");
completion = JSPropertyProvider(dbgWindow, null, "_container.iter1.");
isnot(completion.matches.length, 0, "Got matches for iter1");
result = container.iter1.next();
is(result[0], "baz", "iter1.next() [0] is correct");
is(result[1], "baaz", "iter1.next() [1] is correct");
let dbgContent = dbg.makeGlobalObjectReference(content);
completion = JSPropertyProvider(dbgContent, null, "_container.iter2.");
isnot(completion.matches.length, 0, "Got matches for iter2");
completion = JSPropertyProvider(dbgWindow, null, "window._container.");
ok(completion, "matches available for window._container");
ok(completion.matches.length, "matches available for window (length)");
dbg.removeDebuggee(content);
jsterm.clearOutput();
jsterm.execute("window._container", (msg) => {
jsterm.once("variablesview-fetched", testVariablesView.bind(null, HUD));
let anchor = msg.querySelector(".message-body a");
EventUtils.synthesizeMouse(anchor, 2, 2, {}, HUD.iframeWindow);
});
}
function testVariablesView(aWebconsole, aEvent, aView) {
findVariableViewProperties(aView, [
{ name: "gen1", isGenerator: true },
{ name: "gen2", isGenerator: true },
{ name: "iter1", isIterator: true },
{ name: "iter2", isIterator: true },
], { webconsole: aWebconsole }).then(function () {
executeSoon(finishTest);
});
}
|