panto-transformer-browserify
Version:
Browserify transformer for panto
129 lines (124 loc) • 4.47 kB
JavaScript
/**
* Copyright (C) 2016 pantojs.xyz
* test.js
*
* changelog
* 2016-06-24[17:01:26]:revised
* 2016-08-17[23:30:46]:test case for useless module(s)
* 2016-09-07[23:24:29]:support alias option
*
* @author yanni4night@gmail.com
* @version 0.1.6
* @since 0.1.0
*/
'use strict';
const assert = require('assert');
const panto = require('panto');
const BrowserifyTransformer = require('../src/');
panto.loadTransformer('read', require('panto-transformer-read'));
panto.loadTransformer('write', require('panto-transformer-write'));
panto.loadTransformer('browserify', BrowserifyTransformer);
describe('panto-transformer-browserify', () => {
describe('#transformAll', function () {
this.timeout(5e3);
it('should error when dynamic', done => {
const files = [{
filename: 'main.js',
content: 'var foo = require(6 + "foo.js");foo();'
}];
new BrowserifyTransformer({
filename: 'bundle.js',
entry: 'main.js',
isStrict: true
}).transformAll(files).catch(e => {
done();
});
});
it('should error when not found', done => {
const files = [{
filename: 'main.js',
content: 'var foo = require("foo.js");foo();'
}];
new BrowserifyTransformer({
filename: 'bundle.js',
entry: 'main.js',
isStrict: true,
isSilent: false
}).transformAll(files).catch(e => {
done();
});
});
it('should polyfill', done => {
panto.clear();
panto.setOptions({
cwd: __dirname + '/../',
src: 'polyfill',
output: 'dist'
});
panto.$('polyfill.js').tag('polyfill.js').read().browserify({
entry: 'polyfill.js',
bundle: 'polyfill.js',
buffer: true,
process: {
env: {
NODE_ENV: 'production'
}
}
}).write();
panto.$('test-polyfill.js').tag('test-polyfill.js').read().browserify({
entry: 'test-polyfill.js',
bundle: 'test-polyfill.js'
}).write();
panto.build().then(() => done()).catch(e => console.error(e));
});
it('should remove useless modules', done => {
const files = [{
filename: 'main.js',
content: 'require("bar.js");module.exports = 80;'
}, {
filename: 'bar.js',
content: 'module.exports = 93;'
}, {
filename: 'foo.js',
content: 'module.exports = 67;'
}];
new BrowserifyTransformer({
filename: 'bundle.js',
entry: 'main.js',
isStrict: true,
isSilent: false
}).transformAll(files).then(files => {
const file = files[0];
assert.ok(/80/.test(file.content), 'has main.js');
assert.ok(/93/.test(file.content), 'has bar.js');
assert.ok(!/67/.test(file.content), 'has no foo.js');
}).then(() => done()).catch(e => console.error(e));
});
it('should support alias', done => {
const files = [{
filename: 'main.js',
content: 'require("bar.js");module.exports = 80;'
}, {
filename: 'bar.js',
content: 'module.exports = 93;'
}, {
filename: 'foo.js',
content: 'module.exports = 67;'
}];
new BrowserifyTransformer({
filename: 'bundle.js',
entry: 'main.js',
aliases: {
"bar.js": "foo.js"
},
isStrict: true,
isSilent: false
}).transformAll(files).then(files => {
const file = files[0];
assert.ok(/80/.test(file.content), 'has main.js');
assert.ok(!/93/.test(file.content), 'has no bar.js');
assert.ok(/67/.test(file.content), 'has foo.js');
}).then(() => done()).catch(e => console.error(e));
});
});
});