UNPKG

1.64 kBJavaScriptView Raw
1#! /usr/bin/env node
2'use strict';
3
4const {version} = require('../package');
5const doctest = require('..');
6const program = require('commander');
7const path = require('path');
8const glob = require('glob');
9const fs = require('fs');
10
11const DEFAULT_GLOB = '**/*.+(md|markdown)';
12const DEFAULT_IGNORE = [
13 '**/node_modules/**',
14 '**/bower_components/**'
15];
16
17// Config
18const config = {
19 require: {},
20 globals: {},
21 ignore: []
22};
23
24// Setup commander
25program
26 .name('markdown-doctest')
27 .description('Test all the code in your markdown docs!')
28 .version(version, '-v, --version', 'output the current version')
29 .helpOption('-h, --help', 'output usage informations')
30 .option('-c, --config <path>', 'custom config location', path.join(process.cwd(), '/.markdown-doctest-setup.js'))
31 .parse(process.argv);
32
33// Parse config file
34if (program.config) {
35 const configPath = path.resolve(program.config);
36
37 if (fs.existsSync(configPath)) {
38 try {
39
40 // Apply custom settings
41 Object.assign(config, require(configPath));
42 } catch (e) {
43 console.error(`Cannot resolve "${configPath}"`);
44 process.exit(1);
45 }
46 }
47}
48
49// Resolve files
50glob(
51 program.args[0] || DEFAULT_GLOB,
52 {
53 ignore: [...config.ignore, ...DEFAULT_IGNORE]
54 },
55 (err, files) => {
56
57 if (err) {
58 console.trace(err);
59 }
60
61 // Run tests
62 const results = doctest.runTests(files, config);
63
64 console.log('\n');
65 doctest.printResults(results);
66
67 // Exit with error-code if any test failed
68 const failures = results.filter(result => result.status === 'fail');
69 if (failures.length > 0) {
70 process.exit(1);
71 }
72 }
73);