mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-09-21 21:30:47 +02:00
Add test case for custom rule that imports an ESM module (refs #477).
This commit is contained in:
parent
b1aef98220
commit
23d8ed7c01
5 changed files with 87 additions and 2 deletions
|
@ -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 = {
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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
test/rules/validate-json.js
Normal file
28
test/rules/validate-json.js
Normal file
|
@ -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
test/validate-json.md
Normal file
27
test/validate-json.md
Normal file
|
@ -0,0 +1,27 @@
|
|||
# Validate JSON
|
||||
|
||||
Text
|
||||
|
||||
```json
|
||||
{
|
||||
"property": "value"
|
||||
}
|
||||
```
|
||||
|
||||
Text
|
||||
|
||||
```jsonc
|
||||
{
|
||||
// Comment
|
||||
"property": "value"
|
||||
}
|
||||
```
|
||||
|
||||
Text
|
||||
|
||||
```json
|
||||
{
|
||||
"property": "value"
|
||||
```
|
||||
|
||||
Text
|
Loading…
Add table
Add a link
Reference in a new issue