Skip to content

Commit

Permalink
Update and add more test coverage for no-default-alt-text (#84)
Browse files Browse the repository at this point in the history
* Make sure that HTML that is inlined is supported

* Add detail

* Update the helpers to support multiple errors in one line

* add test support
  • Loading branch information
khiga8 committed Oct 9, 2023
1 parent 98da1c7 commit c29f004
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 18 deletions.
15 changes: 12 additions & 3 deletions src/rules/no-default-alt-text.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ module.exports = {
function: function GH001(params, onError) {
const htmlTagsWithImages = params.parsers.markdownit.tokens.filter(
(token) => {
return token.type === "html_block" && token.content.includes("<img");
return (
(token.type === "html_block" && token.content.includes("<img")) ||
(token.type === "inline" &&
token.content.includes("<img") &&
token.children.some((child) => child.type === "html_inline"))
);
},
);
const inlineImages = params.parsers.markdownit.tokens.filter(
Expand All @@ -36,12 +41,15 @@ module.exports = {
const lineRange = token.map;
const lineNumber = token.lineNumber;
const lines = params.lines.slice(lineRange[0], lineRange[1]);

for (let i = 0; i < lines.length; i++) {
const line = lines[i];
let matches;
if (token.type === "inline") {
matches = line.matchAll(markdownAltRegex);
if (token.children.some((child) => child.type === "html_inline")) {
matches = line.matchAll(htmlAltRegex);
} else {
matches = line.matchAll(markdownAltRegex);
}
} else {
matches = line.matchAll(htmlAltRegex);
}
Expand All @@ -51,6 +59,7 @@ module.exports = {
onError({
lineNumber: lineNumber + i,
range: [startIndex + 1, altText.length],
detail: `Flagged alt: ${altText}`,
});
}
}
Expand Down
2 changes: 1 addition & 1 deletion test/accessibility-rules.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ describe("when A11y rules applied", () => {
.map((failure) => failure.ruleNames)
.flat();

expect(failuresForExampleFile).toHaveLength(1);
expect(failuresForExampleFile).toHaveLength(3);
expect(failureNames).toContain("no-default-alt-text");
});
});
2 changes: 2 additions & 0 deletions test/example.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# Example Violations

![Screen Shot 2022-06-26 at 7 41 30 PM](https://user-images.githubusercontent.com/abcdef.png)

<img alt="image"><img alt="Image">
21 changes: 13 additions & 8 deletions test/no-default-alt-text.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,15 @@ describe("GH001: No Default Alt Text", () => {
];

const results = await runTest(strings, altTextRule);

for (const result of results) {
expect(result).not.toBeDefined();
}
expect(results.length).toBe(0);
});
test("html image", async () => {
const strings = [
'<img alt="A helpful description" src="https://user-images.githubusercontent.com/abcdef.png">',
];

const results = await runTest(strings, altTextRule);

for (const result of results) {
expect(result).not.toBeDefined();
}
expect(results.length).toBe(0);
});
});
describe("failures", () => {
Expand Down Expand Up @@ -77,6 +71,17 @@ describe("GH001: No Default Alt Text", () => {
}
});

test("flags multiple consecutive inline images", async () => {
const strings = ['<img alt="image"><img alt="Image">'];
const results = await runTest(strings, altTextRule);
expect(results).toHaveLength(2);

expect(results[0].errorRange).toEqual([11, 5]);
expect(results[0].errorDetail).toEqual("Flagged alt: image");
expect(results[1].errorRange).toEqual([28, 5]);
expect(results[1].errorDetail).toEqual("Flagged alt: Image");
});

test("error message", async () => {
const strings = [
"![Screen Shot 2022-06-26 at 7 41 30 PM](https://user-images.githubusercontent.com/abcdef.png)",
Expand Down
5 changes: 1 addition & 4 deletions test/no-generic-link-text.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,7 @@ describe("GH002: No Generic Link Text", () => {
];

const results = await runTest(strings, noGenericLinkTextRule);

for (const result of results) {
expect(result).not.toBeDefined();
}
expect(results.length).toBe(0);
});
});
describe("failures", () => {
Expand Down
6 changes: 4 additions & 2 deletions test/utils/run-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ async function runTest(strings, rule, ruleConfig) {
customRules: [rule],
};

return await Promise.all(
const results = await Promise.all(
strings.map((variation) => {
const thisTestConfig = {
...config,
Expand All @@ -21,11 +21,13 @@ async function runTest(strings, rule, ruleConfig) {
return new Promise((resolve, reject) => {
markdownlint(thisTestConfig, (err, result) => {
if (err) reject(err);
resolve(result[0][0]);
resolve(result[0]);
});
});
}),
);

return results.flat();
}

exports.runTest = runTest;

0 comments on commit c29f004

Please sign in to comment.