diff -r 000000000000 -r 6474c204b198 browser/devtools/webconsole/test/browser_webconsole_bug_601352_scroll.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/webconsole/test/browser_webconsole_bug_601352_scroll.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,71 @@ +/* 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 the console output scrolls to JS eval results when there are many +// messages displayed. See bug 601352. + +function test() { + Task.spawn(runner).then(finishTest); + + function* runner() { + let {tab} = yield loadTab("data:text/html;charset=utf-8,Web Console test for bug 601352"); + let hud = yield openConsole(tab); + hud.jsterm.clearOutput(); + + let longMessage = ""; + for (let i = 0; i < 50; i++) { + longMessage += "LongNonwrappingMessage"; + } + + for (let i = 0; i < 50; i++) { + content.console.log("test1 message " + i); + } + + content.console.log(longMessage); + + for (let i = 0; i < 50; i++) { + content.console.log("test2 message " + i); + } + + yield waitForMessages({ + webconsole: hud, + messages: [{ + text: "test1 message 0", + }, { + text: "test1 message 49", + }, { + text: "LongNonwrappingMessage", + }, { + text: "test2 message 0", + }, { + text: "test2 message 49", + }], + }); + + let nodeDeferred = promise.defer(); + hud.jsterm.execute("1+1", (node) => { nodeDeferred.resolve(node); }); + let node = yield nodeDeferred.promise; + + let scrollNode = hud.outputNode.parentNode; + let rectNode = node.getBoundingClientRect(); + let rectOutput = scrollNode.getBoundingClientRect(); + console.debug("rectNode", rectNode, "rectOutput", rectOutput); + console.log("scrollNode scrollHeight", scrollNode.scrollHeight, "scrollTop", scrollNode.scrollTop, "clientHeight", scrollNode.clientHeight); + + isnot(scrollNode.scrollTop, 0, "scroll location is not at the top"); + + // The bounding client rect .top/left coordinates are relative to the + // console iframe. + + // Visible scroll viewport. + let height = rectOutput.height; + + // Top and bottom coordinates of the last message node, relative to the outputNode. + let top = rectNode.top - rectOutput.top; + let bottom = top + rectNode.height; + info("node top " + top + " node bottom " + bottom + " node clientHeight " + node.clientHeight); + + ok(top >= 0 && bottom <= height, "last message is visible"); + } +}