import {assert, expect} from 'chai';

import '../src/dbp-language-select.js';
import '../src/demo.js';

suite('dbp-language-select basics', () => {
  let node;
  let events = [];

  function handler(e) {
    events.push(e);
  }

  setup(async () => {
    events.length = 0;
    window.addEventListener('dbp-set-property', handler);
    node = document.createElement('dbp-language-select');
    document.body.appendChild(node);
    await node.updateComplete;
  });

  teardown(() => {
    node.remove();
    window.removeEventListener('dbp-set-property', handler);
  });

  test('should render', () => {
    assert.isNotNull(node.shadowRoot);
  });

  test('change language events', () => {
    node.lang = 'en';
    expect(node.next).to.equal('de');
    expect(events.length).to.equal(1);
    node.lang = 'de';
    expect(node.next).to.equal('en');
    expect(events.length).to.equal(2);
  });

  test('change next', () => {
    expect(events.length).to.equal(0);
    node.lang = 'en';
    expect(node.next).to.equal('de');
    expect(node.lang).to.equal('en');
    node.next = 'en';
    expect(node.next).to.equal('en');
    expect(node.lang).to.equal('de');
    expect(events.length).to.equal(2);
  });
});

suite('dbp-language-select demo', () => {
  let node;

  setup(async () => {
    node = document.createElement('dbp-language-select-demo');
    document.body.appendChild(node);
    await node.updateComplete;
  });

  teardown(() => {
    node.remove();
  });

  test('should render', () => {
    assert.isNotNull(node.shadowRoot);
  });
});