test-transform.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const path = require('path');
  2. const babel = require('@babel/core');
  3. const fs = require('fs');
  4. // See require('@babel/plugin-transform-modules-commonjs')
  5. const esm2cjsPlugin = path.resolve(__dirname, '../../build/babel-plugin-transform-modules-commonjs-ec');
  6. const removeDEVPlugin = path.resolve(__dirname, '../../build/babel-plugin-transform-remove-dev');
  7. function run() {
  8. removeDEV();
  9. esm2cjs();
  10. }
  11. function removeDEV() {
  12. const suite = makeSuite('removeDEV');
  13. suite.eachSrcFile(({fileName, filePath}) => {
  14. let result = babel.transformFileSync(filePath, {
  15. plugins: [removeDEVPlugin]
  16. });
  17. suite.writeToExpectFile(fileName, result.code);
  18. console.log(`removing dev ${fileName} ...`);
  19. });
  20. console.log('All done.');
  21. }
  22. function esm2cjs() {
  23. const suite = makeSuite('esm2cjs');
  24. suite.eachSrcFile(({fileName, filePath}) => {
  25. console.log(`transforming to cjs ${fileName} ...`);
  26. if (/^forbiden/.test(fileName)) {
  27. try {
  28. transformSingle();
  29. throw new Error('Should fail.');
  30. }
  31. catch (e) {
  32. console.log(`${fileName} failed as expected.`);
  33. }
  34. }
  35. else {
  36. transformSingle();
  37. }
  38. function transformSingle() {
  39. let result = babel.transformFileSync(filePath, {
  40. plugins: [removeDEVPlugin, esm2cjsPlugin]
  41. });
  42. suite.writeToExpectFile(fileName, result.code);
  43. }
  44. });
  45. console.log('All done.');
  46. }
  47. const makeSuite = suiteName => {
  48. const srcDir = path.resolve(__dirname, `./${suiteName}/src`);
  49. const expectDir = path.resolve(__dirname, `./${suiteName}/expect`);
  50. return {
  51. srcDir,
  52. expectDir,
  53. eachSrcFile(cb) {
  54. fs.readdirSync(srcDir).forEach(fileName => {
  55. if (!/^[^.].*[.]src[.]js$/.test(fileName)) {
  56. return;
  57. }
  58. const filePath = path.resolve(srcDir, fileName);
  59. cb({fileName, filePath, suiteName, srcDir, expectDir});
  60. });
  61. },
  62. writeToExpectFile(srcFileName, content) {
  63. let outputPath = path.resolve(expectDir, srcFileName.replace('.src.', '.expect.'));
  64. fs.writeFileSync(outputPath, content, {encoding:'utf-8'});
  65. }
  66. };
  67. };
  68. run();