marked/test/specs/run-spec.js

53 lines
1.9 KiB
JavaScript
Raw Normal View History

2019-03-09 23:37:33 -06:00
function runSpecs(title, file, options) {
const json = require(file);
2019-04-09 13:19:50 -05:00
let longestName = 0;
let maxSpecs = 0;
2019-03-09 23:37:33 -06:00
const specs = json.reduce((obj, spec) => {
if (!obj[spec.section]) {
2019-04-09 13:19:50 -05:00
longestName = Math.max(spec.section.length, longestName);
obj[spec.section] = {
specs: [],
pass: 0,
total: 0
};
2019-03-09 23:37:33 -06:00
}
2019-04-09 13:19:50 -05:00
obj[spec.section].total++;
maxSpecs = Math.max(obj[spec.section].total, maxSpecs);
if (!spec.shouldFail) {
obj[spec.section].pass++;
}
obj[spec.section].specs.push(spec);
2019-03-09 23:37:33 -06:00
return obj;
}, {});
2019-03-11 11:12:46 -05:00
describe(title, () => {
2019-04-09 13:19:50 -05:00
const maxSpecsLen = ('' + maxSpecs).length;
const spaces = maxSpecsLen * 2 + longestName + 11;
console.log('-'.padEnd(spaces + 4, '-'));
console.log(`| ${title.padStart(Math.ceil((spaces + title.length) / 2)).padEnd(spaces)} |`);
console.log(`| ${' '.padEnd(spaces)} |`);
2019-03-09 23:37:33 -06:00
Object.keys(specs).forEach(section => {
2019-04-09 13:19:50 -05:00
console.log(`| ${section.padEnd(longestName)} ${('' + specs[section].pass).padStart(maxSpecsLen)} of ${('' + specs[section].total).padStart(maxSpecsLen)} ${(100 * specs[section].pass / specs[section].total).toFixed().padStart(4)}% |`);
2019-03-11 11:12:46 -05:00
describe(section, () => {
2019-04-09 13:19:50 -05:00
specs[section].specs.forEach((spec) => {
2019-03-09 23:37:33 -06:00
if (options) {
spec.options = Object.assign({}, options, (spec.options || {}));
}
2019-03-11 11:12:46 -05:00
(spec.only ? fit : it)('should ' + (spec.shouldFail ? 'fail' : 'pass') + ' example ' + spec.example, () => {
2019-03-09 23:37:33 -06:00
if (spec.shouldFail) {
expect(spec).not.toRender(spec.html);
} else {
expect(spec).toRender(spec.html);
}
});
});
});
});
2019-04-09 13:19:50 -05:00
console.log('-'.padEnd(spaces + 4, '-'));
console.log();
2019-03-09 23:37:33 -06:00
});
};
runSpecs('GFM 0.28', './gfm/gfm.0.28.json', {gfm: true});
runSpecs('CommonMark 0.28', './commonmark/commonmark.0.28.json', {headerIds: false});