import {_computeAriaAccessibleName} from './aria-accessible-name';
describe('_computeAriaAccessibleName', () => {
let rootElement: HTMLSpanElement;
beforeEach(() => {
rootElement = document.createElement('span');
document.body.appendChild(rootElement);
});
afterEach(() => {
rootElement.remove();
});
it('uses aria-labelledby over aria-label', () => {
rootElement.innerHTML = `
`;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Aria Labelledby');
});
it('uses aria-label over for/id', () => {
rootElement.innerHTML = `
`;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Aria Label');
});
it('uses a label with for/id over a title attribute', () => {
rootElement.innerHTML = `
`;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('For');
});
it('returns title when argument has a specified title', () => {
rootElement.innerHTML = ``;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Title');
});
// match browser behavior of giving placeholder attribute preference over title attribute
it('uses placeholder over title', () => {
rootElement.innerHTML = ``;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Placeholder');
});
it('uses aria-label over title and placeholder', () => {
rootElement.innerHTML = ``;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Aria Label');
});
it('includes both textnode and element children of label with for/id', () => {
rootElement.innerHTML = `
`;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Hello Wo r ld !');
});
it('return computed name of hidden label which has for/id', () => {
rootElement.innerHTML = `
`;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('For');
});
it('returns computed names of existing elements when 2 of 3 targets of aria-labelledby exist', () => {
rootElement.innerHTML = `
`;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Label1 Label2');
});
it('returns repeated label when there are duplicate ids in aria-labelledby', () => {
rootElement.innerHTML = `
`;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('Label1 Label1');
});
it('returns empty string when passed ``', () => {
rootElement.innerHTML = ``;
const input = rootElement.querySelector('#test-el')!;
expect(_computeAriaAccessibleName(input as HTMLInputElement)).toBe('');
});
it('ignores the aria-labelledby of an aria-labelledby', () => {
rootElement.innerHTML = `