Permalink
Cannot retrieve contributors at this time
141 lines (126 sloc)
4.02 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/eslint-plugin-jsx-a11y/__tests__/src/util/getAccessibleChildText-test.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import expect from 'expect'; | |
import { elementType } from 'jsx-ast-utils'; | |
import getAccessibleChildText from '../../../src/util/getAccessibleChildText'; | |
import JSXAttributeMock from '../../../__mocks__/JSXAttributeMock'; | |
import JSXElementMock from '../../../__mocks__/JSXElementMock'; | |
describe('getAccessibleChildText', () => { | |
it('returns the aria-label when present', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[JSXAttributeMock('aria-label', 'foo')], | |
), elementType)).toBe('foo'); | |
}); | |
it('returns the aria-label instead of children', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[JSXAttributeMock('aria-label', 'foo')], | |
[{ type: 'JSXText', value: 'bar' }], | |
), elementType)).toBe('foo'); | |
}); | |
it('skips elements with aria-hidden=true', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[JSXAttributeMock('aria-hidden', 'true')], | |
), elementType)).toBe(''); | |
}); | |
it('returns literal value for JSXText child', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'JSXText', value: 'bar' }], | |
), elementType)).toBe('bar'); | |
}); | |
it('returns alt text for img child', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[JSXElementMock('img', [ | |
JSXAttributeMock('src', 'some/path'), | |
JSXAttributeMock('alt', 'a sensible label'), | |
])], | |
), elementType)).toBe('a sensible label'); | |
}); | |
it('returns blank when alt tag is used on arbitrary element', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[JSXElementMock('span', [ | |
JSXAttributeMock('alt', 'a sensible label'), | |
])], | |
), elementType)).toBe(''); | |
}); | |
it('returns literal value for JSXText child', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'Literal', value: 'bar' }], | |
), elementType)).toBe('bar'); | |
}); | |
it('returns trimmed literal value for JSXText child', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'Literal', value: ' bar ' }], | |
), elementType)).toBe('bar'); | |
}); | |
it('returns space-collapsed literal value for JSXText child', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'Literal', value: 'foo bar' }], | |
), elementType)).toBe('foo bar'); | |
}); | |
it('returns punctuation-stripped literal value for JSXText child', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'Literal', value: 'foo, bar. baz? foo; bar:' }], | |
), elementType)).toBe('foo bar baz foo bar'); | |
}); | |
it('returns recursive value for JSXElement child', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[JSXElementMock( | |
'span', | |
[], | |
[{ type: 'Literal', value: 'bar' }], | |
)], | |
), elementType)).toBe('bar'); | |
}); | |
it('skips children with aria-hidden-true', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[JSXElementMock( | |
'span', | |
[], | |
[JSXElementMock( | |
'span', | |
[JSXAttributeMock('aria-hidden', 'true')], | |
)], | |
)], | |
), elementType)).toBe(''); | |
}); | |
it('joins multiple children properly - no spacing', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'Literal', value: 'foo' }, { type: 'Literal', value: 'bar' }], | |
), elementType)).toBe('foo bar'); | |
}); | |
it('joins multiple children properly - with spacing', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'Literal', value: ' foo ' }, { type: 'Literal', value: ' bar ' }], | |
), elementType)).toBe('foo bar'); | |
}); | |
it('skips unknown elements', () => { | |
expect(getAccessibleChildText(JSXElementMock( | |
'a', | |
[], | |
[{ type: 'Literal', value: 'foo' }, { type: 'Unknown' }, { type: 'Literal', value: 'bar' }], | |
), elementType)).toBe('foo bar'); | |
}); | |
}); |