1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
/* eslint-disable global-require, import/no-dynamic-require, no-console */
const { existsSync, readdirSync, readFileSync } = require('fs');
const acorn = require('acorn');
const test = require('tape');
const { commonjs } = require('./helpers/util');
process.chdir(__dirname);
const transformContext = {
parse: (input, options) =>
acorn.parse(input, {
ecmaVersion: 9,
sourceType: 'module',
...options
})
};
readdirSync('./fixtures/form').forEach((dir) => {
let config;
try {
config = require(`./fixtures/form/${dir}/_config.js`);
} catch (err) {
config = {};
}
const inputEntries = [];
if (typeof config.multi === 'object') {
for (const [key, entry] of Object.entries(config.multi)) {
inputEntries.push([key, `fixtures/form/${dir}/${entry}`]);
}
} else {
inputEntries.push(['output', `fixtures/form/${dir}/input.js`]);
}
(config.solo ? test.only : test)(dir, async (t) => {
for (const [outputName, id] of inputEntries) {
const { transform } = commonjs(config.options);
transformContext.getModuleInfo = (moduleId) => {
return {
isEntry: config.entry && moduleId === id,
importers:
config.importers && config.importers[outputName]
? config.importers[outputName].map((x) => `fixtures/form/${dir}/${x}`)
: []
};
};
transformContext.error = (base, props) => {
let error = base;
if (!(base instanceof Error)) error = Object.assign(new Error(base.message), base);
if (props) Object.assign(error, props);
throw error;
};
const input = readFileSync(id, 'utf-8');
let outputFile = `fixtures/form/${dir}/${outputName}`;
if (existsSync(`${outputFile}.${process.platform}.js`)) {
outputFile += `.${process.platform}.js`;
} else {
outputFile += '.js';
}
const expected = readFileSync(outputFile, 'utf-8').trim();
const transformed = transform.call(transformContext, input, id);
const actual = (transformed ? transformed.code : input).trim().replace(/\0/g, '_');
t.is(actual, expected);
}
t.end();
});
});
|