blob: 439fb8221514964c0acc99fe6dee900fa66f10f6 [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 messages are navigable with the keyboard.\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;
TestRunner.runTestSuite([
async function testClickOnLog(next) {
await clearAndLog(`console.log(1)`);
TestRunner.addResult(`Click on message`);
clickAndFocus(consoleView._visibleViewMessages[0].element());
dumpFocus();
next();
},
async function testClickOnGroup(next) {
await clearAndLog(`console.group('group1')`);
TestRunner.addResult(`Click on message`);
clickAndFocus(consoleView._visibleViewMessages[0].element().querySelector('.console-message'));
dumpFocus();
next();
},
async function testClickOnTrace(next) {
await clearAndLog(`console.warn('warning1')`);
TestRunner.addResult(`Click on message`);
clickAndFocus(consoleView._visibleViewMessages[0].element().querySelector('.console-message-stack-trace-wrapper > div'));
dumpFocus();
next();
},
async function testClickOnObject(next) {
await clearAndLog(`console.log({x: 1})`);
TestRunner.addResult(`Click on object`);
clickAndFocus(consoleView._visibleViewMessages[0].element().querySelector('.console-object'));
dumpFocus();
next();
},
async function testClickOnTraceWithObject(next) {
await clearAndLog(`console.warn('warn', {x: 1})`);
TestRunner.addResult(`Click on object`);
clickAndFocus(consoleView._visibleViewMessages[0].element().querySelector('.console-object'));
dumpFocus();
resetFocusAndSelection();
TestRunner.addResult(`Click on trace`);
clickAndFocus(consoleView._visibleViewMessages[0].element().querySelector('.console-message-stack-trace-wrapper > div'));
dumpFocus();
next();
},
async function testClickOnGroupWithObject(next) {
await clearAndLog(`console.group('group', {x: 1})`);
TestRunner.addResult(`Click on object`);
clickAndFocus(consoleView._visibleViewMessages[0].element().querySelector('.console-object'));
dumpFocus();
resetFocusAndSelection();
TestRunner.addResult(`Click on group`);
clickAndFocus(consoleView._visibleViewMessages[0].element().querySelector('.console-message'));
dumpFocus();
next();
},
]);
function clickAndFocus(element) {
element.focus();
element.click();
}
function resetFocusAndSelection() {
viewport._virtualSelectedIndex = -1;
consoleView._prompt.focus();
}
async function clearAndLog(expression) {
consoleView._consoleCleared();
TestRunner.addResult(`Evaluating: ${expression}`);
await TestRunner.evaluateInPagePromise(expression);
await ConsoleTestRunner.waitForConsoleMessagesPromise(1);
await ConsoleTestRunner.waitForPendingViewportUpdates();
}
function dumpFocus() {
const firstMessage = consoleView._visibleViewMessages[0];
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.hidden');
const hasExpandedObject = firstMessage.element().querySelector('.console-view-object-properties-section:not(.hidden)');
TestRunner.addResult(`Viewport virtual selection: ${viewport._virtualSelectedIndex}`);
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'}`);
}
var element = document.deepActiveElement();
if (!element) {
TestRunner.addResult('null');
return;
}
var name = `activeElement: ${element.tagName}`;
if (element.id)
name += '#' + element.id;
if (element.getAttribute('aria-label'))
name += ':' + element.getAttribute('aria-label');
else if (element.title)
name += ':' + element.title;
else if (element.className)
name += '.' + element.className.split(' ').join('.');
TestRunner.addResult(name);
}
})();