blob: e3cd0e68a268cc42d68f47328bc7a27fabd27e89 [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/console-test.js"></script>
<script>
function addMessages(count)
{
for (var i = 0; i < count; ++i)
console.log("Message #" + i);
}
function addRepeatingMessages(count)
{
for (var i = 0; i < count; ++i)
console.log("Repeating message");
}
//# sourceURL=console-viewport-control.html
</script>
<script>
function test()
{
const viewportHeight = 200;
InspectorTest.fixConsoleViewportDimensions(600, viewportHeight);
var consoleView = Console.ConsoleView.instance();
var viewport = consoleView._viewport;
const smallCount = 3;
const rowHeight = viewportHeight / consoleView.minimumRowHeight();
const maxVisibleCount = Math.ceil(rowHeight);
const maxActiveCount = Math.ceil(rowHeight * 2);
var wasShown = [];
var willHide = [];
InspectorTest.addResult("Max visible messages count: " + maxVisibleCount + ", active count: " + maxActiveCount);
function onMessageShown() {
wasShown.push(this);
}
function onMessageHidden() {
willHide.push(this);
}
function printAndResetCounts(next) {
InspectorTest.addResult("Messages shown: " + wasShown.length + ", hidden: " + willHide.length);
resetShowHideCounts();
next();
}
function resetShowHideCounts() {
wasShown = [];
willHide = [];
}
function logMessages(count, repeating, callback)
{
var awaitingMessagesCount = count;
function messageAdded()
{
if (!--awaitingMessagesCount) {
viewport.invalidate();
callback();
} else {
InspectorTest.addConsoleSniffer(messageAdded, false);
}
}
InspectorTest.addConsoleSniffer(messageAdded, false);
if (!repeating)
InspectorTest.evaluateInPage(String.sprintf("addMessages(%d)", count));
else
InspectorTest.evaluateInPage(String.sprintf("addRepeatingMessages(%d)", count));
}
function printStuckToBottom() {
InspectorTest.addResult("Is at bottom: " + viewport.element.isScrolledToBottom() + ", should stick: " + viewport.stickToBottom());
}
function clearConsoleAndReset() {
Console.ConsoleView.clearConsole();
resetShowHideCounts();
}
InspectorTest.addSniffer(Console.ConsoleViewMessage.prototype, "wasShown", onMessageShown, true);
InspectorTest.addSniffer(Console.ConsoleViewMessage.prototype, "willHide", onMessageHidden, true);
InspectorTest.runTestSuite([
function addSmallCount(next) {
clearConsoleAndReset();
logMessages(smallCount, false, () => printAndResetCounts(next));
},
function addMaxVisibleCount(next) {
clearConsoleAndReset();
logMessages(maxVisibleCount, false, () => printAndResetCounts(next));
},
function addMaxActiveCount(next) {
clearConsoleAndReset();
logMessages(maxActiveCount, false, () => printAndResetCounts(next));
printStuckToBottom();
},
function addMoreThanMaxActiveCount(next) {
clearConsoleAndReset();
logMessages(maxActiveCount, false, step2);
function step2() {
logMessages(smallCount, false, () => printAndResetCounts(next));
printStuckToBottom();
}
},
function scrollUpWithinActiveWindow(next) {
clearConsoleAndReset();
logMessages(maxActiveCount, false, step2);
printStuckToBottom();
function step2() {
resetShowHideCounts();
viewport.forceScrollItemToBeFirst(0);
printAndResetCounts(next);
}
},
function scrollUpToPositionOutsideOfActiveWindow(next) {
clearConsoleAndReset();
logMessages(maxActiveCount + smallCount, false, step2);
printStuckToBottom();
function step2() {
resetShowHideCounts();
viewport.forceScrollItemToBeFirst(0);
printAndResetCounts(next);
}
},
function logRepeatingMessages(next) {
clearConsoleAndReset();
logMessages(maxVisibleCount, true, () => printAndResetCounts(next));
},
function reorderingMessages(next) {
clearConsoleAndReset();
InspectorTest.addResult("Logging " + smallCount + " messages");
logMessages(smallCount, false, () => printAndResetCounts(step2));
function step2() {
resetShowHideCounts();
InspectorTest.addResult("Swapping messages 0 and 1");
var temp = consoleView._visibleViewMessages[0];
consoleView._visibleViewMessages[0] = consoleView._visibleViewMessages[1];
consoleView._visibleViewMessages[1] = temp;
viewport.invalidate();
printAndResetCounts(next);
}
}
]);
}
</script>
</head>
<body onload="runTest()">
<p>
Verifies viewport correctly shows and hides messages while logging and scrolling.
</p>
</body>
</html>