- Complete React app with 7 developer tools - JSON Tool with visual structured editor - Serialize Tool with visual structured editor - URL, Base64, CSV/JSON, Beautifier, Diff tools - Responsive navigation with dropdown menu - Dark/light mode toggle - Mobile-responsive design with sticky header - All tools working with copy/paste functionality
175 lines
3.9 KiB
JavaScript
175 lines
3.9 KiB
JavaScript
import test from 'tape';
|
|
import { elementType } from 'jsx-ast-utils';
|
|
|
|
import getAccessibleChildText from '../../../src/util/getAccessibleChildText';
|
|
import JSXAttributeMock from '../../../__mocks__/JSXAttributeMock';
|
|
import JSXElementMock from '../../../__mocks__/JSXElementMock';
|
|
|
|
test('getAccessibleChildText', (t) => {
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[JSXAttributeMock('aria-label', 'foo')],
|
|
), elementType),
|
|
'foo',
|
|
'returns the aria-label when present',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[JSXAttributeMock('aria-label', 'foo')],
|
|
[{ type: 'JSXText', value: 'bar' }],
|
|
), elementType),
|
|
'foo',
|
|
'returns the aria-label instead of children',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[JSXAttributeMock('aria-hidden', 'true')],
|
|
), elementType),
|
|
'',
|
|
'skips elements with aria-hidden=true',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'JSXText', value: 'bar' }],
|
|
), elementType),
|
|
'bar',
|
|
'returns literal value for JSXText child',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[JSXElementMock('img', [
|
|
JSXAttributeMock('src', 'some/path'),
|
|
JSXAttributeMock('alt', 'a sensible label'),
|
|
])],
|
|
), elementType),
|
|
'a sensible label',
|
|
'returns alt text for img child',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[JSXElementMock('span', [
|
|
JSXAttributeMock('alt', 'a sensible label'),
|
|
])],
|
|
), elementType),
|
|
'',
|
|
'returns blank when alt tag is used on arbitrary element',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'Literal', value: 'bar' }],
|
|
), elementType),
|
|
'bar',
|
|
'returns literal value for JSXText child',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'Literal', value: ' bar ' }],
|
|
), elementType),
|
|
'bar',
|
|
'returns trimmed literal value for JSXText child',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'Literal', value: 'foo bar' }],
|
|
), elementType),
|
|
'foo bar',
|
|
'returns space-collapsed literal value for JSXText child',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'Literal', value: 'foo, bar. baz? foo; bar:' }],
|
|
), elementType),
|
|
'foo bar baz foo bar',
|
|
'returns punctuation-stripped literal value for JSXText child',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[JSXElementMock(
|
|
'span',
|
|
[],
|
|
[{ type: 'Literal', value: 'bar' }],
|
|
)],
|
|
), elementType),
|
|
'bar',
|
|
'returns recursive value for JSXElement child',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[JSXElementMock(
|
|
'span',
|
|
[],
|
|
[JSXElementMock(
|
|
'span',
|
|
[JSXAttributeMock('aria-hidden', 'true')],
|
|
)],
|
|
)],
|
|
), elementType),
|
|
'',
|
|
'skips children with aria-hidden-true',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'Literal', value: 'foo' }, { type: 'Literal', value: 'bar' }],
|
|
), elementType),
|
|
'foo bar',
|
|
'joins multiple children properly - no spacing',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'Literal', value: ' foo ' }, { type: 'Literal', value: ' bar ' }],
|
|
), elementType),
|
|
'foo bar',
|
|
'joins multiple children properly - with spacing',
|
|
);
|
|
|
|
t.equal(
|
|
getAccessibleChildText(JSXElementMock(
|
|
'a',
|
|
[],
|
|
[{ type: 'Literal', value: 'foo' }, { type: 'Unknown' }, { type: 'Literal', value: 'bar' }],
|
|
), elementType),
|
|
'foo bar',
|
|
'skips unknown elements',
|
|
);
|
|
|
|
t.end();
|
|
});
|