Skip to content

Commit 775d0d1

Browse files
authored
Merge pull request #286 from ljharb/travis
Improve travis-ci tests
2 parents 469243b + 589eb08 commit 775d0d1

21 files changed

+145
-31
lines changed

.travis.yml

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,31 @@
11
language: node_js
22
node_js:
3-
- 4
4-
- 5
5-
- 6
3+
- "8"
4+
- "7"
5+
- "6"
6+
- "5"
7+
- "4"
68
cache:
79
yarn: true
810
directories:
911
- node_modules
1012
script:
11-
- npm run test:ci
13+
- if [ "${FLOW-}" = true ]; then npm run flow; fi
14+
- if [ "${LINT-}" = true ]; then npm run lint; fi
15+
- if [ "${TEST-}" = true ]; then npm run test:ci; fi
1216
after_success:
13-
- npm run coveralls
17+
- if [ "${TEST-}" = true ]; then npm run coveralls; fi
18+
sudo: false
19+
env:
20+
global:
21+
- TEST=true
22+
matrix:
23+
fast_finish: true
24+
include:
25+
- node_js: "node"
26+
env: FLOW=true TEST=false
27+
- node_js: "node"
28+
env: LINT=true TEST=false
29+
allow_failures:
30+
- node_js: "7"
31+
- node_js: "5"

__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+
});

0 commit comments

Comments
 (0)