Skip to content

Commit 0c8aba5

Browse files
committed
[Tests] improve coverage
1 parent 1d89064 commit 0c8aba5

11 files changed

+96
-6
lines changed

__tests__/src/rules/aria-role-test.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@ const errorMessage = {
2424
type: 'JSXAttribute',
2525
};
2626

27-
const validRoles = [...roles.keys()].filter(
27+
const roleKeys = [...roles.keys()];
28+
29+
const validRoles = roleKeys.filter(
2830
role => roles.get(role).abstract === false,
2931
);
30-
const invalidRoles = [...roles.keys()].filter(
32+
const invalidRoles = roleKeys.filter(
3133
role => roles.get(role).abstract === true,
3234
);
3335

@@ -60,6 +62,8 @@ ruleTester.run('aria-role', rule, {
6062
{ code: '<div role="doc-appendix doc-bibliography" />' },
6163
{ code: '<Bar baz />' },
6264
{ code: '<Foo role="bar" />', options: ignoreNonDOMSchema },
65+
{ code: '<fakeDOM role="bar" />', options: ignoreNonDOMSchema },
66+
{ code: '<img role="presentation" />', options: ignoreNonDOMSchema },
6367
].concat(validTests).map(parserOptionsMapper),
6468

6569
invalid: [

__tests__/src/rules/aria-unsupported-elements-test.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ const ariaValidityTests = domElements.map((element) => {
4444
return {
4545
code: `<${element} ${aria} />`,
4646
};
47+
}).concat({
48+
code: '<fake aria-hidden />',
49+
errors: [errorMessage('aria-hidden')],
4750
});
4851

4952
// Generate invalid test cases.
@@ -57,7 +60,7 @@ const invalidRoleValidityTests = domElements
5760
const invalidAriaValidityTests = domElements
5861
.filter(element => Boolean(dom.get(element).reserved))
5962
.map(reservedElem => ({
60-
code: `<${reservedElem} aria-hidden {...props} />`,
63+
code: `<${reservedElem} aria-hidden aria-role="none" {...props} />`,
6164
errors: [errorMessage('aria-hidden')],
6265
}));
6366

__tests__/src/rules/no-autofocus-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ ruleTester.run('no-autofocus', rule, {
3636
{ code: '<input autofocus="true" />;' },
3737
{ code: '<Foo bar />' },
3838
{ code: '<Foo autoFocus />', options: ignoreNonDOMSchema },
39+
{ code: '<div><div autofocus /></div>', options: ignoreNonDOMSchema },
3940
].map(parserOptionsMapper),
4041
invalid: [
4142
{ code: '<div autoFocus />', errors: [expectedError] },

__tests__/src/rules/no-interactive-element-to-noninteractive-role-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ ruleTester.run(`${ruleName}:recommended`, rule, {
368368
valid: [
369369
...alwaysValid,
370370
{ code: '<tr role="presentation" />;' },
371+
{ code: '<Component role="presentation" />;' },
371372
]
372373
.map(ruleOptionsMapperFactory(recommendedOptions))
373374
.map(parserOptionsMapper),

__tests__/src/rules/no-noninteractive-element-to-interactive-role-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ ruleTester.run(`${ruleName}:recommended`, rule, {
447447
{ code: '<li role="menuitem" />;' },
448448
{ code: '<li role="row" />;' },
449449
{ code: '<li role="treeitem" />;' },
450+
{ code: '<Component role="treeitem" />;' },
450451
]
451452
.map(ruleOptionsMapperFactory(recommendedOptions))
452453
.map(parserOptionsMapper),

__tests__/src/util/attributesComparator-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import expect from 'expect';
33
import attributesComparator from '../../../src/util/attributesComparator';
44
import JSXAttributeMock from '../../../__mocks__/JSXAttributeMock';
5+
import JSXElementMock from '../../../__mocks__/JSXElementMock';
56

67
describe('attributesComparator', () => {
78
describe('base attributes', () => {
@@ -65,6 +66,7 @@ describe('attributesComparator', () => {
6566
describe('and the values are the different', () => {
6667
it('should return false', () => {
6768
attributes = [
69+
JSXElementMock(),
6870
JSXAttributeMock('biz', 2),
6971
JSXAttributeMock('ziff', 'opo'),
7072
JSXAttributeMock('far', 'lolz'),
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/* eslint-env mocha */
2+
import expect from 'expect';
3+
import JSXAttributeMock from '../../../../__mocks__/JSXAttributeMock';
4+
import getImplicitRoleForInput from '../../../../src/util/implicitRoles/input';
5+
6+
describe('isAbstractRole', () => {
7+
it('works for buttons', () => {
8+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'button')])).toBe('button');
9+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'image')])).toBe('button');
10+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'reset')])).toBe('button');
11+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'submit')])).toBe('button');
12+
});
13+
it('works for checkboxes', () => {
14+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'checkbox')])).toBe('checkbox');
15+
});
16+
it('works for radios', () => {
17+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'radio')])).toBe('radio');
18+
});
19+
it('works for ranges', () => {
20+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'range')])).toBe('slider');
21+
});
22+
it('works for textboxes', () => {
23+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'email')])).toBe('textbox');
24+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'password')])).toBe('textbox');
25+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'search')])).toBe('textbox');
26+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'tel')])).toBe('textbox');
27+
expect(getImplicitRoleForInput([JSXAttributeMock('type', 'url')])).toBe('textbox');
28+
});
29+
it('works for the default case', () => {
30+
expect(getImplicitRoleForInput([JSXAttributeMock('type', '')])).toBe('textbox');
31+
});
32+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/* eslint-env mocha */
2+
import expect from 'expect';
3+
import JSXAttributeMock from '../../../../__mocks__/JSXAttributeMock';
4+
import getImplicitRoleForMenu from '../../../../src/util/implicitRoles/menu';
5+
6+
describe('isAbstractRole', () => {
7+
it('works for toolbars', () => {
8+
expect(getImplicitRoleForMenu([JSXAttributeMock('type', 'toolbar')])).toBe('toolbar');
9+
});
10+
it('works for non-toolbars', () => {
11+
expect(getImplicitRoleForMenu([JSXAttributeMock('type', '')])).toBe('');
12+
});
13+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/* eslint-env mocha */
2+
import expect from 'expect';
3+
import JSXAttributeMock from '../../../../__mocks__/JSXAttributeMock';
4+
import getImplicitRoleForMenuitem from '../../../../src/util/implicitRoles/menuitem';
5+
6+
describe('isAbstractRole', () => {
7+
it('works for menu items', () => {
8+
expect(getImplicitRoleForMenuitem([JSXAttributeMock('type', 'command')])).toBe('menuitem');
9+
});
10+
it('works for menu item checkboxes', () => {
11+
expect(getImplicitRoleForMenuitem([JSXAttributeMock('type', 'checkbox')])).toBe('menuitemcheckbox');
12+
});
13+
it('works for menu item radios', () => {
14+
expect(getImplicitRoleForMenuitem([JSXAttributeMock('type', 'radio')])).toBe('menuitemradio');
15+
});
16+
it('works for non-toolbars', () => {
17+
expect(getImplicitRoleForMenuitem([JSXAttributeMock('type', '')])).toBe('');
18+
});
19+
});

__tests__/src/util/schemas-test.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-env jest */
22
import assert from 'assert';
3-
import { generateObjSchema, arraySchema } from '../../../src/util/schemas';
3+
import { generateObjSchema, arraySchema, enumArraySchema } from '../../../src/util/schemas';
44

55
describe('schemas', () => {
66
it('should generate an object schema with correct properties', () => {
@@ -13,4 +13,18 @@ describe('schemas', () => {
1313
assert.deepEqual(properties.foo, 'bar');
1414
assert.deepEqual(properties.baz.type, 'array');
1515
});
16+
describe('enumArraySchema', () => {
17+
it('works with no arguments', () => {
18+
assert.deepEqual(enumArraySchema(), {
19+
additionalItems: false,
20+
items: {
21+
enum: [],
22+
type: 'string',
23+
},
24+
minItems: 0,
25+
type: 'array',
26+
uniqueItems: true,
27+
});
28+
});
29+
});
1630
});

0 commit comments

Comments
 (0)