@variantjs/core
Version:
VariantJS common functions and utilities
137 lines (93 loc) • 3.74 kB
text/typescript
import elementIsTargetOrTargetChild from '../helpers/getFocusableElements';
describe('elementIsTargetOrTargetChild', () => {
it('returns a link ', () => {
const el = document.createElement('div');
const focusable = document.createElement('a');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns a button', () => {
const el = document.createElement('div');
const focusable = document.createElement('button');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns a input', () => {
const el = document.createElement('div');
const focusable = document.createElement('input');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns a textarea', () => {
const el = document.createElement('div');
const focusable = document.createElement('textarea');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns a select', () => {
const el = document.createElement('div');
const focusable = document.createElement('select');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns a details', () => {
const el = document.createElement('div');
const focusable = document.createElement('details');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns a contenteditable div', () => {
const el = document.createElement('div');
const focusable = document.createElement('div');
focusable.setAttribute('contenteditable', 'true');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns an element with a tab index of 0', () => {
const el = document.createElement('div');
const focusable = document.createElement('div');
focusable.setAttribute('tabindex', '0');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('returns an element with a positive tab index ', () => {
const el = document.createElement('div');
const focusable = document.createElement('div');
focusable.setAttribute('tabindex', '1');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([focusable]);
});
it('doesnt returns an element with a -1 tab index ', () => {
const el = document.createElement('div');
const focusable = document.createElement('div');
focusable.setAttribute('tabindex', '-1');
el.appendChild(focusable);
expect(elementIsTargetOrTargetChild(el)).toEqual([]);
});
it('doesnt return any element that is disabled ', () => {
const el = document.createElement('div');
const els = [
'a',
'button',
'input',
'textarea',
'select',
'details',
];
els.forEach((tagName) => {
const focusable = document.createElement(tagName);
focusable.setAttribute('disabled', 'disabled');
el.appendChild(focusable);
});
const tabIndex = document.createElement('div');
tabIndex.setAttribute('tabindex', '0');
tabIndex.setAttribute('disabled', 'disabled');
el.appendChild(tabIndex);
const contentEditable = document.createElement('div');
contentEditable.setAttribute('contenteditable', 'true');
contentEditable.setAttribute('tabindex', '0');
contentEditable.setAttribute('disabled', 'disabled');
el.appendChild(contentEditable);
expect(elementIsTargetOrTargetChild(el).length).toBe(0);
});
});