Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(675)

Side by Side Diff: third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom.html

Issue 2179123004: DevTools: fix stick to bottom in console viewport (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Visible ranges too Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698