import {mixinTabIndex} from './tabindex';

describe('mixinTabIndex', () => {

  it('should augment an existing class with a tabIndex property', () => {
    const classWithMixin = mixinTabIndex(TestClass);
    const instance = new classWithMixin();

    expect(instance.tabIndex)
      .toBe(0, 'Expected the mixed-into class to have a tabIndex property');

    instance.tabIndex = 4;

    expect(instance.tabIndex)
      .toBe(4, 'Expected the mixed-into class to have an updated tabIndex property');
  });

  it('should set tabIndex to `-1` if the disabled property is set to true', () => {
    const classWithMixin = mixinTabIndex(TestClass);
    const instance = new classWithMixin();

    expect(instance.tabIndex)
      .toBe(0, 'Expected tabIndex to be set to 0 initially');

    instance.disabled = true;

    expect(instance.tabIndex)
      .toBe(-1, 'Expected tabIndex to be set to -1 if the disabled property is set to true');
  });

  it('should allow having a custom default tabIndex value', () => {
    const classWithMixin = mixinTabIndex(TestClass, 20);
    const instance = new classWithMixin();

    expect(instance.tabIndex)
      .toBe(20, 'Expected tabIndex to be set to 20 initially');

    instance.tabIndex = 0;

    expect(instance.tabIndex)
      .toBe(0, 'Expected tabIndex to still support 0 as value');
  });

});

class TestClass {
  disabled = false;
}
