You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
5.9 KiB
JavaScript
196 lines
5.9 KiB
JavaScript
7 years ago
|
var test = require('tape');
|
||
|
var pack = require('../');
|
||
|
var path = require('path');
|
||
|
|
||
|
function decode(base64) {
|
||
|
return new Buffer(base64, 'base64').toString();
|
||
|
}
|
||
|
|
||
|
function unmountPrelude(sources) {
|
||
|
return sources.map(function (x) {
|
||
|
var basename = path.basename(x);
|
||
|
return basename === '_prelude.js' ? basename : x;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function grabSourceMap(lastLine) {
|
||
|
var base64 = lastLine.split(',').pop();
|
||
|
var sm = JSON.parse(decode(base64));
|
||
|
sm.sources = unmountPrelude(sm.sources);
|
||
|
return sm;
|
||
|
}
|
||
|
|
||
|
function grabLastLine(src) {
|
||
|
return src.split('\n').pop();
|
||
|
}
|
||
|
|
||
|
test('pack one file with source file field and one without', function (t) {
|
||
|
t.plan(7);
|
||
|
|
||
|
var p = pack();
|
||
|
var src = '';
|
||
|
p.on('data', function (buf) { src += buf });
|
||
|
p.on('end', function () {
|
||
|
var r = Function(['T'], 'return ' + src)(t);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
|
||
|
var lastLine = grabLastLine(src);
|
||
|
var sm = grabSourceMap(lastLine);
|
||
|
|
||
|
t.ok(/^\/\/# sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');
|
||
|
t.deepEqual(sm.sources, [ '_prelude.js', 'foo.js' ], 'includes mappings for sourceFile and prelude only');
|
||
|
t.equal(sm.mappings, 'AAAA;;;ACAA;AACA;AACA;AACA', 'adds offset mapping for each line' );
|
||
|
});
|
||
|
|
||
|
p.end(JSON.stringify([
|
||
|
{
|
||
|
id: 'abc',
|
||
|
source: 'T.equal(require("./xyz")(3), 333)',
|
||
|
entry: true,
|
||
|
deps: { './xyz': 'xyz' }
|
||
|
},
|
||
|
{
|
||
|
id: 'xyz',
|
||
|
source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',
|
||
|
sourceFile: 'foo.js'
|
||
|
}
|
||
|
]));
|
||
|
});
|
||
|
|
||
|
test('pack two files with source file field', function (t) {
|
||
|
t.plan(7);
|
||
|
|
||
|
var p = pack();
|
||
|
var src = '';
|
||
|
p.on('data', function (buf) { src += buf });
|
||
|
p.on('end', function () {
|
||
|
var r = Function(['T'], 'return ' + src)(t);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
|
||
|
var lastLine = grabLastLine(src);
|
||
|
var sm = grabSourceMap(lastLine);
|
||
|
|
||
|
t.ok(/^\/\/# sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');
|
||
|
t.deepEqual(sm.sources, [ '_prelude.js', 'wunder/bar.js', 'foo.js' ], 'includes mappings for both files and prelude');
|
||
|
t.equal(sm.mappings, 'AAAA;ACAA;;ACAA;AACA;AACA;AACA', 'adds offset mapping for each line' );
|
||
|
});
|
||
|
|
||
|
p.end(JSON.stringify([
|
||
|
{
|
||
|
id: 'abc',
|
||
|
source: 'T.equal(require("./xyz")(3), 333)',
|
||
|
entry: true,
|
||
|
deps: { './xyz': 'xyz' },
|
||
|
sourceFile: 'wunder/bar.js'
|
||
|
},
|
||
|
{
|
||
|
id: 'xyz',
|
||
|
source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',
|
||
|
sourceFile: 'foo.js'
|
||
|
}
|
||
|
]));
|
||
|
});
|
||
|
|
||
|
test('pack two files without source file field', function (t) {
|
||
|
t.plan(5);
|
||
|
|
||
|
var p = pack();
|
||
|
var src = '';
|
||
|
p.on('data', function (buf) { src += buf });
|
||
|
p.on('end', function () {
|
||
|
var r = Function(['T'], 'return ' + src)(t);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
|
||
|
var lastLine = grabLastLine(src);
|
||
|
t.notOk(/^\/\/# sourceMappingURL/.test(lastLine), 'contains no source mapping url');
|
||
|
});
|
||
|
|
||
|
p.end(JSON.stringify([
|
||
|
{
|
||
|
id: 'abc',
|
||
|
source: 'T.equal(require("./xyz")(3), 333)',
|
||
|
entry: true,
|
||
|
deps: { './xyz': 'xyz' }
|
||
|
},
|
||
|
{
|
||
|
id: 'xyz',
|
||
|
source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}'
|
||
|
}
|
||
|
]));
|
||
|
});
|
||
|
|
||
|
test('pack two files with source file field, one with nomap flag', function (t) {
|
||
|
t.plan(7);
|
||
|
|
||
|
var p = pack();
|
||
|
var src = '';
|
||
|
p.on('data', function (buf) { src += buf });
|
||
|
p.on('end', function () {
|
||
|
var r = Function(['T'], 'return ' + src)(t);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
|
||
|
var lastLine = grabLastLine(src);
|
||
|
var sm = grabSourceMap(lastLine);
|
||
|
|
||
|
t.ok(/^\/\/# sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');
|
||
|
t.deepEqual(sm.sources, [ '_prelude.js', 'wunder/bar.js' ], 'includes mappings for only the file without the "nomap" flag and prelude');
|
||
|
t.equal(sm.mappings, 'AAAA;ACAA', 'adds offset mapping for each line of mapped file' );
|
||
|
t.end()
|
||
|
});
|
||
|
|
||
|
p.end(JSON.stringify([
|
||
|
{
|
||
|
id: 'abc',
|
||
|
source: 'T.equal(require("./xyz")(3), 333)',
|
||
|
entry: true,
|
||
|
deps: { './xyz': 'xyz' },
|
||
|
sourceFile: 'wunder/bar.js'
|
||
|
},
|
||
|
{
|
||
|
id: 'xyz',
|
||
|
source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',
|
||
|
sourceFile: 'foo.js',
|
||
|
nomap: true
|
||
|
}
|
||
|
]));
|
||
|
});
|
||
|
|
||
|
test('custom sourceMapPrefix for //@', function (t) {
|
||
|
t.plan(7);
|
||
|
|
||
|
var p = pack({ sourceMapPrefix: '//@' });
|
||
|
var src = '';
|
||
|
p.on('data', function (buf) { src += buf });
|
||
|
p.on('end', function () {
|
||
|
var r = Function(['T'], 'return ' + src)(t);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
t.equal(r('xyz')(5), 555);
|
||
|
|
||
|
var lastLine = grabLastLine(src);
|
||
|
var sm = grabSourceMap(lastLine);
|
||
|
|
||
|
t.ok(/^\/\/@ sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');
|
||
|
t.deepEqual(sm.sources, [ '_prelude.js', 'foo.js' ], 'includes mappings for sourceFile and prelude only');
|
||
|
t.equal(sm.mappings, 'AAAA;;;ACAA;AACA;AACA;AACA', 'adds offset mapping for each line' );
|
||
|
});
|
||
|
|
||
|
p.end(JSON.stringify([
|
||
|
{
|
||
|
id: 'abc',
|
||
|
source: 'T.equal(require("./xyz")(3), 333)',
|
||
|
entry: true,
|
||
|
deps: { './xyz': 'xyz' }
|
||
|
},
|
||
|
{
|
||
|
id: 'xyz',
|
||
|
source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',
|
||
|
sourceFile: 'foo.js'
|
||
|
}
|
||
|
]));
|
||
|
});
|
||
|
|