| '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( |
| JSON.parse(decode(gen.base64Encode())) |
| , {"version":3,"file":"","sources":["foo.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""} |
| , 'encodes generated mappings' |
| ) |
| t.equal( |
| gen.inlineMappingUrl() |
| , '//# sourceMappingURL=data:application/json;charset=utf-8;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( |
| JSON.parse(decode(gen.base64Encode())) |
| , {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":"ACAA,ADAA;ACCA,ADAA;ACCA,ADAA;AACA;AACA","sourceRoot": ""} |
| , 'encodes generated mappings' |
| ) |
| t.equal( |
| gen.inlineMappingUrl() |
| , '//# sourceMappingURL=data:application/json;charset=utf-8;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.deepEqual( |
| JSON.parse(decode(gen.base64Encode())) |
| , {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA,sBCHA;ADIA,sBCHA;sBACA", "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( |
| JSON.parse(decode(gen.base64Encode())) |
| , {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;UACG;;oBCIH;8B", sourceRoot: ""} |
| , 'encodes generated mappings' |
| ) |
| t.equal( |
| gen.inlineMappingUrl() |
| , '//# sourceMappingURL=data:application/json;charset=utf-8;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.deepEqual( |
| JSON.parse(decode(gen.base64Encode())) |
| , {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;UACG;;;;;;uBCIH;iC", sourceRoot: ""} |
| , 'encodes mappings with offset' |
| ) |
| t.end() |
| }) |
| }); |
| |
| test('inline mapping url with charset opt', function(t){ |
| t.test('set inline mapping url charset to gbk', function(t){ |
| var gen = generator({charset: 'gbk'}) |
| .addGeneratedMappings('foo.js', foo); |
| t.equal( |
| gen.inlineMappingUrl(), |
| '//# sourceMappingURL=data:application/json;charset=gbk;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ==', |
| 'charset set to gbk' |
| ); |
| |
| t.end(); |
| }); |
| |
| t.test('default charset should be utf-8', function(t){ |
| var gen = generator() |
| .addGeneratedMappings('foo.js', foo); |
| |
| t.equal( |
| gen.inlineMappingUrl(), |
| '//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ==', |
| 'charset default to utf-8' |
| ); |
| |
| t.end(); |
| }); |
| }); |