chromium/chrome/test/data/webui/extensions/error_console_test.ts

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://extensions/extensions.js';

import {assertEquals, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
import {keyDownOn} from 'chrome://webui-test/keyboard_mock_interactions.js';
import {eventToPromise} from 'chrome://webui-test/test_util.js';

import {findMatches} from './test_util.js';

/** @fileoverview Suite of tests for the extensions error console. */
suite('CrExtensionsErrorConsoleTest', function() {
  const STACK_ERRORS: string = 'li';
  const ACTIVE_ERROR_IN_STACK: string = 'li[tabindex="0"]';

  // Initialize an extension activity log item before each test.
  setup(function() {
    document.body.innerHTML = window.trustedTypes!.emptyHTML;
    window.history.replaceState(
        {}, '', '?errors=oehidglfoeondlkoeloailjdmmghacge');
    const manager = document.createElement('extensions-manager');
    document.body.appendChild(manager);
    // Wait for the first view to be active before starting tests.
    return manager.$.viewManager.querySelector('.active') ?
        Promise.resolve() :
        eventToPromise('view-enter-start', manager);
  });

  test('TestUpDownErrors', function() {
    const initialFocus = findMatches(document, ACTIVE_ERROR_IN_STACK)[0];
    assertTrue(!!initialFocus);
    assertEquals(1, findMatches(document, ACTIVE_ERROR_IN_STACK).length);
    assertEquals(4, findMatches(document, STACK_ERRORS).length);

    // Pressing up when the first item is focused should NOT change focus.
    keyDownOn(initialFocus, 38, [], 'ArrowUp');
    assertEquals(initialFocus, findMatches(document, ACTIVE_ERROR_IN_STACK)[0]);

    // Pressing down when the first item is focused should change focus.
    keyDownOn(initialFocus, 40, [], 'ArrowDown');
    assertNotEquals(
        initialFocus, findMatches(document, ACTIVE_ERROR_IN_STACK)[0]);

    // Pressing up when the second item is focused should focus the first again.
    keyDownOn(initialFocus, 38, [], 'ArrowUp');
    assertEquals(initialFocus, findMatches(document, ACTIVE_ERROR_IN_STACK)[0]);
  });
});