react / wstein / node_modules / browserify / node_modules / browser-pack / node_modules / combine-source-map / test / combine-source-map.js
80542 views'use strict';1/*jshint asi: true */23var test = require('tap').test;4var convert = require('convert-source-map');5var commentRegex = require('convert-source-map').commentRegex;6var combine = require('..');7var mappingsFromMap = require('../lib/mappings-from-map');89function checkMappings(foo, sm, lineOffset) {10function inspect(obj, depth) {11return require('util').inspect(obj, false, depth || 5, true);12}1314var fooMappings = mappingsFromMap(foo);15var mappings = mappingsFromMap(sm);1617var genLinesOffset = true;18var origLinesSame = true;19for (var i = 0; i < mappings.length; i++) {20var fooGen = fooMappings[i].generated;21var fooOrig = fooMappings[i].original;22var gen = mappings[i].generated23var orig = mappings[i].original;2425if (gen.column !== fooGen.column || gen.line !== (fooGen.line + lineOffset)) {26console.error(27'generated mapping at %s not offset properly:\ninput: [%s]\noutput:[%s]\n\n',28i ,29inspect(fooGen),30inspect(gen)31);32genLinesOffset = false;33}3435if (orig.column !== fooOrig.column || orig.line !== fooOrig.line) {36console.error(37'original mapping at %s is not the same as the genrated mapping:\ninput: [%s]\noutput:[%s]\n\n',38i ,39inspect(fooOrig),40inspect(orig)41);42origLinesSame = false;43}44}45return { genLinesOffset: genLinesOffset, origLinesSame: origLinesSame };46}4748var foo = {49version : 3,50file : 'foo.js',51sourceRoot : '',52sources : [ 'foo.coffee' ],53names : [],54mappings : ';AAAA;CAAA;CAAA,CAAA,CAAA,IAAO,GAAK;CAAZ',55sourcesContent : [ 'console.log(require \'./bar.js\')\n' ] };5657test('add one file with inlined source', function (t) {5859var mapComment = convert.fromObject(foo).toComment();60var file = {61id: 'xyz'62, source: '(function() {\n\n console.log(require(\'./bar.js\'));\n\n}).call(this);\n' + '\n' + mapComment63, sourceFile: 'foo.js'64};6566var lineOffset = 367var base64 = combine.create()68.addFile(file, { line: lineOffset })69.base64()7071var sm = convert.fromBase64(base64).toObject();72var res = checkMappings(foo, sm, lineOffset);7374t.ok(res.genLinesOffset, 'all generated lines are offset properly and columns unchanged')75t.ok(res.origLinesSame, 'all original lines and columns are unchanged')76t.deepEqual(sm.sourcesContent, foo.sourcesContent, 'includes the original source')77t.deepEqual(sm.sources, ['foo.coffee'], 'includes original filename')78t.end()79});808182test('add one file without inlined source', function (t) {8384var mapComment = convert85.fromObject(foo)86.setProperty('sourcesContent', [])87.toComment();8889var file = {90id: 'xyz'91, source: '(function() {\n\n console.log(require(\'./bar.js\'));\n\n}).call(this);\n' + '\n' + mapComment92, sourceFile: 'foo.js'93};9495var lineOffset = 396var base64 = combine.create()97.addFile(file, { line: lineOffset })98.base64()99100var sm = convert.fromBase64(base64).toObject();101var mappings = mappingsFromMap(sm);102103t.deepEqual(sm.sourcesContent, [file.source], 'includes the generated source')104t.deepEqual(sm.sources, ['foo.js'], 'includes generated filename')105106t.deepEqual(107mappings108, [ { generated: { line: 4, column: 0 },109original: { line: 1, column: 0 },110source: 'foo.js', name: undefined },111{ generated: { line: 5, column: 0 },112original: { line: 2, column: 0 },113source: 'foo.js', name: undefined },114{ generated: { line: 6, column: 0 },115original: { line: 3, column: 0 },116source: 'foo.js', name: undefined },117{ generated: { line: 7, column: 0 },118original: { line: 4, column: 0 },119source: 'foo.js', name: undefined },120{ generated: { line: 8, column: 0 },121original: { line: 5, column: 0 },122source: 'foo.js', name: undefined },123{ generated: { line: 9, column: 0 },124original: { line: 6, column: 0 },125source: 'foo.js', name: undefined },126{ generated: { line: 10, column: 0 },127original: { line: 7, column: 0 },128source: 'foo.js', name: undefined } ]129, 'generates mappings offset by the given line'130)131t.end()132})133134test('add one file with inlined sources from multiple files', function(t) {135var gen1Map = {136version: 3,137sources: [ 'one.js', 'two.js' ],138names: [],139mappings: 'AAAA;ACAA',140sourcesContent: [ 'console.log(1);', 'console.log(2);' ]141};142143var gen2Map = {144version: 3,145sources: [ 'three.js', 'four.js' ],146names: [],147mappings: 'AAAA;ACAA',148sourcesContent: [ 'console.log(3);', 'console.log(4);' ]149};150151var base64 = combine.create()152.addFile({153source: 'console.log(1);\nconsole.log(2);\n' + convert.fromObject(gen1Map).toComment(),154sourceFile: 'gen1.js'155})156.addFile({157source: 'console.log(3);\nconsole.log(4);\n' + convert.fromObject(gen2Map).toComment(),158sourceFile: 'gen2.js'159}, {line: 2})160.base64()161162var sm = convert.fromBase64(base64).toObject();163164165t.deepEqual(sm.sources, ['one.js', 'two.js', 'three.js', 'four.js'], 'include the correct source');166167t.deepEqual(sm.sourcesContent, [168'console.log(1);',169'console.log(2);',170'console.log(3);',171'console.log(4);'172], 'include the correct source file content');173174t.deepEqual(175mappingsFromMap(sm)176, [ { original: { column: 0, line: 1 },177generated: { column: 0, line: 1 },178source: 'one.js',179name: undefined },180{ original: { column: 0, line: 1 },181generated: { column: 0, line: 2 },182source: 'two.js',183name: undefined },184{ original: { column: 0, line: 1 },185generated: { column: 0, line: 3 },186source: 'three.js',187name: undefined },188{ original: { column: 0, line: 1 },189generated: { column: 0, line: 4 },190source: 'four.js',191name: undefined } ], 'should properly map multiple files');192t.end()193});194195test('relative path from multiple files', function(t) {196// Folder structure as follows:197//198// project199// +- src200// +- package1201// +- sub202// -- one.js203// -- two.js204// +- package2205// +- sub206// -- three.js207// -- four.js208// +- gen209// +- gen1.js210// +- gen2.js211// -- combined.js212//213// Where 'one.js', 'two.js' were combined to 'gen1.js'214// and 'three.js', 'four.js' were combined to 'gen2.js'.215// Now 'gen1.js' and 'gen2.js' are being combined from216// the project root folder.217var gen1Map = {218version: 3,219sources: [ 'sub/one.js', 'sub/two.js' ],220names: [],221mappings: 'AAAA;ACAA',222sourcesContent: [ 'console.log(1);', 'console.log(2);' ],223sourceRoot: '../src/package1'224};225226var gen2Map = {227version: 3,228sources: [ 'sub/three.js', 'sub/four.js' ],229names: [],230mappings: 'AAAA;ACAA',231sourcesContent: [ 'console.log(3);', 'console.log(4);' ],232sourceRoot: '../src/package2'233};234235var base64 = combine.create()236.addFile({237source: 'console.log(1);\nconsole.log(2);\n' + convert.fromObject(gen1Map).toComment(),238sourceFile: 'gen/gen1.js'239})240.addFile({241source: 'console.log(3);\nconsole.log(4);\n' + convert.fromObject(gen2Map).toComment(),242sourceFile: 'gen/gen2.js'243}, {line: 2})244.base64()245246var sm = convert.fromBase64(base64).toObject();247248t.deepEqual(sm.sources, ['src/package1/sub/one.js', 'src/package1/sub/two.js',249'src/package2/sub/three.js', 'src/package2/sub/four.js'],250'include the correct source');251252t.deepEqual(sm.sourcesContent, [253'console.log(1);',254'console.log(2);',255'console.log(3);',256'console.log(4);'257], 'include the correct source file content');258259t.deepEqual(260mappingsFromMap(sm)261, [ { original: { column: 0, line: 1 },262generated: { column: 0, line: 1 },263source: 'src/package1/sub/one.js',264name: undefined },265{ original: { column: 0, line: 1 },266generated: { column: 0, line: 2 },267source: 'src/package1/sub/two.js',268name: undefined },269{ original: { column: 0, line: 1 },270generated: { column: 0, line: 3 },271source: 'src/package2/sub/three.js',272name: undefined },273{ original: { column: 0, line: 1 },274generated: { column: 0, line: 4 },275source: 'src/package2/sub/four.js',276name: undefined } ], 'should properly map multiple files');277t.end()278});279280test('relative path when source and file name are the same', function(t) {281var gen1Map = {282version: 3,283sources: [ 'a/b/one.js' ],284names: [],285mappings: 'AAAA',286file: 'a/b/one.js',287sourcesContent: [ 'console.log(1);\n' ]288};289290var gen2Map = {291version: 3,292sources: [ 'a/b/two.js' ],293names: [],294mappings: 'AAAA',295file: 'a/b/two.js',296sourcesContent: [ 'console.log(2);\n' ]297};298299var base64 = combine.create()300.addFile({301source: 'console.log(1);\n' + convert.fromObject(gen1Map).toComment(),302sourceFile: 'a/b/one.js'303})304.addFile({305source: 'console.log(2);\n' + convert.fromObject(gen2Map).toComment(),306sourceFile: 'a/b/two.js'307}, {line: 1})308.base64()309310var sm = convert.fromBase64(base64).toObject();311312t.deepEqual(sm.sources, ['a/b/one.js', 'a/b/two.js'],313'include the correct source');314315t.deepEqual(316mappingsFromMap(sm)317, [ { original: { column: 0, line: 1 },318generated: { column: 0, line: 1 },319source: 'a/b/one.js',320name: undefined },321{ original: { column: 0, line: 1 },322generated: { column: 0, line: 2 },323source: 'a/b/two.js',324name: undefined } ], 'should properly map multiple files');325t.end()326});327328test('remove comments', function (t) {329var mapComment = convert.fromObject(foo).toComment();330331function sourcemapComments(src) {332var matches = src.match(commentRegex);333return matches ? matches.length : 0;334}335336t.equal(sourcemapComments('var a = 1;\n' + mapComment), 1);337338[ ''339, 'var a = 1;\n' + mapComment340, 'var a = 1;\n' + mapComment + '\nvar b = 5;\n' + mapComment341] .forEach(function (x) {342var removed = combine.removeComments(x)343t.equal(sourcemapComments(removed), 0)344})345t.end()346})347348349