UNPKG

nodebook

Version:

Node.js • Apprendre par la pratique. Familiarisez-vous avec JavaScript, Node.js et l'écosystème de modules npm. Apprenez à concevoir et à déployer des *applications web* et des *outils en ligne de commande*.

68 lines (53 loc) 1.86 kB
'use strict'; const test = require('blue-tape'); const tapSpec = require('tap-spec'); const {extname, posix, relative, join} = require('path'); const spawn = require('tape-spawn'); const glob = require('glob'); const {platform} = process; test.createStream().pipe(tapSpec()).pipe(process.stdout); const EXTRAS = require('./examples-config.js'); const examples = glob.sync(process.argv[3] || '*/examples/**/*.{mjs,js}'); const serverSide = (file) => /chapter-09/.test(file) === false; const nodeModules = (file) => /node_modules/.test(file) === false; const DEFAULT_CONFIG = { exitCode: 0, timeout: 5000, }; examples .filter(serverSide) .filter(nodeModules) .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 {command='node', args:cmdArgs=''} = config; const cwd = join(__dirname, '..', FILE.split(posix.sep)[0]); const test_file = relative(cwd, FILE); const p = spawn(t, `${command} ${nodeArgs} ${test_file} ${cmdArgs}`, {cwd}); 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(/^$/, 'stderr is empty'); return p.end(); }); });