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
85
|
/* 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/. */
// Test that console API calls in the content page appear in the browser console.
"use strict";
const TEST_URI = `data:text/html,<!DOCTYPE html><meta charset=utf8>console API calls<script>
console.log({ contentObject: "YAY!", deep: ["yes!"] });
</script>`;
add_task(async function () {
// Show the content messages
await pushPref("devtools.browsertoolbox.scope", "everything");
await addTab(TEST_URI);
info("Open the Browser Console");
let hud = await BrowserConsoleManager.toggleBrowserConsole();
info("Wait until the content object is displayed");
let objectMessage = await waitFor(() =>
findConsoleAPIMessage(
hud,
`Object { contentObject: "YAY!", deep: (1) […] }`
)
);
ok(true, "Content object is displayed in the Browser Console");
await testExpandObject(objectMessage);
info("Restart the Browser Console");
await safeCloseBrowserConsole();
hud = await BrowserConsoleManager.toggleBrowserConsole();
info("Wait until the content object is displayed");
objectMessage = await waitFor(() =>
findConsoleAPIMessage(
hud,
`Object { contentObject: "YAY!", deep: (1) […] }`
)
);
ok(true, "Content object is displayed in the Browser Console after restart");
await testExpandObject(objectMessage);
});
async function testExpandObject(objectMessage) {
info("Check that the logged content object can be expanded");
const oi = objectMessage.querySelector(".tree");
ok(oi, "There's an object inspector component for the content object");
oi.querySelector(".arrow").click();
// The object inspector now looks like:
// ▼ Object { contentObject: "YAY!", deep: (1) […] }
// | contentObject: "YAY!"
// | ▶︎ deep: Array [ "yes!" ]
// | ▶︎ <prototype>
await waitFor(() => oi.querySelectorAll(".node").length === 4);
ok(true, "The ObjectInspector was expanded");
const [root, contentObjectProp, deepProp, prototypeProp] = [
...oi.querySelectorAll(".node"),
];
ok(
root.textContent.includes('Object { contentObject: "YAY!", deep: (1) […] }')
);
ok(contentObjectProp.textContent.includes(`contentObject: "YAY!"`));
ok(deepProp.textContent.includes(`deep: Array [ "yes!" ]`));
ok(prototypeProp.textContent.includes(`<prototype>`));
// The object inspector now looks like:
// ▼ Object { contentObject: "YAY!", deep: (1) […] }
// | contentObject: "YAY!"
// | ▼︎ deep: (1) […]
// | | 0: "yes!"
// | | length: 1
// | | ▶︎ <prototype>
// | ▶︎ <prototype>
deepProp.querySelector(".arrow").click();
await waitFor(() => oi.querySelectorAll(".node").length === 7);
ok(true, "The nested array was expanded");
}
|