| OLD | NEW |
| 1 <html> | 1 <html> |
| 2 <head> | 2 <head> |
| 3 <script src="../../http/tests/inspector/inspector-test.js"></script> | 3 <script src="../../http/tests/inspector/inspector-test.js"></script> |
| 4 <script src="../../http/tests/inspector/console-test.js"></script> | 4 <script src="../../http/tests/inspector/console-test.js"></script> |
| 5 <script> | 5 <script> |
| 6 function populateConsoleWithMessages(count) | 6 function populateConsoleWithMessages(count) |
| 7 { | 7 { |
| 8 for (var i = 0; i < count - 1; ++i) | 8 for (var i = 0; i < count - 1; ++i) |
| 9 console.log("Multiline\nMessage #" + i); | 9 console.log("Multiline\nMessage #" + i); |
| 10 console.log("hello %cworld", "color: blue"); | 10 console.log("hello %cworld", "color: blue"); |
| 11 } | 11 } |
| 12 | 12 |
| 13 //# sourceURL=console-viewport-selection.html | 13 //# sourceURL=console-viewport-stick-to-bottom.html |
| 14 </script> | 14 </script> |
| 15 | 15 |
| 16 <script> | 16 <script> |
| 17 | 17 |
| 18 function test() | 18 function test() |
| 19 { | 19 { |
| 20 InspectorTest.fixConsoleViewportDimensions(600, 200); | 20 var viewportHeight = 200; |
| 21 InspectorTest.fixConsoleViewportDimensions(600, viewportHeight); |
| 21 var consoleView = WebInspector.ConsoleView.instance(); | 22 var consoleView = WebInspector.ConsoleView.instance(); |
| 22 var viewport = consoleView._viewport; | 23 var viewport = consoleView._viewport; |
| 23 const minimumViewportMessagesCount = 10; | 24 const minimumViewportMessagesCount = 10; |
| 24 const messagesCount = 150; | 25 const messagesCount = 150; |
| 25 const middleMessage = messagesCount / 2; | 26 const middleMessage = messagesCount / 2; |
| 26 var viewportMessagesCount; | 27 var viewportMessagesCount; |
| 27 | 28 |
| 28 logMessagesToConsole(messagesCount, () => InspectorTest.runTestSuite(testSui
te)); | 29 logMessagesToConsole(messagesCount, () => InspectorTest.runTestSuite(testSui
te)); |
| 29 | 30 |
| 30 var testSuite = [ | 31 var testSuite = [ |
| 31 function verifyViewportIsTallEnough(next) | 32 function verifyViewportIsTallEnough(next) |
| 32 { | 33 { |
| 33 viewport.invalidate(); | 34 viewport.invalidate(); |
| 34 viewport.forceScrollItemToBeFirst(0); | 35 viewport.forceScrollItemToBeFirst(0); |
| 35 viewportMessagesCount = viewport.lastVisibleIndex() - viewport.first
VisibleIndex() + 1; | 36 viewportMessagesCount = viewport.lastVisibleIndex() - viewport.first
VisibleIndex() + 1; |
| 36 if (viewportMessagesCount < minimumViewportMessagesCount) { | 37 if (viewportMessagesCount < minimumViewportMessagesCount) { |
| 37 InspectorTest.addResult(String.sprintf("Test cannot be run as vi
ewport is not tall enough. It is required to contain at least %d messages, but %
d only fit", minimumViewportMessagesCount, viewportMessagesCount)); | 38 InspectorTest.addResult(String.sprintf("Test cannot be run as vi
ewport is not tall enough. It is required to contain at least %d messages, but %
d only fit", minimumViewportMessagesCount, viewportMessagesCount)); |
| 38 InspectorTest.completeTest(); | 39 InspectorTest.completeTest(); |
| 39 return; | 40 return; |
| 40 } | 41 } |
| 41 InspectorTest.addResult(String.sprintf("Viewport contains %d message
s", viewportMessagesCount)); | 42 InspectorTest.addResult(String.sprintf("Viewport contains %d message
s", viewportMessagesCount)); |
| 42 next(); | 43 next(); |
| 43 }, | 44 }, |
| 44 | 45 |
| 45 function testScrollViewportToBottom(next) | 46 function testScrollViewportToBottom(next) |
| 46 { | 47 { |
| 47 consoleView._immediatelyScrollToBottom(); | 48 consoleView._immediatelyScrollToBottom(); |
| 48 viewport.refresh(); | 49 dumpAndContinue(next); |
| 49 InspectorTest.addResult("Last visible message: " + viewport.lastVisi
bleIndex()); | |
| 50 next(); | |
| 51 }, | 50 }, |
| 52 | 51 |
| 53 function testConsoleSticksToBottom(next) | 52 function testConsoleSticksToBottom(next) |
| 54 { | 53 { |
| 55 logMessagesToConsole(messagesCount, onMessagesDumped); | 54 logMessagesToConsole(messagesCount, onMessagesDumped); |
| 56 | 55 |
| 57 function onMessagesDumped() | 56 function onMessagesDumped() |
| 58 { | 57 { |
| 59 viewport.invalidate(); | 58 dumpAndContinue(next); |
| 60 // Force refresh which has been scheduled via invalidate() metho
d. | 59 } |
| 60 }, |
| 61 |
| 62 function testSmoothScrollDoesNotStickToBottom(next) |
| 63 { |
| 64 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_updat
eViewportStickinessForTest", onUpdateTimeout); |
| 65 sendPageUp(); |
| 66 |
| 67 function onUpdateTimeout() |
| 68 { |
| 69 dumpAndContinue(next); |
| 70 } |
| 71 }, |
| 72 |
| 73 function testEscShouldNotJumpToBottom(next) |
| 74 { |
| 75 var keyEvent = InspectorTest.createKeyEvent("Escape"); |
| 76 viewport._contentElement.dispatchEvent(keyEvent); |
| 77 dumpAndContinue(next); |
| 78 }, |
| 79 |
| 80 function testTypingShouldJumpToBottom(next) |
| 81 { |
| 82 var keyEvent = InspectorTest.createKeyEvent("a"); |
| 83 viewport._contentElement.dispatchEvent(keyEvent); |
| 84 consoleView._prompt._proxyElement.dispatchEvent(new Event('input')); |
| 85 |
| 86 dumpAndContinue(next); |
| 87 }, |
| 88 |
| 89 function testViewportMutationsShouldPreserveStickToBottom(next) |
| 90 { |
| 91 viewport._contentElement.children[1].innerText = "More than 2 lines:
foo\n\nbar"; |
| 92 dumpAndContinue(onMessagesDumped); |
| 93 |
| 94 function onMessagesDumped() |
| 95 { |
| 96 viewport.setStickToBottom(false); |
| 97 viewport._contentElement.children[1].innerText = "More than 3 li
nes: foo\n\n\nbar"; |
| 98 dumpAndContinue(next); |
| 99 } |
| 100 }, |
| 101 |
| 102 function testStopStickingToBottomAfterSelectingText(next) |
| 103 { |
| 104 viewport.setStickToBottom(true); |
| 105 viewport.refresh(); |
| 106 |
| 107 consoleView._updateStickToBottomOnMouseDown(); |
| 108 window.getSelection().selectAllChildren(consoleView.itemElement(cons
oleView.itemCount() / 2).element()); |
| 109 consoleView._updateStickToBottomOnMouseUp(); |
| 110 dumpAndContinue(onFirstSelection); |
| 111 |
| 112 function onFirstSelection() |
| 113 { |
| 114 InspectorTest.addResult("Making sure stickToBottom can be re-ena
bled"); |
| 115 viewport.setStickToBottom(true); |
| 61 viewport.refresh(); | 116 viewport.refresh(); |
| 62 InspectorTest.addResult("Last visible message: " + viewport.last
VisibleIndex()); | 117 |
| 118 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_u
pdateViewportStickinessForTest", onUpdate); |
| 119 consoleView._updateStickToBottomOnMouseDown(); |
| 120 consoleView._updateStickToBottomOnMouseUp(); |
| 121 } |
| 122 |
| 123 function onUpdate() |
| 124 { |
| 125 dumpAndContinue(next); |
| 126 } |
| 127 }, |
| 128 |
| 129 function testMuteUpdatesWhileScrolling(next) |
| 130 { |
| 131 consoleView._updateStickToBottomOnMouseDown(); |
| 132 viewport.element.scrollTop -= 10; |
| 133 |
| 134 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_sched
uleViewportRefreshForTest", onMessageAdded); |
| 135 InspectorTest.evaluateInConsole("1 + 1"); |
| 136 |
| 137 /** |
| 138 * @param {boolean} muted |
| 139 */ |
| 140 function onMessageAdded(muted) |
| 141 { |
| 142 InspectorTest.addResult("New messages were muted: " + muted); |
| 143 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_s
cheduleViewportRefreshForTest", onMouseUpScheduledRefresh); |
| 144 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_u
pdateViewportStickinessForTest", onUpdateStickiness); |
| 145 consoleView._updateStickToBottomOnMouseUp(); |
| 146 } |
| 147 |
| 148 /** |
| 149 * @param {boolean} muted |
| 150 */ |
| 151 function onMouseUpScheduledRefresh(muted) |
| 152 { |
| 153 InspectorTest.addResult("Refresh was scheduled after dirty state
"); |
| 154 } |
| 155 |
| 156 function onUpdateStickiness() |
| 157 { |
| 63 next(); | 158 next(); |
| 64 } | 159 } |
| 65 }, | 160 }, |
| 66 | 161 |
| 67 function testManualScrollDoesNotStickToBottom(next) | 162 function testShouldNotJumpToBottomWhenPromptFillsEntireViewport(next) |
| 68 { | 163 { |
| 69 const manualScrollValue = 3; | 164 var text = "Foo"; |
| 70 var initialScrollTop = viewport.element.scrollTop; | 165 for (var i = 0; i < viewportHeight; i++) |
| 71 viewport.element.scrollTop = initialScrollTop - manualScrollValue; | 166 text += "\n"; |
| 72 viewport.refresh(); | 167 consoleView._promptElement.textContent = text; |
| 73 var newScrollTop = viewport.element.scrollTop; | 168 WebInspector.ConsoleView.clearConsole(); |
| 74 var isScrollPreserved = initialScrollTop - newScrollTop === manualSc
rollValue; | 169 viewport.element.scrollTop -= 10; |
| 75 InspectorTest.addResult("Scroll preserved: " + isScrollPreserved); | 170 |
| 76 next(); | 171 var keyEvent = InspectorTest.createKeyEvent("a"); |
| 77 }, | 172 viewport._contentElement.dispatchEvent(keyEvent); |
| 173 consoleView._prompt._proxyElement.dispatchEvent(new Event('input')); |
| 174 |
| 175 dumpAndContinue(next); |
| 176 } |
| 78 ]; | 177 ]; |
| 79 | 178 |
| 179 function sendPageUp() |
| 180 { |
| 181 var keyEvent = InspectorTest.createKeyEvent("PageUp"); |
| 182 consoleView._prompt._proxyElement.dispatchEvent(keyEvent); |
| 183 viewport.element.scrollTop -= 10; |
| 184 } |
| 185 |
| 186 function dumpAndContinue(callback) |
| 187 { |
| 188 viewport.refresh(); |
| 189 InspectorTest.addResult("Is at bottom: " + viewport.element.isScrolledTo
Bottom() + ", should stick: " + viewport.stickToBottom()); |
| 190 callback(); |
| 191 } |
| 192 |
| 80 function logMessagesToConsole(count, callback) | 193 function logMessagesToConsole(count, callback) |
| 81 { | 194 { |
| 82 var awaitingMessagesCount = count; | 195 var awaitingMessagesCount = count; |
| 83 function messageAdded() | 196 function messageAdded() |
| 84 { | 197 { |
| 85 if (!--awaitingMessagesCount) | 198 if (!--awaitingMessagesCount) |
| 86 callback(); | 199 callback(); |
| 87 else | 200 else |
| 88 InspectorTest.addConsoleSniffer(messageAdded, false); | 201 InspectorTest.addConsoleSniffer(messageAdded, false); |
| 89 } | 202 } |
| 90 | 203 |
| 91 InspectorTest.addConsoleSniffer(messageAdded, false); | 204 InspectorTest.addConsoleSniffer(messageAdded, false); |
| 92 InspectorTest.evaluateInPage(String.sprintf("populateConsoleWithMessages
(%d)", count)); | 205 InspectorTest.evaluateInPage(String.sprintf("populateConsoleWithMessages
(%d)", count)); |
| 93 } | 206 } |
| 94 } | 207 } |
| 95 </script> | 208 </script> |
| 96 </head> | 209 </head> |
| 97 <body onload="runTest()"> | 210 <body onload="runTest()"> |
| 98 <p> | 211 <p> |
| 99 Verifies viewport stick-to-bottom behavior. | 212 Verifies viewport stick-to-bottom behavior. |
| 100 </p> | 213 </p> |
| 101 </body> | 214 </body> |
| 102 </html> | 215 </html> |
| OLD | NEW |