blob: 33da6ce74b58b5adef3b5a887c6dec458adcb324 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Tests that interacting with the console gives appropriate focus.\n`);
await TestRunner.loadModule('console_test_runner');
await TestRunner.showPanel('console');
var consoleView = Console.ConsoleView.instance();
var viewport = consoleView._viewport;
var prompt = consoleView._prompt;
var consoleEditor;
ConsoleTestRunner.waitUntilConsoleEditorLoaded().then(e => consoleEditor = e).then(logMessages);
// Ensure that the body is focusable.
document.body.tabIndex = -1;
function resetAndDumpFocusAndScrollTop() {
document.body.focus();
viewport.element.scrollTop = 0;
dumpFocusAndScrollInfo();
}
function logMessages() {
ConsoleTestRunner.waitForConsoleMessages(2, () => TestRunner.runTestSuite(testSuite));
ConsoleTestRunner.evaluateInConsole(
'\'foo ' +
'\n'.repeat(50) + 'bar\'');
}
var testSuite = [
function testClickingWithSelectedTextShouldNotFocusPrompt(next) {
resetAndDumpFocusAndScrollTop();
// Make a selection.
var messageElement = consoleView.itemElement(0).element();
var firstTextNode = messageElement.traverseNextTextNode();
window.getSelection().setBaseAndExtent(firstTextNode, 0, firstTextNode, 1);
clickObjectInMessage(0);
dumpFocusAndScrollInfo();
window.getSelection().removeAllRanges();
next();
},
function testClickOnMessageShouldFocusPromptWithoutScrolling(next) {
resetAndDumpFocusAndScrollTop();
clickObjectInMessage(0);
dumpFocusAndScrollInfo();
next();
},
function testClickOutsideMessageListShouldFocusPromptAndMoveCaretToEnd(next) {
prompt.setText('foobar');
consoleEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 1));
resetAndDumpFocusAndScrollTop();
TestRunner.addResult('Selection before: ' + consoleEditor.selection().toString());
TestRunner.addResult('Clicking on container');
consoleView._messagesElement.click();
dumpFocusAndScrollInfo();
TestRunner.addResult('Selection after: ' + consoleEditor.selection().toString());
next();
}
];
function clickObjectInMessage(index) {
var previewElement = consoleView._visibleViewMessages[index].element().querySelector('.source-code');
var previewRect = previewElement.getBoundingClientRect();
var clientX = previewRect.left + previewRect.width / 2;
var clientY = previewRect.top + previewRect.height / 2;
TestRunner.addResult('Clicking message ' + index);
previewElement.dispatchEvent(new MouseEvent('click', {clientX: clientX, clientY: clientY, bubbles: true}));
}
function dumpFocusAndScrollInfo() {
var focusedElement = document.deepActiveElement();
if (focusedElement)
TestRunner.addResult('Focused element: ' + focusedElement.tagName);
else
TestRunner.addResult('No focus');
TestRunner.addResult('Viewport scrolled to top: ' + String(viewport.element.scrollTop === 0));
}
})();