mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-12-17 06:20:12 +01:00
Add tests to verify detailed result format and basic content.
This commit is contained in:
parent
23404f95ac
commit
5627bc27eb
13 changed files with 434 additions and 27 deletions
|
|
@ -898,7 +898,8 @@ module.exports = [
|
|||
var left = linkText.trimLeft().length !== linkText.length;
|
||||
var right = linkText.trimRight().length !== linkText.length;
|
||||
if (left || right) {
|
||||
errors.addContext(token.lineNumber, linkText, left, right);
|
||||
errors.addContext(
|
||||
token.lineNumber, "[" + linkText + "]", left, right);
|
||||
}
|
||||
} else if (inLink) {
|
||||
linkText += child.content;
|
||||
|
|
|
|||
17
test/detailed-results-MD001-MD010.md
Normal file
17
test/detailed-results-MD001-MD010.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
## One
|
||||
|
||||
#### Two
|
||||
|
||||
### Three ###
|
||||
|
||||
* Alpha
|
||||
* Bravo
|
||||
|
||||
- Charlie
|
||||
|
||||
* Delta
|
||||
* Echo
|
||||
|
||||
Text
|
||||
|
||||
Text text
|
||||
74
test/detailed-results-MD001-MD010.results.json
Normal file
74
test/detailed-results-MD001-MD010.results.json
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
[
|
||||
{
|
||||
"lineNumber": 3,
|
||||
"ruleName": "MD001",
|
||||
"ruleAlias": "header-increment",
|
||||
"ruleDescription": "Header levels should only increment by one level at a time",
|
||||
"errorDetail": "Expected: h3; Actual: h4",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 1,
|
||||
"ruleName": "MD002",
|
||||
"ruleAlias": "first-header-h1",
|
||||
"ruleDescription": "First header should be a top level header",
|
||||
"errorDetail": "Expected: h1; Actual: h2",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 5,
|
||||
"ruleName": "MD003",
|
||||
"ruleAlias": "header-style",
|
||||
"ruleDescription": "Header style",
|
||||
"errorDetail": "Expected: atx; Actual: atx_closed",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 10,
|
||||
"ruleName": "MD004",
|
||||
"ruleAlias": "ul-style",
|
||||
"ruleDescription": "Unordered list style",
|
||||
"errorDetail": "Expected: asterisk; Actual: dash",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 8,
|
||||
"ruleName": "MD005",
|
||||
"ruleAlias": "list-indent",
|
||||
"ruleDescription": "Inconsistent indentation for list items at the same level",
|
||||
"errorDetail": "Expected: 0; Actual: 1",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 12,
|
||||
"ruleName": "MD006",
|
||||
"ruleAlias": "ul-start-left",
|
||||
"ruleDescription": "Consider starting bulleted lists at the beginning of the line",
|
||||
"errorDetail": "Expected: 0; Actual: 1",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 12,
|
||||
"ruleName": "MD007",
|
||||
"ruleAlias": "ul-indent",
|
||||
"ruleDescription": "Unordered list indentation",
|
||||
"errorDetail": "Expected: 2; Actual: 1",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 15,
|
||||
"ruleName": "MD009",
|
||||
"ruleAlias": "no-trailing-spaces",
|
||||
"ruleDescription": "Trailing spaces",
|
||||
"errorDetail": "Expected: 0; Actual: 1",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 17,
|
||||
"ruleName": "MD010",
|
||||
"ruleAlias": "no-hard-tabs",
|
||||
"ruleDescription": "Hard tabs",
|
||||
"errorDetail": "Column: 5",
|
||||
"errorContext": null
|
||||
}
|
||||
]
|
||||
16
test/detailed-results-MD011-MD021.md
Normal file
16
test/detailed-results-MD011-MD021.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<!-- markdownlint-disable MD003 -->
|
||||
|
||||
A (reversed)[link] example.
|
||||
|
||||
|
||||
123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
|
||||
|
||||
$ command with no output
|
||||
|
||||
#No space A
|
||||
|
||||
# Multiple spaces A
|
||||
|
||||
#No space B#
|
||||
|
||||
# Multiple spaces B #
|
||||
66
test/detailed-results-MD011-MD021.results.json
Normal file
66
test/detailed-results-MD011-MD021.results.json
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
[
|
||||
{
|
||||
"lineNumber": 3,
|
||||
"ruleName": "MD011",
|
||||
"ruleAlias": "no-reversed-links",
|
||||
"ruleDescription": "Reversed link syntax",
|
||||
"errorDetail": "(reversed)[link]",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 5,
|
||||
"ruleName": "MD012",
|
||||
"ruleAlias": "no-multiple-blanks",
|
||||
"ruleDescription": "Multiple consecutive blank lines",
|
||||
"errorDetail": "Expected: 1; Actual: 2",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 6,
|
||||
"ruleName": "MD013",
|
||||
"ruleAlias": "line-length",
|
||||
"ruleDescription": "Line length",
|
||||
"errorDetail": "Expected: 80; Actual: 99",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 8,
|
||||
"ruleName": "MD014",
|
||||
"ruleAlias": "commands-show-output",
|
||||
"ruleDescription": "Dollar signs used before commands without showing output",
|
||||
"errorDetail": null,
|
||||
"errorContext": "$ command with no output"
|
||||
},
|
||||
{
|
||||
"lineNumber": 10,
|
||||
"ruleName": "MD018",
|
||||
"ruleAlias": "no-missing-space-atx",
|
||||
"ruleDescription": "No space after hash on atx style header",
|
||||
"errorDetail": null,
|
||||
"errorContext": "#No space A"
|
||||
},
|
||||
{
|
||||
"lineNumber": 12,
|
||||
"ruleName": "MD019",
|
||||
"ruleAlias": "no-multiple-space-atx",
|
||||
"ruleDescription": "Multiple spaces after hash on atx style header",
|
||||
"errorDetail": null,
|
||||
"errorContext": "# Multiple spaces A"
|
||||
},
|
||||
{
|
||||
"lineNumber": 14,
|
||||
"ruleName": "MD020",
|
||||
"ruleAlias": "no-missing-space-closed-atx",
|
||||
"ruleDescription": "No space inside hashes on closed atx style header",
|
||||
"errorDetail": null,
|
||||
"errorContext": "#No space B#"
|
||||
},
|
||||
{
|
||||
"lineNumber": 16,
|
||||
"ruleName": "MD021",
|
||||
"ruleAlias": "no-multiple-space-closed-atx",
|
||||
"ruleDescription": "Multiple spaces inside hashes on closed atx style header",
|
||||
"errorDetail": null,
|
||||
"errorContext": "# Multiple spaces B #"
|
||||
}
|
||||
]
|
||||
13
test/detailed-results-MD022-MD030.md
Normal file
13
test/detailed-results-MD022-MD030.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# Heading
|
||||
Text
|
||||
|
||||
# Heading
|
||||
|
||||
## Another heading.
|
||||
|
||||
> Multiple spaces
|
||||
|
||||
> Blank line above
|
||||
|
||||
1. Alpha
|
||||
2. Beta
|
||||
74
test/detailed-results-MD022-MD030.results.json
Normal file
74
test/detailed-results-MD022-MD030.results.json
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
[
|
||||
{
|
||||
"lineNumber": 1,
|
||||
"ruleName": "MD022",
|
||||
"ruleAlias": "blanks-around-headers",
|
||||
"ruleDescription": "Headers should be surrounded by blank lines",
|
||||
"errorDetail": null,
|
||||
"errorContext": "# Heading"
|
||||
},
|
||||
{
|
||||
"lineNumber": 1,
|
||||
"ruleName": "MD023",
|
||||
"ruleAlias": "header-start-left",
|
||||
"ruleDescription": "Headers must start at the beginning of the line",
|
||||
"errorDetail": null,
|
||||
"errorContext": " # Heading"
|
||||
},
|
||||
{
|
||||
"lineNumber": 4,
|
||||
"ruleName": "MD024",
|
||||
"ruleAlias": "no-duplicate-header",
|
||||
"ruleDescription": "Multiple headers with the same content",
|
||||
"errorDetail": null,
|
||||
"errorContext": "# Heading"
|
||||
},
|
||||
{
|
||||
"lineNumber": 4,
|
||||
"ruleName": "MD025",
|
||||
"ruleAlias": "single-h1",
|
||||
"ruleDescription": "Multiple top level headers in the same document",
|
||||
"errorDetail": null,
|
||||
"errorContext": "# Heading"
|
||||
},
|
||||
{
|
||||
"lineNumber": 6,
|
||||
"ruleName": "MD026",
|
||||
"ruleAlias": "no-trailing-punctuation",
|
||||
"ruleDescription": "Trailing punctuation in header",
|
||||
"errorDetail": "Punctuation: '.'",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 8,
|
||||
"ruleName": "MD027",
|
||||
"ruleAlias": "no-multiple-space-blockquote",
|
||||
"ruleDescription": "Multiple spaces after blockquote symbol",
|
||||
"errorDetail": null,
|
||||
"errorContext": "> Multiple spaces"
|
||||
},
|
||||
{
|
||||
"lineNumber": 9,
|
||||
"ruleName": "MD028",
|
||||
"ruleAlias": "no-blanks-blockquote",
|
||||
"ruleDescription": "Blank line inside blockquote",
|
||||
"errorDetail": null,
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 13,
|
||||
"ruleName": "MD029",
|
||||
"ruleAlias": "ol-prefix",
|
||||
"ruleDescription": "Ordered list item prefix",
|
||||
"errorDetail": "Expected: 1; Actual: 2",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 13,
|
||||
"ruleName": "MD030",
|
||||
"ruleAlias": "list-marker-space",
|
||||
"ruleDescription": "Spaces after list markers",
|
||||
"errorDetail": "Expected: 1; Actual: 2",
|
||||
"errorContext": null
|
||||
}
|
||||
]
|
||||
22
test/detailed-results-MD031-MD040.md
Normal file
22
test/detailed-results-MD031-MD040.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
```js
|
||||
debugger;
|
||||
```
|
||||
* List
|
||||
|
||||
Inline<hr/>HTML
|
||||
|
||||
Bare http://example.com link
|
||||
|
||||
---
|
||||
***
|
||||
|
||||
*Emphasis*
|
||||
|
||||
Space * inside * emphasis
|
||||
|
||||
Space ` inside ` code span
|
||||
|
||||
Space [ inside ](link) text
|
||||
|
||||
```
|
||||
```
|
||||
82
test/detailed-results-MD031-MD040.results.json
Normal file
82
test/detailed-results-MD031-MD040.results.json
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
[
|
||||
{
|
||||
"lineNumber": 3,
|
||||
"ruleName": "MD031",
|
||||
"ruleAlias": "blanks-around-fences",
|
||||
"ruleDescription": "Fenced code blocks should be surrounded by blank lines",
|
||||
"errorDetail": null,
|
||||
"errorContext": "```"
|
||||
},
|
||||
{
|
||||
"lineNumber": 4,
|
||||
"ruleName": "MD032",
|
||||
"ruleAlias": "blanks-around-lists",
|
||||
"ruleDescription": "Lists should be surrounded by blank lines",
|
||||
"errorDetail": null,
|
||||
"errorContext": "* List"
|
||||
},
|
||||
{
|
||||
"lineNumber": 6,
|
||||
"ruleName": "MD033",
|
||||
"ruleAlias": "no-inline-html",
|
||||
"ruleDescription": "Inline HTML",
|
||||
"errorDetail": "Element: hr",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 8,
|
||||
"ruleName": "MD034",
|
||||
"ruleAlias": "no-bare-urls",
|
||||
"ruleDescription": "Bare URL used",
|
||||
"errorDetail": null,
|
||||
"errorContext": "http://example.com"
|
||||
},
|
||||
{
|
||||
"lineNumber": 11,
|
||||
"ruleName": "MD035",
|
||||
"ruleAlias": "hr-style",
|
||||
"ruleDescription": "Horizontal rule style",
|
||||
"errorDetail": "Expected: ---; Actual: ***",
|
||||
"errorContext": null
|
||||
},
|
||||
{
|
||||
"lineNumber": 13,
|
||||
"ruleName": "MD036",
|
||||
"ruleAlias": "no-emphasis-as-header",
|
||||
"ruleDescription": "Emphasis used instead of a header",
|
||||
"errorDetail": null,
|
||||
"errorContext": "Emphasis"
|
||||
},
|
||||
{
|
||||
"lineNumber": 15,
|
||||
"ruleName": "MD037",
|
||||
"ruleAlias": "no-space-in-emphasis",
|
||||
"ruleDescription": "Spaces inside emphasis markers",
|
||||
"errorDetail": null,
|
||||
"errorContext": "* inside *"
|
||||
},
|
||||
{
|
||||
"lineNumber": 17,
|
||||
"ruleName": "MD038",
|
||||
"ruleAlias": "no-space-in-code",
|
||||
"ruleDescription": "Spaces inside code span elements",
|
||||
"errorDetail": null,
|
||||
"errorContext": "` inside `"
|
||||
},
|
||||
{
|
||||
"lineNumber": 19,
|
||||
"ruleName": "MD039",
|
||||
"ruleAlias": "no-space-in-links",
|
||||
"ruleDescription": "Spaces inside link text",
|
||||
"errorDetail": null,
|
||||
"errorContext": "[ inside ]"
|
||||
},
|
||||
{
|
||||
"lineNumber": 21,
|
||||
"ruleName": "MD040",
|
||||
"ruleAlias": "fenced-code-language",
|
||||
"ruleDescription": "Fenced code blocks should have a language specified",
|
||||
"errorDetail": null,
|
||||
"errorContext": "```"
|
||||
}
|
||||
]
|
||||
9
test/detailed-results-MD041-MD043.json
Normal file
9
test/detailed-results-MD041-MD043.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"default": true,
|
||||
"MD041": true,
|
||||
"MD043": {
|
||||
"headers": [
|
||||
"# Header"
|
||||
]
|
||||
}
|
||||
}
|
||||
3
test/detailed-results-MD041-MD043.md
Normal file
3
test/detailed-results-MD041-MD043.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
Not a header
|
||||
|
||||
An [empty]() link
|
||||
26
test/detailed-results-MD041-MD043.results.json
Normal file
26
test/detailed-results-MD041-MD043.results.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
[
|
||||
{
|
||||
"lineNumber": 1,
|
||||
"ruleName": "MD041",
|
||||
"ruleAlias": "first-line-h1",
|
||||
"ruleDescription": "First line in file should be a top level header",
|
||||
"errorDetail": null,
|
||||
"errorContext": "Not a header"
|
||||
},
|
||||
{
|
||||
"lineNumber": 3,
|
||||
"ruleName": "MD042",
|
||||
"ruleAlias": "no-empty-links",
|
||||
"ruleDescription": "No empty links",
|
||||
"errorDetail": null,
|
||||
"errorContext": "[empty]"
|
||||
},
|
||||
{
|
||||
"lineNumber": 4,
|
||||
"ruleName": "MD043",
|
||||
"ruleAlias": "required-headers",
|
||||
"ruleDescription": "Required header structure",
|
||||
"errorDetail": null,
|
||||
"errorContext": "# Header"
|
||||
}
|
||||
]
|
||||
|
|
@ -15,15 +15,14 @@ var configSchema = require("../schema/markdownlint-config-schema.json");
|
|||
function createTestForFile(file) {
|
||||
return function testForFile(test) {
|
||||
test.expect(1);
|
||||
var detailedResults = /[\/\\]detailed-results-/.test(file);
|
||||
var resultsFile = file.replace(/\.md$/, ".results.json");
|
||||
var configFile = file.replace(/\.md$/, ".json");
|
||||
var actualPromise = Q.nfcall(fs.stat, configFile)
|
||||
.then(
|
||||
function configFileExists() {
|
||||
return Q.nfcall(fs.readFile, configFile, shared.utf8Encoding)
|
||||
.then(
|
||||
function configFileContents(contents) {
|
||||
return JSON.parse(contents);
|
||||
});
|
||||
.then(JSON.parse);
|
||||
},
|
||||
function noConfigFile() {
|
||||
return {};
|
||||
|
|
@ -33,10 +32,14 @@ function createTestForFile(file) {
|
|||
var mergedConfig = shared.assign(shared.clone(defaultConfig), config);
|
||||
return Q.nfcall(markdownlint, {
|
||||
"files": [ file ],
|
||||
"config": mergedConfig
|
||||
"config": mergedConfig,
|
||||
"resultVersion": detailedResults ? 1 : 0
|
||||
});
|
||||
});
|
||||
var expectedPromise = Q.nfcall(fs.readFile, file, shared.utf8Encoding)
|
||||
var expectedPromise = detailedResults ?
|
||||
Q.nfcall(fs.readFile, resultsFile, shared.utf8Encoding)
|
||||
.then(JSON.parse) :
|
||||
Q.nfcall(fs.readFile, file, shared.utf8Encoding)
|
||||
.then(
|
||||
function fileContents(contents) {
|
||||
var lines = contents.split(shared.newLineRe);
|
||||
|
|
@ -1026,10 +1029,11 @@ module.exports.doc = function doc(test) {
|
|||
|
||||
module.exports.validateConfigSchema = function validateConfigSchema(test) {
|
||||
var jsonFileRe = /\.json$/i;
|
||||
var resultsFileRe = /\.results\.json$/i;
|
||||
var testDirectory = __dirname;
|
||||
var testFiles = fs.readdirSync(testDirectory);
|
||||
testFiles.filter(function filterFile(file) {
|
||||
return jsonFileRe.test(file);
|
||||
return jsonFileRe.test(file) && !resultsFileRe.test(file);
|
||||
}).forEach(function forFile(file) {
|
||||
var data = fs.readFileSync(path.join(testDirectory, file));
|
||||
test.ok(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue