1 | import path from 'path';
|
2 | import BabelCompiler from '../src/index';
|
3 | import { default as fs, mock } from 'jest-plugin-fs'
|
4 |
|
5 | let defaultBabelRc = `{
|
6 | "sourceMap": false,
|
7 | "presets": ["@babel/preset-env"],
|
8 | "plugins": [
|
9 | ["@babel/plugin-transform-runtime", {"corejs": false, "version": "7.1.2"}],
|
10 | ["@babel/plugin-proposal-decorators", {"decoratorsBeforeExport": true}]
|
11 | ],
|
12 | "ignore": [
|
13 | "@babel"
|
14 | ]
|
15 | }
|
16 | `
|
17 |
|
18 | jest.mock('fs', ()=>require('jest-plugin-fs/mock'));
|
19 |
|
20 | describe('basic feature', ()=>{
|
21 |
|
22 | beforeEach(() => {
|
23 | fs.root = path.join(__dirname);
|
24 |
|
25 |
|
26 | fs.mock({
|
27 | './_mock': ''
|
28 | });
|
29 | });
|
30 | afterEach(() => fs.restore());
|
31 |
|
32 |
|
33 | test('default compiler', ()=>{
|
34 | let babel = new BabelCompiler(path.join(__dirname, '../'), null);
|
35 |
|
36 | expect(babel.configs).not.toBeFalsy();
|
37 | expect(babel.configs.ignore).toEqual(['node_modules'])
|
38 | expect(babel.test.toString()).toBe(/\.js$|\.wxs$/.toString());
|
39 |
|
40 | let babel2 = new BabelCompiler(path.join(__dirname, '../'), {ignore: ['@wxa']});
|
41 | let babel3 = new BabelCompiler(path.join(__dirname, '../'), {ignore: '@wxa'});
|
42 | let babel4 = new BabelCompiler(path.join(__dirname, '../'), {ignore: /@wxa/});
|
43 |
|
44 | expect(babel2.configs.ignore).toEqual(['@wxa']);
|
45 | expect(babel3.configs.ignore).toEqual(['@wxa']);
|
46 | expect(babel4.configs.ignore).toEqual([/@wxa/]);
|
47 |
|
48 |
|
49 | });
|
50 |
|
51 | test('read .babelrc from current dir', ()=>{
|
52 | let babelrc = path.join(__dirname, '.babelrc');
|
53 | mock.writeFileSync(babelrc, defaultBabelRc)
|
54 |
|
55 | let babel = new BabelCompiler(path.resolve(__dirname), null);
|
56 |
|
57 | expect(babel.configs.ignore).toEqual(["@babel"])
|
58 |
|
59 | mock.unlinkSync(babelrc);
|
60 | });
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 | test('transform es string', async ()=>{
|
69 | let esString = `let a = 1;`;
|
70 | let exp = 'var a = 1;';
|
71 |
|
72 | let babel = new BabelCompiler(path.join(__dirname, '../'), {
|
73 | presets: [require('@babel/preset-env')]
|
74 | });
|
75 |
|
76 | let {code} = await babel.parse({meta: {source: path.join(__dirname, 'test.js')}, content: esString}, {cache: false});
|
77 |
|
78 | expect(code).toMatch(exp);
|
79 |
|
80 | mock.writeFileSync(path.join(__dirname, 'file.test.js'), esString);
|
81 | let fileRet = await babel.parse({meta: {source: path.join(__dirname, 'file.test.js')}}, {cache: false});
|
82 |
|
83 | expect(fileRet.code).toMatch(exp);
|
84 | })
|
85 |
|
86 | test('return origin code', async ()=>{
|
87 | let esString = `let a = 1;`;
|
88 | let babel = new BabelCompiler(path.join(__dirname, '../'), JSON.parse(defaultBabelRc))
|
89 |
|
90 | let mdl = {meta: {source: path.join(__dirname, '@babel', 'test.js')}, content: esString};
|
91 |
|
92 | let ret = await babel.parse(mdl, {cache: false});
|
93 |
|
94 | expect(ret.code).toBe(esString);
|
95 |
|
96 | let emptyCodeRet = await babel.parse((mdl.content='', mdl), {cache: false});
|
97 |
|
98 | expect(emptyCodeRet.code).toBe('');
|
99 | })
|
100 |
|
101 | test('parse error', async ()=>{
|
102 | let esString = `let a = `;
|
103 | let babel = new BabelCompiler(path.join(__dirname, '../'), {
|
104 | presets: [require('@babel/preset-env')]
|
105 | })
|
106 |
|
107 | let mdl = {meta: {source: path.join(__dirname, 'test.js')}, content: esString};
|
108 |
|
109 | expect(babel.parse(mdl, {cache: false})).rejects.toThrowError();
|
110 |
|
111 | expect(babel.parse((mdl.meta.source=void(0), mdl), {cache: false})).rejects.toThrowError();
|
112 |
|
113 | })
|
114 |
|
115 | test('throw error while ignore not string or array', ()=>{
|
116 | expect(()=>{
|
117 | new BabelCompiler(__dirname, {
|
118 | ignore: {}
|
119 | })
|
120 | }).toThrowError();
|
121 | })
|
122 | }) |
\ | No newline at end of file |