blob: 89e1483146f91b701246cd0ca1d4746856911286 [file] [log] [blame]
// Copyright 2018 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 console links are keyboard navigable.\n`);
await TestRunner.loadModule('console_test_runner');
await TestRunner.showPanel('console');
ConsoleTestRunner.fixConsoleViewportDimensions(600, 200);
await ConsoleTestRunner.waitUntilConsoleEditorLoaded();
const consoleView = Console.ConsoleView.instance();
const viewport = consoleView._viewport;
const prompt = consoleView._prompt;
await TestRunner.evaluateInPagePromise(`
function fn1() {
console.error("Custom error with link www.chromium.org/linkInErrMsg");
}
//# sourceURL=foo.js
`);
TestRunner.runTestSuite([
async function testNavigatingLinks(next) {
await clearAndLog(`console.log("Before");console.log("Text around www.chromium.org/1a multiple links, www.chromium.org/1b");console.log("www.chromium.org/2");`, 3);
await ConsoleTestRunner.waitForRemoteObjectsConsoleMessagesPromise();
TestRunner.addResult(`Setting focus in prompt:`);
prompt.focus();
shiftPress('Tab');
dumpFocus(true, 0, true);
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
next();
},
async function testNavigatingLinksInStackTrace(next) {
await clearAndLog(`fn1()`, 1);
await ConsoleTestRunner.waitForRemoteObjectsConsoleMessagesPromise();
TestRunner.addResult(`Setting focus in prompt:`);
prompt.focus();
shiftPress('Tab');
press('ArrowUp'); // Move from source link to message link.
dumpFocus(true, 0, true);
press('ArrowDown');
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowUp');
dumpFocus(true, 0, true);
press('ArrowRight');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowDown');
dumpFocus(true, 0, true);
press('ArrowLeft');
dumpFocus(true, 0, true);
press('ArrowLeft');
dumpFocus(true, 0, true);
next();
},
]);
// Utilities.
async function clearAndLog(expression, expectedCount = 1) {
consoleView._consoleCleared();
TestRunner.addResult(`Evaluating: ${expression}`);
await TestRunner.evaluateInPagePromise(expression);
await ConsoleTestRunner.waitForConsoleMessagesPromise(expectedCount);
await ConsoleTestRunner.waitForPendingViewportUpdates();
}
function press(key) {
TestRunner.addResult(`\n${key}:`);
eventSender.keyDown(key);
}
function shiftPress(key) {
TestRunner.addResult(`\nShift+${key}:`);
eventSender.keyDown(key, ['shiftKey']);
}
function dumpFocus(activeElement, messageIndex = 0, skipObjectCheck) {
const firstMessage = consoleView._visibleViewMessages[messageIndex];
const hasTrace = !!firstMessage.element().querySelector('.console-message-stack-trace-toggle');
const hasHiddenStackTrace = firstMessage.element().querySelector('.console-message-stack-trace-wrapper > div.hidden');
const hasCollapsedObject = firstMessage.element().querySelector('.console-view-object-properties-section:not(.expanded)');
const hasExpandedObject = firstMessage.element().querySelector('.console-view-object-properties-section.expanded');
TestRunner.addResult(`Viewport virtual selection: ${viewport._virtualSelectedIndex}`);
if (!skipObjectCheck) {
if (hasCollapsedObject) {
TestRunner.addResult(`Has object: collapsed`);
} else if (hasExpandedObject) {
TestRunner.addResult(`Has object: expanded`);
}
}
if (hasTrace) {
TestRunner.addResult(`Is trace expanded: ${!hasHiddenStackTrace ? 'YES' : 'NO'}`);
}
if (firstMessage instanceof Console.ConsoleGroupViewMessage) {
const expanded = !firstMessage.collapsed();
TestRunner.addResult(`Is group expanded: ${expanded ? 'YES' : 'NO'}`);
}
if (!activeElement)
return;
var element = document.deepActiveElement();
if (!element) {
TestRunner.addResult('null');
return;
}
var name = `activeElement: ${element.tagName}`;
if (element.id)
name += '#' + element.id;
else if (element.className)
name += '.' + element.className.split(' ').join('.');
if (element.deepTextContent())
name += '\nactive text: ' + element.deepTextContent();
TestRunner.addResult(name);
}
})();