react / wstein / node_modules / browserify / node_modules / browser-pack / node_modules / combine-source-map / node_modules / inline-source-map / test / inline-source-map.js
80556 views'use strict';1/*jshint asi: true*/23var test = require('tap').test4var generator = require('..');56var foo = '' + function foo () {7var hello = 'hello';8var world = 'world';9console.log('%s %s', hello, world);10}1112var bar = '' + function bar () {13console.log('yes?');14}1516function decode(base64) {17return new Buffer(base64, 'base64').toString();18}1920function inspect(obj, depth) {21console.error(require('util').inspect(obj, false, depth || 5, true));22}2324test('generated mappings', function (t) {2526t.test('one file no offset', function (t) {27var gen = generator()28.addGeneratedMappings('foo.js', foo)2930t.deepEqual(31gen._mappings()32, [ { generatedLine: 1,33generatedColumn: 0,34originalLine: 1,35originalColumn: 0,36source: 'foo.js',37name: null },38{ generatedLine: 2,39generatedColumn: 0,40originalLine: 2,41originalColumn: 0,42source: 'foo.js',43name: null },44{ generatedLine: 3,45generatedColumn: 0,46originalLine: 3,47originalColumn: 0,48source: 'foo.js',49name: null },50{ generatedLine: 4,51generatedColumn: 0,52originalLine: 4,53originalColumn: 0,54source: 'foo.js',55name: null },56{ generatedLine: 5,57generatedColumn: 0,58originalLine: 5,59originalColumn: 0,60source: 'foo.js',61name: null } ]62, 'generates correct mappings'63)6465t.deepEqual(66JSON.parse(decode(gen.base64Encode()))67, {"version":3,"file":"","sources":["foo.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}68, 'encodes generated mappings'69)70t.equal(71gen.inlineMappingUrl()72, '//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='73, 'returns correct inline mapping url'74)75t.end()76})7778t.test('two files no offset', function (t) {79var gen = generator()80.addGeneratedMappings('foo.js', foo)81.addGeneratedMappings('bar.js', bar)8283t.deepEqual(84gen._mappings()85, [ { generatedLine: 1,86generatedColumn: 0,87originalLine: 1,88originalColumn: 0,89source: 'foo.js',90name: null },91{ generatedLine: 2,92generatedColumn: 0,93originalLine: 2,94originalColumn: 0,95source: 'foo.js',96name: null },97{ generatedLine: 3,98generatedColumn: 0,99originalLine: 3,100originalColumn: 0,101source: 'foo.js',102name: null },103{ generatedLine: 4,104generatedColumn: 0,105originalLine: 4,106originalColumn: 0,107source: 'foo.js',108name: null },109{ generatedLine: 5,110generatedColumn: 0,111originalLine: 5,112originalColumn: 0,113source: 'foo.js',114name: null },115{ generatedLine: 1,116generatedColumn: 0,117originalLine: 1,118originalColumn: 0,119source: 'bar.js',120name: null },121{ generatedLine: 2,122generatedColumn: 0,123originalLine: 2,124originalColumn: 0,125source: 'bar.js',126name: null },127{ generatedLine: 3,128generatedColumn: 0,129originalLine: 3,130originalColumn: 0,131source: 'bar.js',132name: null } ]133, 'generates correct mappings'134)135t.deepEqual(136JSON.parse(decode(gen.base64Encode()))137, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":"ACAA,ADAA;ACCA,ADAA;ACCA,ADAA;AACA;AACA","sourceRoot": ""}138, 'encodes generated mappings'139)140t.equal(141gen.inlineMappingUrl()142, '//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyIsImJhci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUNBQSxBREFBO0FDQ0EsQURBQTtBQ0NBLEFEQUE7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='143, 'returns correct inline mapping url'144)145t.end()146})147148t.test('one line source', function (t) {149var gen = generator().addGeneratedMappings('one-liner.js', 'console.log("line one");')150t.deepEqual(151gen._mappings()152, [ { generatedLine: 1,153generatedColumn: 0,154originalLine: 1,155originalColumn: 0,156source: 'one-liner.js',157name: null } ]158, 'generates correct mappings'159)160t.end()161})162163t.test('with offset', function (t) {164var gen = generator()165.addGeneratedMappings('foo.js', foo, { line: 20 })166.addGeneratedMappings('bar.js', bar, { line: 23, column: 22 })167168t.deepEqual(169gen._mappings()170, [ { generatedLine: 21,171generatedColumn: 0,172originalLine: 1,173originalColumn: 0,174source: 'foo.js',175name: null },176{ generatedLine: 22,177generatedColumn: 0,178originalLine: 2,179originalColumn: 0,180source: 'foo.js',181name: null },182{ generatedLine: 23,183generatedColumn: 0,184originalLine: 3,185originalColumn: 0,186source: 'foo.js',187name: null },188{ generatedLine: 24,189generatedColumn: 0,190originalLine: 4,191originalColumn: 0,192source: 'foo.js',193name: null },194{ generatedLine: 25,195generatedColumn: 0,196originalLine: 5,197originalColumn: 0,198source: 'foo.js',199name: null },200{ generatedLine: 24,201generatedColumn: 22,202originalLine: 1,203originalColumn: 0,204source: 'bar.js',205name: null },206{ generatedLine: 25,207generatedColumn: 22,208originalLine: 2,209originalColumn: 0,210source: 'bar.js',211name: null },212{ generatedLine: 26,213generatedColumn: 22,214originalLine: 3,215originalColumn: 0,216source: 'bar.js',217name: null } ]218, 'generates correct mappings'219)220221t.deepEqual(222JSON.parse(decode(gen.base64Encode()))223, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA,sBCHA;ADIA,sBCHA;sBACA", "sourceRoot": ""}224, 'encodes generated mappings with offset'225)226t.end()227})228})229230test('given mappings, with one having no original', function (t) {231t.test('no offset', function (t) {232var gen = generator()233.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }])234235// This addresses an edgecase in which a transpiler generates mappings but doesn't include the original position.236// If we set source to sourceFile (as usual) in that case, the mappings are considered invalid by the source-map module's237// SourceMapGenerator. Keeping source undefined fixes this problem.238// Raised issue: https://github.com/thlorenz/inline-source-map/issues/2239// Validate function: https://github.com/mozilla/source-map/blob/a3372ea78e662582087dd25ebda999c06424e047/lib/source-map/source-map-generator.js#L232240.addMappings('bar.js', [241{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }242, { generated: { line: 8, column: 30 } }243])244245t.deepEqual(246gen._mappings()247, [ { generatedLine: 5,248generatedColumn: 10,249originalLine: 2,250originalColumn: 3,251source: 'foo.js',252name: null },253{ generatedLine: 7,254generatedColumn: 20,255originalLine: 6,256originalColumn: 0,257source: 'bar.js',258name: null },259{ generatedLine: 8,260generatedColumn: 30,261originalLine: false,262originalColumn: false,263source: undefined,264name: null } ]265, 'adds correct mappings'266)267t.deepEqual(268JSON.parse(decode(gen.base64Encode()))269, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;UACG;;oBCIH;8B", sourceRoot: ""}270, 'encodes generated mappings'271)272t.equal(273gen.inlineMappingUrl()274, '//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyIsImJhci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O1VBQ0c7O29CQ0lIOzhCIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='275, 'returns correct inline mapping url'276)277t.end()278})279280t.test('with offset', function (t) {281var gen = generator()282.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }], { line: 5 })283.addMappings('bar.js', [{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }, { generated: { line: 8, column: 30 } }], { line: 9, column: 3 })284285t.deepEqual(286gen._mappings()287, [ { generatedLine: 10,288generatedColumn: 10,289originalLine: 2,290originalColumn: 3,291source: 'foo.js',292name: null },293{ generatedLine: 16,294generatedColumn: 23,295originalLine: 6,296originalColumn: 0,297source: 'bar.js',298name: null },299{ generatedLine: 17,300generatedColumn: 33,301originalLine: false,302originalColumn: false,303source: undefined,304name: null } ]305, 'adds correct mappings'306)307t.deepEqual(308JSON.parse(decode(gen.base64Encode()))309, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;UACG;;;;;;uBCIH;iC", sourceRoot: ""}310, 'encodes mappings with offset'311)312t.end()313})314});315316test('inline mapping url with charset opt', function(t){317t.test('set inline mapping url charset to gbk', function(t){318var gen = generator({charset: 'gbk'})319.addGeneratedMappings('foo.js', foo);320t.equal(321gen.inlineMappingUrl(),322'//# sourceMappingURL=data:application/json;charset:gbk;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ==',323'charset set to gbk'324);325326t.end();327});328329t.test('default charset should be utf-8', function(t){330var gen = generator()331.addGeneratedMappings('foo.js', foo);332333t.equal(334gen.inlineMappingUrl(),335'//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ==',336'charset default to utf-8'337);338339t.end();340});341});342343344