nodebook
Version:
Node.js — Apprendre par l'exemple • Devenez autonome avec JavaScript, l'écosystème npm, le développement frontend, les applications web et en ligne de commande.
58 lines (44 loc) • 1.37 kB
JavaScript
;
const test = require('blue-tape');
const {extname} = require('path');
const spawn = require('tape-spawn');
const glob = require('glob');
const {platform} = process;
const EXTRAS = require('./examples-config.js');
const examples = glob.sync('*/examples/**/*.{mjs,js}');
const serverSide = (file) => /chapter-09/.test(file) === false;
const DEFAULT_CONFIG = {
exitCode: 0,
timeout: 5000,
};
examples.filter(serverSide).forEach(FILE => {
test(FILE, {timeout: 1000}, t => {
const {[FILE]:config=DEFAULT_CONFIG} = EXTRAS;
let nodeArgs = '';
if (config.skip) {
t.skip();
return t.end();
}
// enable ECMAScript Module experimental support
if (extname(FILE) === '.mjs') {
nodeArgs += '--experimental-modules'
}
const p = spawn(t, `node ${nodeArgs} ${FILE}`);
p.exitCode(config.exitCode, `exit code = ${config.exitCode}`);
if (config.timeout) {
t.timeoutAfter(config.timeout * 2)
p.timeout(config.timeout);
}
if (config.stdin) {
p.stdin.end(config.stdin);
}
if (config.stdout) {
// runs win32 specific tests or default platforms
p.stdout.match(config[`${platform}stdout`] || config.stdout);
}
config.stderr
? p.stderr.match(new RegExp(config.stderr))
: p.stderr.match(/^$/, 'stderrr is empty');
return p.end();
});
});