Skip to content

Commit

Permalink
Add test case for custom rule that imports an ESM module (refs #477).
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidAnson committed Jan 12, 2022
1 parent b1aef98 commit 23d8ed7
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 2 deletions.
26 changes: 26 additions & 0 deletions test/markdownlint-test-custom-rules.js
Expand Up @@ -1143,6 +1143,32 @@ test.cb("customRulesLintJavaScript", (t) => {
});
});

test.cb("customRulesValidateJson", (t) => {
t.plan(2);
const options = {
"customRules": customRules.validateJson,
"files": "test/validate-json.md"
};
markdownlint(options, (err, actual) => {
t.falsy(err);
const expected = {
"test/validate-json.md": [
{
"lineNumber": 22,
"ruleNames": [ "validate-json" ],
"ruleDescription": "Rule that validates JSON code",
"ruleInformation": null,
"errorDetail": "Unexpected end of JSON input",
"errorContext": null,
"errorRange": null
}
]
};
t.deepEqual(actual, expected, "Unexpected issues.");
t.end();
});
});

test("customRulesAsyncThrowsInSyncContext", (t) => {
t.plan(1);
const options = {
Expand Down
2 changes: 1 addition & 1 deletion test/markdownlint-test.js
Expand Up @@ -1109,7 +1109,7 @@ test("allBuiltInRulesHaveValidUrl", (t) => {
});

test("someCustomRulesHaveValidUrl", (t) => {
t.plan(7);
t.plan(8);
customRules.all.forEach(function forRule(rule) {
t.true(!rule.information ||
(Object.getPrototypeOf(rule.information) === URL.prototype));
Expand Down
6 changes: 5 additions & 1 deletion test/rules/rules.js
Expand Up @@ -17,10 +17,14 @@ module.exports.lettersEX = lettersEX;
const lintJavaScript = require("./lint-javascript");
module.exports.lintJavaScript = lintJavaScript;

const validateJson = require("./validate-json");
module.exports.validateJson = validateJson;

module.exports.all = [
anyBlockquote,
everyNLines,
firstLine,
lettersEX,
lintJavaScript
lintJavaScript,
validateJson
];
28 changes: 28 additions & 0 deletions test/rules/validate-json.js
@@ -0,0 +1,28 @@
// @ts-check

"use strict";

const { filterTokens } = require("markdownlint-rule-helpers");

module.exports = {
"names": [ "validate-json" ],
"description": "Rule that validates JSON code",
"tags": [ "test", "validate", "json" ],
"asynchronous": true,
"function": async(params, onError) => {
// eslint-disable-next-line max-len, node/no-unsupported-features/es-syntax
const { "default": stripJsonComments } = await import("strip-json-comments");
filterTokens(params, "fence", (fence) => {
if (/jsonc?/i.test(fence.info)) {
try {
JSON.parse(stripJsonComments(fence.content));
} catch (error) {
onError({
"lineNumber": fence.lineNumber,
"detail": error.message
});
}
}
});
}
};
27 changes: 27 additions & 0 deletions test/validate-json.md
@@ -0,0 +1,27 @@
# Validate JSON

Text

```json
{
"property": "value"
}
```

Text

```jsonc
{
// Comment
"property": "value"
}
```

Text

```json
{
"property": "value"
```

Text

0 comments on commit 23d8ed7

Please sign in to comment.