UNPKG

3.84 kBJavaScriptView Raw
1import path from 'path';
2import BabelCompiler from '../src/index';
3import { default as fs, mock } from 'jest-plugin-fs'
4
5let 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
18jest.mock('fs', ()=>require('jest-plugin-fs/mock'));
19
20describe('basic feature', ()=>{
21
22 beforeEach(() => {
23 fs.root = path.join(__dirname);
24
25 // mkdirp _dirname with _mock.
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 // TODO:
63
64 // test('read babel.config.js from current dir', ()=>{})
65
66 // test('read package.config from current dri', ()=>{})
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