Skip to content

Commit

Permalink
feat(matches-definition): add generic check matches-definition (#2233)
Browse files Browse the repository at this point in the history
  • Loading branch information
straker authored May 18, 2020
1 parent bb72acd commit 20467aa
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 34 deletions.
7 changes: 7 additions & 0 deletions lib/checks/generic/matches-definition-evaluate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import matches from '../../commons/matches';

function matchesDefinitionEvaluate(_, options, virtualNode) {
return matches(virtualNode, options.matcher);
}

export default matchesDefinitionEvaluate;
5 changes: 0 additions & 5 deletions lib/checks/shared/role-none-evaluate.js

This file was deleted.

9 changes: 8 additions & 1 deletion lib/checks/shared/role-none.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
{
"id": "role-none",
"evaluate": "role-none-evaluate",
"evaluate": "matches-definition-evaluate",
"options": {
"matcher": {
"attributes": {
"role": "none"
}
}
},
"metadata": {
"impact": "minor",
"messages": {
Expand Down
5 changes: 0 additions & 5 deletions lib/checks/shared/role-presentation-evaluate.js

This file was deleted.

9 changes: 8 additions & 1 deletion lib/checks/shared/role-presentation.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
{
"id": "role-presentation",
"evaluate": "role-presentation-evaluate",
"evaluate": "matches-definition-evaluate",
"options": {
"matcher": {
"attributes": {
"role": "presentation"
}
}
},
"metadata": {
"impact": "minor",
"messages": {
Expand Down
6 changes: 2 additions & 4 deletions lib/core/base/metadata-function-map.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import autocompleteValidEvaluate from '../../checks/forms/autocomplete-valid-eva
import attrNonSpaceContentEvaluate from '../../checks/generic/attr-non-space-content-evaluate';
import hasDescendantAfter from '../../checks/generic/has-descendant-after';
import hasDescendantEvaluate from '../../checks/generic/has-descendant-evaluate';
import matchesDefinitionEvaluate from '../../checks/generic/matches-definition-evaluate';
import pageNoDuplicateAfter from '../../checks/generic/page-no-duplicate-after';
import pageNoDuplicateEvaluate from '../../checks/generic/page-no-duplicate-evaluate';

Expand Down Expand Up @@ -69,8 +70,6 @@ import hasAltEvaluate from '../../checks/shared/has-alt-evaluate';
import hasVisibleTextEvaluate from '../../checks/shared/has-visible-text-evaluate';
import isOnScreenEvaluate from '../../checks/shared/is-on-screen-evaluate';
import nonEmptyIfPresentEvaluate from '../../checks/shared/non-empty-if-present-evaluate';
import roleNoneEvaluate from '../../checks/shared/role-none-evaluate';
import rolePresentationEvaluate from '../../checks/shared/role-presentation-evaluate';
import svgNonEmptyTitleEvaluate from '../../checks/shared/svg-non-empty-title-evaluate';

// mobile
Expand Down Expand Up @@ -205,6 +204,7 @@ const metadataFunctionMap = {
'attr-non-space-content-evaluate': attrNonSpaceContentEvaluate,
'has-descendant-after': hasDescendantAfter,
'has-descendant-evaluate': hasDescendantEvaluate,
'matches-definition-evaluate': matchesDefinitionEvaluate,
'page-no-duplicate-after': pageNoDuplicateAfter,
'page-no-duplicate-evaluate': pageNoDuplicateEvaluate,

Expand Down Expand Up @@ -232,8 +232,6 @@ const metadataFunctionMap = {
'has-visible-text-evaluate': hasVisibleTextEvaluate,
'is-on-screen-evaluate': isOnScreenEvaluate,
'non-empty-if-present-evaluate': nonEmptyIfPresentEvaluate,
'role-none-evaluate': roleNoneEvaluate,
'role-presentation-evaluate': rolePresentationEvaluate,
'svg-non-empty-title-evaluate': svgNonEmptyTitleEvaluate,

// mobile
Expand Down
17 changes: 8 additions & 9 deletions test/checks/shared/role-none.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,28 @@ describe('role-none', function() {
'use strict';

var fixture = document.getElementById('fixture');
var queryFixture = axe.testUtils.queryFixture;
var checkEvaluate = axe.testUtils.getCheckEvaluate('role-none');

afterEach(function() {
fixture.innerHTML = '';
});

it('should detect role="none" on the element', function() {
fixture.innerHTML = '<div role="none"></div>';
var node = fixture.querySelector('div');
var vNode = queryFixture('<div id="target" role="none"></div>');

assert.isTrue(axe.testUtils.getCheckEvaluate('role-none')(node));
assert.isTrue(checkEvaluate(null, null, vNode));
});

it('should return false when role !== none', function() {
fixture.innerHTML = '<div role="cats"></div>';
var node = fixture.querySelector('div');
var vNode = queryFixture('<div id="target" role="cats"></div>');

assert.isFalse(axe.testUtils.getCheckEvaluate('role-none')(node));
assert.isFalse(checkEvaluate(null, null, vNode));
});

it('should return false when there is no role attribute', function() {
fixture.innerHTML = '<div></div>';
var node = fixture.querySelector('div');
var vNode = queryFixture('<div id="target"></div>');

assert.isFalse(axe.testUtils.getCheckEvaluate('role-none')(node));
assert.isFalse(checkEvaluate(null, null, vNode));
});
});
17 changes: 8 additions & 9 deletions test/checks/shared/role-presentation.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,28 @@ describe('role-presentation', function() {
'use strict';

var fixture = document.getElementById('fixture');
var queryFixture = axe.testUtils.queryFixture;
var checkEvaluate = axe.testUtils.getCheckEvaluate('role-presentation');

afterEach(function() {
fixture.innerHTML = '';
});

it('should detect role="presentation" on the element', function() {
fixture.innerHTML = '<div role="presentation"></div>';
var node = fixture.querySelector('div');
var vNode = queryFixture('<div id="target" role="presentation"></div>');

assert.isTrue(axe.testUtils.getCheckEvaluate('role-presentation')(node));
assert.isTrue(checkEvaluate(null, null, vNode));
});

it('should return false when role !== presentation', function() {
fixture.innerHTML = '<div role="cats"></div>';
var node = fixture.querySelector('div');
var vNode = queryFixture('<div id="target" role="cats"></div>');

assert.isFalse(axe.testUtils.getCheckEvaluate('role-presentation')(node));
assert.isFalse(checkEvaluate(null, null, vNode));
});

it('should return false when there is no role attribute', function() {
fixture.innerHTML = '<div></div>';
var node = fixture.querySelector('div');
var vNode = queryFixture('<div id="target"></div>');

assert.isFalse(axe.testUtils.getCheckEvaluate('role-presentation')(node));
assert.isFalse(checkEvaluate(null, null, vNode));
});
});

0 comments on commit 20467aa

Please sign in to comment.