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.
315 lines
9.9 KiB
JavaScript
315 lines
9.9 KiB
JavaScript
7 years ago
|
'use strict';
|
||
|
/*jshint asi: true*/
|
||
|
|
||
|
var test = require('tap').test
|
||
|
var generator = require('..');
|
||
|
|
||
|
var foo = '' + function foo () {
|
||
|
var hello = 'hello';
|
||
|
var world = 'world';
|
||
|
console.log('%s %s', hello, world);
|
||
|
}
|
||
|
|
||
|
var bar = '' + function bar () {
|
||
|
console.log('yes?');
|
||
|
}
|
||
|
|
||
|
function decode(base64) {
|
||
|
return new Buffer(base64, 'base64').toString();
|
||
|
}
|
||
|
|
||
|
function inspect(obj, depth) {
|
||
|
console.error(require('util').inspect(obj, false, depth || 5, true));
|
||
|
}
|
||
|
|
||
|
test('generated mappings', function (t) {
|
||
|
|
||
|
t.test('one file no offset', function (t) {
|
||
|
var gen = generator()
|
||
|
.addGeneratedMappings('foo.js', foo)
|
||
|
|
||
|
t.deepEqual(
|
||
|
gen._mappings()
|
||
|
, [ { generatedLine: 1,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 1,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 2,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 2,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 3,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 3,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 4,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 4,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 5,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 5,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null } ]
|
||
|
, 'generates correct mappings'
|
||
|
)
|
||
|
|
||
|
t.deepEqual(
|
||
|
decode(gen.base64Encode())
|
||
|
, '{"version":3,"sources":["foo.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA","file":"","sourceRoot":""}'
|
||
|
, 'encodes generated mappings'
|
||
|
)
|
||
|
t.equal(
|
||
|
gen.inlineMappingUrl()
|
||
|
, '//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='
|
||
|
, 'returns correct inline mapping url'
|
||
|
)
|
||
|
t.end()
|
||
|
})
|
||
|
|
||
|
t.test('two files no offset', function (t) {
|
||
|
var gen = generator()
|
||
|
.addGeneratedMappings('foo.js', foo)
|
||
|
.addGeneratedMappings('bar.js', bar)
|
||
|
|
||
|
t.deepEqual(
|
||
|
gen._mappings()
|
||
|
, [ { generatedLine: 1,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 1,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 2,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 2,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 3,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 3,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 4,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 4,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 5,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 5,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 1,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 1,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 2,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 2,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 3,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 3,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null } ]
|
||
|
, 'generates correct mappings'
|
||
|
)
|
||
|
t.deepEqual(
|
||
|
decode(gen.base64Encode())
|
||
|
, '{"version":3,"sources":["foo.js","bar.js"],"names":[],"mappings":"ACAA,ADAA;ACCA,ADAA;ACCA,ADAA;AACA;AACA","file":"","sourceRoot":""}'
|
||
|
, 'encodes generated mappings'
|
||
|
)
|
||
|
t.equal(
|
||
|
gen.inlineMappingUrl()
|
||
|
, '//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyIsImJhci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUNBQSxBREFBO0FDQ0EsQURBQTtBQ0NBLEFEQUE7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='
|
||
|
, 'returns correct inline mapping url'
|
||
|
)
|
||
|
t.end()
|
||
|
})
|
||
|
|
||
|
t.test('one line source', function (t) {
|
||
|
var gen = generator().addGeneratedMappings('one-liner.js', 'console.log("line one");')
|
||
|
t.deepEqual(
|
||
|
gen._mappings()
|
||
|
, [ { generatedLine: 1,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 1,
|
||
|
originalColumn: 0,
|
||
|
source: 'one-liner.js',
|
||
|
name: null } ]
|
||
|
, 'generates correct mappings'
|
||
|
)
|
||
|
t.end()
|
||
|
})
|
||
|
|
||
|
t.test('with offset', function (t) {
|
||
|
var gen = generator()
|
||
|
.addGeneratedMappings('foo.js', foo, { line: 20 })
|
||
|
.addGeneratedMappings('bar.js', bar, { line: 23, column: 22 })
|
||
|
|
||
|
t.deepEqual(
|
||
|
gen._mappings()
|
||
|
, [ { generatedLine: 21,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 1,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 22,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 2,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 23,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 3,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 24,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 4,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 25,
|
||
|
generatedColumn: 0,
|
||
|
originalLine: 5,
|
||
|
originalColumn: 0,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 24,
|
||
|
generatedColumn: 22,
|
||
|
originalLine: 1,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 25,
|
||
|
generatedColumn: 22,
|
||
|
originalLine: 2,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 26,
|
||
|
generatedColumn: 22,
|
||
|
originalLine: 3,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null } ]
|
||
|
, 'generates correct mappings'
|
||
|
)
|
||
|
t.equal(
|
||
|
decode(gen.base64Encode())
|
||
|
, '{"version":3,"sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA,sBCHA;ADIA,sBCHA;sBACA","file":"","sourceRoot":""}'
|
||
|
, 'encodes generated mappings with offset'
|
||
|
)
|
||
|
t.end()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('given mappings, with one having no original', function (t) {
|
||
|
t.test('no offset', function (t) {
|
||
|
var gen = generator()
|
||
|
.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }])
|
||
|
|
||
|
// This addresses an edgecase in which a transpiler generates mappings but doesn't include the original position.
|
||
|
// If we set source to sourceFile (as usual) in that case, the mappings are considered invalid by the source-map module's
|
||
|
// SourceMapGenerator. Keeping source undefined fixes this problem.
|
||
|
// Raised issue: https://github.com/thlorenz/inline-source-map/issues/2
|
||
|
// Validate function: https://github.com/mozilla/source-map/blob/a3372ea78e662582087dd25ebda999c06424e047/lib/source-map/source-map-generator.js#L232
|
||
|
.addMappings('bar.js', [
|
||
|
{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }
|
||
|
, { generated: { line: 8, column: 30 } }
|
||
|
])
|
||
|
|
||
|
t.deepEqual(
|
||
|
gen._mappings()
|
||
|
, [ { generatedLine: 5,
|
||
|
generatedColumn: 10,
|
||
|
originalLine: 2,
|
||
|
originalColumn: 3,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 7,
|
||
|
generatedColumn: 20,
|
||
|
originalLine: 6,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 8,
|
||
|
generatedColumn: 30,
|
||
|
originalLine: false,
|
||
|
originalColumn: false,
|
||
|
source: undefined,
|
||
|
name: null } ]
|
||
|
, 'adds correct mappings'
|
||
|
)
|
||
|
t.deepEqual(
|
||
|
decode(gen.base64Encode())
|
||
|
, '{"version":3,"sources":["foo.js","bar.js"],"names":[],"mappings":";;;;UACG;;oBCIH;8B","file":"","sourceRoot":""}'
|
||
|
, 'encodes generated mappings'
|
||
|
)
|
||
|
t.equal(
|
||
|
gen.inlineMappingUrl()
|
||
|
, '//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyIsImJhci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O1VBQ0c7O29CQ0lIOzhCIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='
|
||
|
, 'returns correct inline mapping url'
|
||
|
)
|
||
|
t.end()
|
||
|
})
|
||
|
|
||
|
t.test('with offset', function (t) {
|
||
|
var gen = generator()
|
||
|
.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }], { line: 5 })
|
||
|
.addMappings('bar.js', [{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }, { generated: { line: 8, column: 30 } }], { line: 9, column: 3 })
|
||
|
|
||
|
t.deepEqual(
|
||
|
gen._mappings()
|
||
|
, [ { generatedLine: 10,
|
||
|
generatedColumn: 10,
|
||
|
originalLine: 2,
|
||
|
originalColumn: 3,
|
||
|
source: 'foo.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 16,
|
||
|
generatedColumn: 23,
|
||
|
originalLine: 6,
|
||
|
originalColumn: 0,
|
||
|
source: 'bar.js',
|
||
|
name: null },
|
||
|
{ generatedLine: 17,
|
||
|
generatedColumn: 33,
|
||
|
originalLine: false,
|
||
|
originalColumn: false,
|
||
|
source: undefined,
|
||
|
name: null } ]
|
||
|
, 'adds correct mappings'
|
||
|
)
|
||
|
t.equal(
|
||
|
decode(gen.base64Encode())
|
||
|
, '{\"version\":3,\"sources\":[\"foo.js\",\"bar.js\"],\"names\":[],\"mappings\":\";;;;;;;;;UACG;;;;;;uBCIH;iC\",\"file\":\"\",\"sourceRoot\":\"\"}'
|
||
|
, 'encodes mappings with offset'
|
||
|
)
|
||
|
t.end()
|
||
|
})
|
||
|
});
|