OLD | NEW |
| (Empty) |
1 <html> | |
2 <head> | |
3 <script src="../../http/tests/inspector/inspector-test.js"></script> | |
4 <script src="../../http/tests/inspector/console-test.js"></script> | |
5 <script> | |
6 | |
7 function test() | |
8 { | |
9 var longUrl = "www." + "z123456789".repeat(15) + ".com"; | |
10 var shortUrl = "www.bar.com"; | |
11 var mixedUrl = longUrl + " " + shortUrl + " " + longUrl; | |
12 var shortUrlWithHashes = "www." + "0123456789".repeat(2) + "zfoobarz" + "012
3456789".repeat(2); | |
13 var urlWithHashes = "www." + "0123456789".repeat(2) + "z".repeat(150) + "012
3456789".repeat(2); | |
14 var highlightedUrl = "www." + "z".repeat(200) + ".com"; | |
15 var longUrlInMessageWithNonTextNodePrefix = "www." + "z123456789".repeat(15)
+ ".com"; | |
16 var prepareCode = ` | |
17 // Keep this as the first url logged to record the max truncated length. | |
18 console.log("${longUrl}"); | |
19 | |
20 console.log("${shortUrl}"); | |
21 console.log("${longUrl}"); | |
22 console.log("${mixedUrl}"); | |
23 console.log("${shortUrlWithHashes}"); | |
24 console.log("${urlWithHashes}"); | |
25 console.log("${highlightedUrl}"); | |
26 console.log("${longUrlInMessageWithNonTextNodePrefix}"); | |
27 `; | |
28 | |
29 var expectedMessageCount = 8; | |
30 var consoleView = Console.ConsoleView.instance(); | |
31 var viewport = Console.ConsoleView.instance()._viewport; | |
32 var maxLength; | |
33 var halfMaxLength; | |
34 var secondLongUrlIndexInMixedUrl; | |
35 | |
36 var tests = [ | |
37 function testSelectWithinTruncatedUrl(next) | |
38 { | |
39 makeSelectionAndDump(0, 0, 0, halfMaxLength); | |
40 makeSelectionAndDump(0, 0, 0, halfMaxLength + 1); | |
41 makeSelectionAndDump(0, 0, 0, maxLength); | |
42 makeSelectionAndDump(0, halfMaxLength, 0, halfMaxLength + 1); | |
43 makeSelectionAndDump(0, halfMaxLength, 0, maxLength); | |
44 makeSelectionAndDump(0, halfMaxLength + 1, 0, maxLength); | |
45 next(); | |
46 }, | |
47 | |
48 function testSelectAcrossMultipleMessages(next) { | |
49 makeSelectionAndDump(0, 0, 1, shortUrl.length); | |
50 makeSelectionAndDump(0, halfMaxLength, 1, shortUrl.length); | |
51 makeSelectionAndDump(0, halfMaxLength + 1, 1, shortUrl.length); | |
52 next() | |
53 }, | |
54 | |
55 function testSelectAcrossMultipleMessagesWithTruncatedUrls(next) { | |
56 makeSelectionAndDump(0, 0, 2, halfMaxLength); | |
57 makeSelectionAndDump(0, 0, 2, halfMaxLength + 1); | |
58 makeSelectionAndDump(0, 0, 2, maxLength); | |
59 next() | |
60 }, | |
61 | |
62 function testSelectWithinMessageWithMultipleTruncatedUrls(next) { | |
63 makeSelectionAndDump(3, 0, 3, halfMaxLength); | |
64 makeSelectionAndDump(3, 0, 3, halfMaxLength + 1); | |
65 makeSelectionAndDump(3, 0, 3, secondLongUrlIndexInMixedUrl); | |
66 makeSelectionAndDump(3, 0, 3, secondLongUrlIndexInMixedUrl + halfMax
Length); | |
67 makeSelectionAndDump(3, 0, 3, secondLongUrlIndexInMixedUrl + halfMax
Length + 1); | |
68 makeSelectionAndDump(3, 0, 3, secondLongUrlIndexInMixedUrl + maxLeng
th); | |
69 | |
70 makeSelectionAndDump(3, halfMaxLength, 3, halfMaxLength + 1); | |
71 makeSelectionAndDump(3, halfMaxLength, 3, secondLongUrlIndexInMixedU
rl); | |
72 makeSelectionAndDump(3, halfMaxLength, 3, secondLongUrlIndexInMixedU
rl + halfMaxLength); | |
73 makeSelectionAndDump(3, halfMaxLength, 3, secondLongUrlIndexInMixedU
rl + halfMaxLength + 1); | |
74 makeSelectionAndDump(3, halfMaxLength, 3, secondLongUrlIndexInMixedU
rl + maxLength); | |
75 | |
76 makeSelectionAndDump(3, halfMaxLength + 1, 3, secondLongUrlIndexInMi
xedUrl); | |
77 makeSelectionAndDump(3, halfMaxLength + 1, 3, secondLongUrlIndexInMi
xedUrl + halfMaxLength); | |
78 makeSelectionAndDump(3, halfMaxLength + 1, 3, secondLongUrlIndexInMi
xedUrl + halfMaxLength + 1); | |
79 makeSelectionAndDump(3, halfMaxLength + 1, 3, secondLongUrlIndexInMi
xedUrl + maxLength); | |
80 | |
81 makeSelectionAndDump(3, secondLongUrlIndexInMixedUrl, 3, secondLongU
rlIndexInMixedUrl + halfMaxLength); | |
82 makeSelectionAndDump(3, secondLongUrlIndexInMixedUrl, 3, secondLongU
rlIndexInMixedUrl + halfMaxLength + 1); | |
83 makeSelectionAndDump(3, secondLongUrlIndexInMixedUrl, 3, secondLongU
rlIndexInMixedUrl + maxLength); | |
84 | |
85 makeSelectionAndDump(3, secondLongUrlIndexInMixedUrl + halfMaxLength
, 3, secondLongUrlIndexInMixedUrl + halfMaxLength + 1); | |
86 makeSelectionAndDump(3, secondLongUrlIndexInMixedUrl + halfMaxLength
, 3, secondLongUrlIndexInMixedUrl + maxLength); | |
87 | |
88 makeSelectionAndDump(3, secondLongUrlIndexInMixedUrl + halfMaxLength
+ 1, 3, secondLongUrlIndexInMixedUrl + maxLength); | |
89 next() | |
90 }, | |
91 | |
92 function testSelectWithinShortUrlWithHashes(next) | |
93 { | |
94 var hashedUrlMaxLength = consoleMessageText(4).length; | |
95 var hashedUrlHalfMaxLength = Math.ceil(hashedUrlMaxLength / 2); | |
96 makeSelectionAndDump(4, 0, 4, hashedUrlHalfMaxLength); | |
97 makeSelectionAndDump(4, 0, 4, hashedUrlMaxLength); | |
98 makeSelectionAndDump(4, hashedUrlHalfMaxLength, 4, hashedUrlMaxLengt
h); | |
99 next(); | |
100 }, | |
101 | |
102 function testSelectWithinUrlWithHashes(next) | |
103 { | |
104 var hashedUrlMaxLength = consoleMessageText(5).length; | |
105 var hashedUrlHalfMaxLength = Math.ceil(hashedUrlMaxLength / 2); | |
106 makeSelectionAndDump(5, 0, 5, hashedUrlHalfMaxLength); | |
107 makeSelectionAndDump(5, 0, 5, hashedUrlHalfMaxLength + 1); | |
108 makeSelectionAndDump(5, 0, 5, hashedUrlMaxLength); | |
109 makeSelectionAndDump(5, hashedUrlHalfMaxLength, 5, hashedUrlHalfMaxL
ength + 1); | |
110 makeSelectionAndDump(5, hashedUrlHalfMaxLength, 5, hashedUrlMaxLengt
h); | |
111 makeSelectionAndDump(5, hashedUrlHalfMaxLength + 1, 5, hashedUrlMaxL
ength); | |
112 next(); | |
113 }, | |
114 | |
115 function testSelectWithinHighlightedUrlBeginning(next) { | |
116 testHighlightedUrlWithSearchQuery("www.", next); | |
117 }, | |
118 | |
119 function testSelectWithinHighlightedUrlMiddle(next) { | |
120 testHighlightedUrlWithSearchQuery("zzzzz", next); | |
121 }, | |
122 | |
123 function testSelectWithinHighlightedUrlEnd(next) { | |
124 testHighlightedUrlWithSearchQuery(".com", next); | |
125 }, | |
126 | |
127 function testSelectionStartingInNonTextNode(next) { | |
128 var messageElement = consoleView.itemElement(7).element(); | |
129 | |
130 // Artificially insert an empty non-text node element in the beginni
ng. | |
131 var artificialEmptyPrefixElement = createElementWithClass('div', 'ar
tificialEmptyPrefixElement'); | |
132 messageElement.insertBefore(artificialEmptyPrefixElement, messageEle
ment.firstChild); | |
133 | |
134 // Use .childNodes to ensure we get all nodes. | |
135 InspectorTest.addResult("\nMaking selection from empty prefix to end
"); | |
136 window.getSelection().setBaseAndExtent(artificialEmptyPrefixElement,
0, messageElement.lastChild, messageElement.childNodes.length - 1); | |
137 | |
138 var selectedText = viewport._selectedText(); | |
139 if (selectedText) | |
140 InspectorTest.addResult("Selection length: " + selectedText.leng
th + ", " + "text: " + selectedText.replace(/\bVM\d+/g, "VM")); | |
141 else | |
142 InspectorTest.addResult("No selection"); | |
143 next(); | |
144 } | |
145 ]; | |
146 | |
147 InspectorTest.waitForConsoleMessages(expectedMessageCount, () => { | |
148 viewport.invalidate(); | |
149 | |
150 // Get the max truncated length from the first longUrl logged. | |
151 try { | |
152 var longUrlMessageText = consoleMessageText(0); | |
153 maxLength = longUrlMessageText.length; | |
154 halfMaxLength = Math.ceil(maxLength / 2); | |
155 secondLongUrlIndexInMixedUrl = maxLength + 1 + shortUrl.length + 1; | |
156 InspectorTest.addResult("Long url has max length: " + maxLength + ",
text: " + longUrlMessageText); | |
157 } catch (e) { | |
158 InspectorTest.addResult("FAIL: Could not get max truncation length f
rom first longUrl message."); | |
159 InspectorTest.completeTest(); | |
160 return; | |
161 } | |
162 InspectorTest.runTestSuite(tests); | |
163 }); | |
164 InspectorTest.evaluateInPage(prepareCode); | |
165 | |
166 function consoleMessageText(index) { | |
167 var messageElement = consoleView._visibleViewMessages[index].element(); | |
168 return messageElement.querySelector('.console-message-text').deepTextCon
tent(); | |
169 } | |
170 | |
171 function makeSelectionAndDump(fromMessage, fromTextOffset, toMessage, toText
Offset, includeAnchor, useTextContainer) { | |
172 InspectorTest.addResult("\nMaking selection: " + fromMessage + ", " + fr
omTextOffset + ", " + toMessage + ", " + toTextOffset); | |
173 | |
174 // Ignore the anchor text on the start/end message, just use their conte
nts. | |
175 if (!includeAnchor) { | |
176 var fromAnchor = consoleView.itemElement(fromMessage).element().quer
ySelector('.console-message-anchor'); | |
177 var toAnchor = consoleView.itemElement(toMessage).element().querySel
ector('.console-message-anchor'); | |
178 fromTextOffset += fromAnchor ? fromAnchor.deepTextContent().length :
0; | |
179 toTextOffset += toAnchor ? toAnchor.deepTextContent().length : 0; | |
180 } | |
181 InspectorTest.selectConsoleMessages(fromMessage, fromTextOffset, toMessa
ge, toTextOffset, useTextContainer); | |
182 var selectedText = viewport._selectedText(); | |
183 if (selectedText) | |
184 InspectorTest.addResult("Selection length: " + selectedText.length +
", " + "text: " + selectedText.replace(/\bVM\d+/g, "VM")); | |
185 else | |
186 InspectorTest.addResult("No selection"); | |
187 } | |
188 | |
189 function testHighlightedUrlWithSearchQuery(query, next) { | |
190 // Clear any existing ranges to avoid using them as the query. | |
191 window.getSelection().removeAllRanges(); | |
192 InspectorTest.addSniffer(consoleView, "_searchFinishedForTests", onSearc
h); | |
193 consoleView._searchableView._searchInputElement.value = query; | |
194 consoleView._searchableView._regexButton.setToggled(false); | |
195 consoleView._searchableView._caseSensitiveButton.setToggled(false); | |
196 consoleView._searchableView.showSearchField(); | |
197 InspectorTest.addResult("Searching for text: " + query); | |
198 | |
199 function onSearch() { | |
200 var matches = consoleView.element.childTextNodes().filter(node => no
de.parentElement.classList.contains("highlighted-search-result")).map(node => no
de.parentElement); | |
201 InspectorTest.addResult("Highlighted " + matches.length + " matches"
); | |
202 | |
203 // Use TextNodes for containers to get inside the highlighted match
element. | |
204 makeSelectionAndDump(6, 0, 6, halfMaxLength, false, true); | |
205 makeSelectionAndDump(6, 0, 6, halfMaxLength + 1, false, true); | |
206 makeSelectionAndDump(6, 0, 6, maxLength, false, true); | |
207 makeSelectionAndDump(6, halfMaxLength, 6, halfMaxLength + 1); | |
208 makeSelectionAndDump(6, halfMaxLength, 6, maxLength); | |
209 makeSelectionAndDump(6, halfMaxLength + 1, 6, maxLength); | |
210 next(); | |
211 } | |
212 } | |
213 } | |
214 </script> | |
215 </head> | |
216 <body onload="runTest()"> | |
217 <p>Tests that console copies tree outline messages properly.</p> | |
218 </body> | |
219 </html> | |
OLD | NEW |