microbundle/test/index.test.js
2018-02-25 00:45:01 +01:00

80 lines
2.2 KiB
JavaScript

import { resolve } from 'path';
import fs from 'fs-extra';
import { promisify } from 'es6-promisify';
import dirTree from 'directory-tree';
import shellQuote from 'shell-quote';
import _rimraf from 'rimraf';
import { strip } from './lib/util';
import { readFile } from '../src/utils';
import createProg from '../src/prog';
import microbundle from '../src/index';
const rimraf = promisify(_rimraf);
const FIXTURES_DIR = `${__dirname}/fixtures`;
const DEFAULT_SCRIPT = 'microbundle';
const times = (n, fn) => Array.from({ length: n }).map(i => fn(i));
const join = (arr, delimiter = '') => arr.join(delimiter);
const constant = konst => () => konst;
const printTree = (nodes, indentLevel = 0) => {
const indent = join(times(indentLevel, constant(' ')));
return join(nodes.filter(node => node.name[0] !== '.').map(node =>
`${indent}${node.name}\n${node.type === 'directory' ? printTree(node.children, indentLevel + 1) : ''}`
));
};
const parseScript = (() => {
let parsed;
const prog = createProg(_parsed => parsed = _parsed);
return script => {
const argv = shellQuote.parse(`node ${script}`);
// assuming {op: 'glob', pattern} for non-string args
prog(argv.map(arg => typeof arg === 'string' ? arg : arg.pattern));
return parsed;
};
})();
describe('fixtures', () => {
fs.readdirSync(FIXTURES_DIR).forEach(fixtureDir => {
const fixturePath = resolve(FIXTURES_DIR, fixtureDir);
if (!fs.statSync(fixturePath).isDirectory()) {
return;
}
it(fixtureDir, async () => {
await rimraf(resolve(`${fixturePath}/dist`));
let script;
try {
({ scripts: { build: script } = {} } = JSON.parse(await readFile(resolve(fixturePath, 'package.json'), 'utf8')));
}
catch (err) {}
script = script || DEFAULT_SCRIPT;
const prevDir = process.cwd();
process.chdir(resolve(fixturePath));
const parsedOpts = parseScript(script);
const output = await microbundle({
...parsedOpts,
cwd: parsedOpts.cwd !== '.' ? parsedOpts.cwd : resolve(fixturePath)
});
process.chdir(prevDir);
const printedDir = printTree([dirTree(fixturePath)]);
expect([
`Used script: ${script}`,
'Directory tree:',
printedDir,
strip(output)
].join('\n\n')).toMatchSnapshot();
});
});
});