/**
 * @license
 * Copyright 2022 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

import '../test/common-test-setup-karma';
import {getFocusableElements, getFocusableElementsReverse} from './focusable';
import {html, render} from 'lit';
import {fixture} from '@open-wc/testing-helpers';

async function createDom() {
  const container = await fixture<HTMLDivElement>(html`<div></div>`);
  const shadow = container.attachShadow({mode: 'open'});
  render(
    html`
      <a href="" id="first">A link</a>
      <slot></slot>
      <button id="third">A button</button>
      <button class="not" style="display: none">No Display Button</button>
      <button class="not" style="visibility: hidden">Hidden Button</button>
      <span id="fourth" tabindex="0">Focusable Span</span>
      <textarea id="fifth">TextArea</textarea>
      <div id="moreshadow">
        <button class="not in shadow"></button>
      </div>
    `,
    shadow
  );
  const slottedContent = document.createElement('div');
  render(
    html` <textarea id="second">Slotted TextArea</textarea> `,
    slottedContent
  );
  container.appendChild(slottedContent);
  const slot: HTMLSlotElement | null = shadow.querySelector('slot');
  // For some reason Typescript doesn't know about the `assign` method on
  // HTMLSlotElement.
  //
  (slot! as any).assign(slottedContent);
  const moreShadow = shadow
    .querySelector('#moreshadow')!
    .attachShadow({mode: 'open'});
  render(
    html`
      <form>
        <input id="sixth" type="submit" value="Submit" />
      </form>
    `,
    moreShadow
  );
  return container;
}

suite('focusable', () => {
  test('Finds all focusables in-order', async () => {
    const container = await createDom();
    const results = [...getFocusableElements(container)];
    expect(results.map(e => e.id)).to.have.ordered.members([
      'first',
      'second',
      'third',
      'fourth',
      'fifth',
      'sixth',
    ]);
  });

  test('Finds all focusables in reverse order', async () => {
    const container = await createDom();
    const results = [...getFocusableElementsReverse(container)];
    expect(results.map(e => e.id)).to.have.ordered.members([
      'sixth',
      'fifth',
      'fourth',
      'third',
      'second',
      'first',
    ]);
  });
});
