2015-02-23 23:39:20 -08:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var fs = require("fs");
|
|
|
|
var path = require("path");
|
|
|
|
var markdownlint = require("../lib/markdownlint");
|
2015-03-08 23:08:43 -07:00
|
|
|
var shared = require("../lib/shared");
|
2015-03-01 22:15:02 -08:00
|
|
|
var Q = require("q");
|
2015-02-27 22:06:54 -08:00
|
|
|
|
2015-02-23 23:39:20 -08:00
|
|
|
function createTestForFile(file) {
|
2015-02-24 18:40:37 -08:00
|
|
|
return function testForFile(test) {
|
2015-03-01 22:15:02 -08:00
|
|
|
test.expect(1);
|
|
|
|
var configFile = file.replace(/\.md$/, ".json");
|
|
|
|
var actualPromise = Q.nfcall(fs.stat, configFile)
|
|
|
|
.then(
|
|
|
|
function configFileExists() {
|
|
|
|
return Q.nfcall(fs.readFile, configFile, { "encoding": "utf8" })
|
|
|
|
.then(
|
|
|
|
function configFileContents(contents) {
|
|
|
|
return JSON.parse(contents);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
function noConfigFile() {
|
|
|
|
return null;
|
|
|
|
})
|
|
|
|
.then(
|
|
|
|
function lintWithConfig(config) {
|
|
|
|
return Q.nfcall(markdownlint, {
|
|
|
|
"files": [ file ],
|
|
|
|
"config": config
|
|
|
|
});
|
|
|
|
});
|
|
|
|
var expectedPromise = Q.nfcall(fs.readFile, file, { "encoding": "utf8" })
|
|
|
|
.then(
|
|
|
|
function fileContents(contents) {
|
2015-03-08 23:08:43 -07:00
|
|
|
var lines = contents.split(shared.newLineRe);
|
2015-02-27 22:06:54 -08:00
|
|
|
var results = {};
|
|
|
|
lines.forEach(function forLine(line, lineNum) {
|
2015-03-04 18:09:46 -08:00
|
|
|
var regex = /\{(MD\d+)(?::(\d+))?\}/g;
|
|
|
|
var match;
|
|
|
|
while ((match = regex.exec(line))) {
|
2015-02-27 22:06:54 -08:00
|
|
|
var rule = match[1];
|
|
|
|
var errors = results[rule] || [];
|
2015-03-04 18:09:46 -08:00
|
|
|
errors.push(match[2] ? parseInt(match[2], 10) : lineNum + 1);
|
2015-02-27 22:06:54 -08:00
|
|
|
results[rule] = errors;
|
|
|
|
}
|
|
|
|
});
|
2015-03-01 22:15:02 -08:00
|
|
|
return results;
|
2015-02-24 18:40:37 -08:00
|
|
|
});
|
2015-03-01 22:15:02 -08:00
|
|
|
Q.all([ actualPromise, expectedPromise ])
|
|
|
|
.then(
|
|
|
|
function compareResults(fulfillments) {
|
|
|
|
var actual = fulfillments[0];
|
|
|
|
var results = fulfillments[1];
|
|
|
|
var expected = {};
|
|
|
|
expected[file] = results;
|
|
|
|
test.deepEqual(actual, expected, "Line numbers are not correct.");
|
|
|
|
})
|
|
|
|
.done(test.done, test.done);
|
2015-02-23 23:39:20 -08:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2015-02-24 18:40:37 -08:00
|
|
|
/* eslint-disable no-sync, for synchronous test method creation */
|
|
|
|
fs.readdirSync(__dirname).forEach(function forFile(file) {
|
|
|
|
/* eslint-enable no-sync */
|
2015-02-23 23:39:20 -08:00
|
|
|
if (file.match(/\.md$/)) {
|
|
|
|
module.exports[file] = createTestForFile(path.join(__dirname, file));
|
|
|
|
}
|
|
|
|
});
|