Skip to content

Commit d560a64

Browse files
MichaelDeBoeyljharb
andcommitted
[Refactor] use messageId instead of message
Co-authored-by: Michaël De Boey <[email protected]> Co-authored-by: Jordan Harband <[email protected]>
1 parent 14cbd92 commit d560a64

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+205
-183
lines changed

__tests__/src/rules/alt-text-test.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,40 @@ import rule from '../../../src/rules/alt-text';
1818

1919
const ruleTester = new RuleTester();
2020

21-
const missingPropError = (type) => ({
22-
message: `${type} elements must have an alt prop, either with meaningful text, or an empty string for decorative images.`,
21+
const missingPropError = (nodeType) => ({
22+
messageId: 'img-no-alt',
23+
data: { nodeType },
2324
type: 'JSXOpeningElement',
2425
});
2526

26-
const altValueError = (type) => ({
27-
message: `Invalid alt value for ${type}. \
28-
Use alt="" for presentational images.`,
27+
const altValueError = (nodeType) => ({
28+
messageId: 'img-invalid-alt',
29+
data: { nodeType },
2930
type: 'JSXOpeningElement',
3031
});
3132

3233
const ariaLabelValueError = {
33-
message: 'The aria-label attribute must have a value. The alt attribute is preferred over aria-label for images.',
34+
messageId: 'img-no-aria-label-value',
3435
};
3536
const ariaLabelledbyValueError = {
36-
message: 'The aria-labelledby attribute must have a value. The alt attribute is preferred over aria-labelledby for images.',
37+
messageId: 'img-no-aria-labelledby-value',
3738
};
3839

3940
const preferAltError = () => ({
40-
message: 'Prefer alt="" over a presentational role. First rule of aria is to not use aria if it can be achieved via native HTML.',
41+
messageId: 'img-presentation-role',
4142
type: 'JSXOpeningElement',
4243
});
4344

4445
const objectError = {
45-
message: 'Embedded <object> elements must have alternative text by providing inner text, aria-label or aria-labelledby props.',
46+
messageId: 'object',
4647
};
4748

4849
const areaError = {
49-
message: 'Each area of an image map must have a text alternative through the `alt`, `aria-label`, or `aria-labelledby` prop.',
50+
messageId: 'area',
5051
};
5152

5253
const inputImageError = {
53-
message: '<input> elements with type="image" must have a text alternative through the `alt`, `aria-label`, or `aria-labelledby` prop.',
54+
messageId: 'input-image',
5455
};
5556

5657
const componentsSettings = {

__tests__/src/rules/anchor-has-content-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/anchor-has-content';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'Anchors must have content and the content must be accessible by a screen reader.',
22+
messageId: 'error',
2323
type: 'JSXOpeningElement',
2424
};
2525

__tests__/src/rules/aria-activedescendant-has-tabindex-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/aria-activedescendant-has-tabindex';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'An element that manages focus with `aria-activedescendant` must have a tabindex',
22+
messageId: 'error',
2323
type: 'JSXOpeningElement',
2424
};
2525

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,22 @@ const ariaAttributes = [...aria.keys()];
2323

2424
const errorMessage = (name) => {
2525
const suggestions = getSuggestion(name, ariaAttributes);
26-
const message = `${name}: This attribute is an invalid ARIA attribute.`;
2726

2827
if (suggestions.length > 0) {
2928
return {
3029
type: 'JSXAttribute',
31-
message: `${message} Did you mean to use ${suggestions}?`,
30+
messageId: 'error-with-suggestions',
31+
data: {
32+
name,
33+
suggestions,
34+
},
3235
};
3336
}
3437

3538
return {
3639
type: 'JSXAttribute',
37-
message,
40+
messageId: 'error',
41+
data: { name },
3842
};
3943
};
4044

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

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,27 +29,10 @@ const errorMessage = (name) => {
2929
values: permittedValues,
3030
} = aria.get(name.toLowerCase());
3131

32-
switch (type) {
33-
case 'tristate':
34-
return { message: `The value for ${name} must be a boolean or the string "mixed".` };
35-
case 'token':
36-
return { message: `The value for ${name} must be a single token from the following: ${permittedValues}.` };
37-
case 'tokenlist':
38-
return {
39-
message: `The value for ${name} must be a list of one or more \
40-
tokens from the following: ${permittedValues}.`,
41-
};
42-
case 'idlist':
43-
return { message: `The value for ${name} must be a list of strings that represent DOM element IDs (idlist)` };
44-
case 'id':
45-
return { message: `The value for ${name} must be a string that represents a DOM element ID` };
46-
case 'boolean':
47-
case 'string':
48-
case 'integer':
49-
case 'number':
50-
default:
51-
return { message: `The value for ${name} must be a ${type}.` };
52-
}
32+
return {
33+
messageId: type,
34+
data: { name, permittedValues, type },
35+
};
5336
};
5437

5538
test('validityCheck', (t) => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import rule from '../../../src/rules/aria-role';
2020
const ruleTester = new RuleTester();
2121

2222
const errorMessage = {
23-
message: 'Elements with ARIA roles must use a valid, non-abstract ARIA role.',
23+
messageId: 'error',
2424
type: 'JSXAttribute',
2525
};
2626

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import rule from '../../../src/rules/aria-unsupported-elements';
2121
const ruleTester = new RuleTester();
2222

2323
const errorMessage = (invalidProp) => ({
24-
message: `This element does not support ARIA roles, states and properties. \
25-
Try removing the prop '${invalidProp}'.`,
24+
messageId: 'error',
25+
data: { invalidProp },
2626
type: 'JSXOpeningElement',
2727
});
2828

__tests__/src/rules/autocomplete-valid-test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ import rule from '../../../src/rules/autocomplete-valid';
2020
const ruleTester = new RuleTester();
2121

2222
const invalidAutocomplete = [{
23-
message: axeFailMessage('autocomplete-valid'),
23+
messageId: 'error',
24+
data: { message: axeFailMessage('autocomplete-valid') },
2425
type: 'JSXOpeningElement',
2526
}];
2627

2728
const inappropriateAutocomplete = [{
28-
message: axeFailMessage('autocomplete-appropriate'),
29+
messageId: 'error',
30+
data: { message: axeFailMessage('autocomplete-appropriate') },
2931
type: 'JSXOpeningElement',
3032
}];
3133

__tests__/src/rules/click-events-have-key-events-test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ import rule from '../../../src/rules/click-events-have-key-events';
1818

1919
const ruleTester = new RuleTester();
2020

21-
const errorMessage = 'Visible, non-interactive elements with click handlers must have at least one keyboard listener.';
22-
2321
const expectedError = {
24-
message: errorMessage,
22+
messageId: 'error',
2523
type: 'JSXOpeningElement',
2624
};
2725

__tests__/src/rules/heading-has-content-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/heading-has-content';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'Headings must have content and the content must be accessible by a screen reader.',
22+
messageId: 'error',
2323
type: 'JSXOpeningElement',
2424
};
2525

__tests__/src/rules/html-has-lang-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/html-has-lang';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: '<html> elements must have the lang prop.',
22+
messageId: 'error',
2323
type: 'JSXOpeningElement',
2424
};
2525

__tests__/src/rules/iframe-has-title-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/iframe-has-title';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: '<iframe> elements must have a unique title property.',
22+
messageId: 'error',
2323
type: 'JSXOpeningElement',
2424
};
2525

__tests__/src/rules/img-redundant-alt-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const componentsSettings = {
3232
const ruleTester = new RuleTester();
3333

3434
const expectedError = {
35-
message: 'Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.',
35+
messageId: 'error',
3636
type: 'JSXOpeningElement',
3737
};
3838

__tests__/src/rules/lang-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/lang';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'lang attribute must have a valid value.',
22+
messageId: 'error',
2323
type: 'JSXAttribute',
2424
};
2525

__tests__/src/rules/no-access-key-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/no-access-key';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'No access key attribute allowed. Inconsistencies between keyboard shortcuts and keyboard commands used by screen readers and keyboard-only users create a11y complications.',
22+
messageId: 'error',
2323
type: 'JSXOpeningElement',
2424
};
2525

__tests__/src/rules/no-aria-hidden-on-focusable-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/no-aria-hidden-on-focusable';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'aria-hidden="true" must not be set on focusable elements.',
22+
messageId: 'error',
2323
type: 'JSXOpeningElement',
2424
};
2525

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/no-autofocus';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'The autoFocus prop should not be used, as it can reduce usability and accessibility for users.',
22+
messageId: 'error',
2323
type: 'JSXAttribute',
2424
};
2525

__tests__/src/rules/no-distracting-elements-test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ import rule from '../../../src/rules/no-distracting-elements';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = (element) => ({
22-
message: `Do not use <${element}> elements as they can create visual accessibility issues and are deprecated.`,
22+
messageId: 'error',
23+
data: { element },
2324
type: 'JSXOpeningElement',
2425
});
2526

__tests__/src/rules/prefer-tag-over-role-test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import rule from '../../../src/rules/prefer-tag-over-role';
66
const ruleTester = new RuleTester();
77

88
const expectedError = (role, tag) => ({
9-
message: `Use ${tag} instead of the "${role}" role to ensure accessibility across all devices.`,
9+
messageId: 'error',
10+
data: { tag, role },
1011
type: 'JSXOpeningElement',
1112
});
1213

__tests__/src/rules/role-has-required-aria-props-test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ const errorMessage = (role) => {
2525
const requiredProps = Object.keys(roles.get(role).requiredProps);
2626

2727
return {
28-
message: `Elements with the ARIA role "${role}" must have the following attributes defined: ${requiredProps}`,
28+
messageId: 'error',
29+
data: { role, requiredProps },
2930
type: 'JSXAttribute',
3031
};
3132
};

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,9 @@ import rule from '../../../src/rules/role-supports-aria-props';
2323

2424
const ruleTester = new RuleTester();
2525

26-
const generateErrorMessage = (attr, role, tag, isImplicit) => {
27-
if (isImplicit) {
28-
return `The attribute ${attr} is not supported by the role ${role}. This role is implicit on the element ${tag}.`;
29-
}
30-
31-
return `The attribute ${attr} is not supported by the role ${role}.`;
32-
};
33-
3426
const errorMessage = (attr, role, tag, isImplicit) => ({
35-
message: generateErrorMessage(attr, role, tag, isImplicit),
27+
messageId: isImplicit ? 'implicit' : 'explicit',
28+
data: { attr, role, tag },
3629
type: 'JSXOpeningElement',
3730
});
3831

__tests__/src/rules/scope-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/scope';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'The scope prop can only be used on <th> elements.',
22+
messageId: 'error',
2323
type: 'JSXAttribute',
2424
};
2525

__tests__/src/rules/tabindex-no-positive-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import rule from '../../../src/rules/tabindex-no-positive';
1919
const ruleTester = new RuleTester();
2020

2121
const expectedError = {
22-
message: 'Avoid positive integer values for tabIndex.',
22+
messageId: 'error',
2323
type: 'JSXAttribute',
2424
};
2525

0 commit comments

Comments
 (0)