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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const MESSAGES = [
"123-456-7890",
"foo@bar.com",
"http://abc.com/q?fizz=buzz&alpha=beta/",
"https://xyz.com/?path=/world",
"FOOoobaaaar",
"123 working",
];
const TEST_URI =
"http://example.com/browser/devtools/client/webconsole/" +
"test/browser/test-console-filter-by-regex-input.html";
add_task(async function () {
const hud = await openNewTabAndConsole(TEST_URI);
const { outputNode } = hud.ui;
await waitFor(() => findConsoleAPIMessage(hud, MESSAGES[5]), null, 200);
let filteredNodes;
info("Filter out messages that begin with numbers");
await setFilterInput(hud, "/^[0-9]/", MESSAGES[5]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[0], MESSAGES[5]], 2);
info("Filter out messages that are phone numbers");
await setFilterInput(hud, "/\\d{3}\\-\\d{3}\\-\\d{4}/", MESSAGES[0]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[0]], 1);
info("Filter out messages that are an email address");
await setFilterInput(hud, "/^\\w+@[a-zA-Z]+\\.[a-zA-Z]{2,3}$/", MESSAGES[1]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[1]], 1);
info("Filter out messages that contain query strings");
await setFilterInput(hud, "/\\?([^=&]+=[^=&]+&?)*\\//", MESSAGES[2]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[2]], 1);
// If regex is invalid, do a normal text search instead
info("Filter messages using normal text search if regex is invalid");
await setFilterInput(hud, "/?path=/", MESSAGES[3]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[3]], 1);
info("Filter out messages not ending with numbers");
await setFilterInput(hud, "/[^0-9]$/", MESSAGES[5]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(
filteredNodes,
[MESSAGES[1], MESSAGES[2], MESSAGES[3], MESSAGES[4], MESSAGES[5]],
5
);
info("Filter out messages ending with numbers");
await setFilterInput(hud, "-/[^0-9]$/", MESSAGES[0]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[0]], 1);
info("Filter out messages starting with 'foo', case-sensitive default");
await setFilterInput(hud, "/^foo/", MESSAGES[1]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[1]], 1);
info("Filter out messages starting with 'FOO', case-sensitive default");
await setFilterInput(hud, "/^FOO/", MESSAGES[4]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[4]], 1);
info(
"Filter out messages starting with 'foo', case-insensitive flag specified"
);
await setFilterInput(hud, "/^foo/i", MESSAGES[4]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[1], MESSAGES[4]], 2);
info("Plaintext search if a wrong flag is specified");
await setFilterInput(hud, "/abc.com/q", MESSAGES[2]);
filteredNodes = outputNode.querySelectorAll(".message");
checkFilteredMessages(filteredNodes, [MESSAGES[2]], 1);
});
async function setFilterInput(hud, value, lastMessage) {
await setFilterState(hud, { text: value });
await waitFor(() => findConsoleAPIMessage(hud, lastMessage), null, 200);
}
function checkFilteredMessages(filteredNodes, expectedMessages, expectedCount) {
is(
filteredNodes.length,
expectedCount,
`${expectedCount} messages should be displayed`
);
filteredNodes.forEach((node, id) => {
const messageBody = node.querySelector(".message-body").textContent;
ok(messageBody, expectedMessages[id]);
});
}
|