react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / umd / node_modules / uglify-js / node_modules / source-map / test / source-map / test-source-map-generator.js
80765 views/* -*- Mode: js; js-indent-level: 2; -*- */1/*2* Copyright 2011 Mozilla Foundation and contributors3* Licensed under the New BSD license. See LICENSE or:4* http://opensource.org/licenses/BSD-3-Clause5*/6if (typeof define !== 'function') {7var define = require('amdefine')(module, require);8}9define(function (require, exports, module) {1011var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator;12var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer;13var SourceNode = require('../../lib/source-map/source-node').SourceNode;14var util = require('./util');1516exports['test some simple stuff'] = function (assert, util) {17var map = new SourceMapGenerator({18file: 'foo.js',19sourceRoot: '.'20});21assert.ok(true);2223var map = new SourceMapGenerator();24assert.ok(true);25};2627exports['test JSON serialization'] = function (assert, util) {28var map = new SourceMapGenerator({29file: 'foo.js',30sourceRoot: '.'31});32assert.equal(map.toString(), JSON.stringify(map));33};3435exports['test adding mappings (case 1)'] = function (assert, util) {36var map = new SourceMapGenerator({37file: 'generated-foo.js',38sourceRoot: '.'39});4041assert.doesNotThrow(function () {42map.addMapping({43generated: { line: 1, column: 1 }44});45});46};4748exports['test adding mappings (case 2)'] = function (assert, util) {49var map = new SourceMapGenerator({50file: 'generated-foo.js',51sourceRoot: '.'52});5354assert.doesNotThrow(function () {55map.addMapping({56generated: { line: 1, column: 1 },57source: 'bar.js',58original: { line: 1, column: 1 }59});60});61};6263exports['test adding mappings (case 3)'] = function (assert, util) {64var map = new SourceMapGenerator({65file: 'generated-foo.js',66sourceRoot: '.'67});6869assert.doesNotThrow(function () {70map.addMapping({71generated: { line: 1, column: 1 },72source: 'bar.js',73original: { line: 1, column: 1 },74name: 'someToken'75});76});77};7879exports['test adding mappings (invalid)'] = function (assert, util) {80var map = new SourceMapGenerator({81file: 'generated-foo.js',82sourceRoot: '.'83});8485// Not enough info.86assert.throws(function () {87map.addMapping({});88});8990// Original file position, but no source.91assert.throws(function () {92map.addMapping({93generated: { line: 1, column: 1 },94original: { line: 1, column: 1 }95});96});97};9899exports['test that the correct mappings are being generated'] = function (assert, util) {100var map = new SourceMapGenerator({101file: 'min.js',102sourceRoot: '/the/root'103});104105map.addMapping({106generated: { line: 1, column: 1 },107original: { line: 1, column: 1 },108source: 'one.js'109});110map.addMapping({111generated: { line: 1, column: 5 },112original: { line: 1, column: 5 },113source: 'one.js'114});115map.addMapping({116generated: { line: 1, column: 9 },117original: { line: 1, column: 11 },118source: 'one.js'119});120map.addMapping({121generated: { line: 1, column: 18 },122original: { line: 1, column: 21 },123source: 'one.js',124name: 'bar'125});126map.addMapping({127generated: { line: 1, column: 21 },128original: { line: 2, column: 3 },129source: 'one.js'130});131map.addMapping({132generated: { line: 1, column: 28 },133original: { line: 2, column: 10 },134source: 'one.js',135name: 'baz'136});137map.addMapping({138generated: { line: 1, column: 32 },139original: { line: 2, column: 14 },140source: 'one.js',141name: 'bar'142});143144map.addMapping({145generated: { line: 2, column: 1 },146original: { line: 1, column: 1 },147source: 'two.js'148});149map.addMapping({150generated: { line: 2, column: 5 },151original: { line: 1, column: 5 },152source: 'two.js'153});154map.addMapping({155generated: { line: 2, column: 9 },156original: { line: 1, column: 11 },157source: 'two.js'158});159map.addMapping({160generated: { line: 2, column: 18 },161original: { line: 1, column: 21 },162source: 'two.js',163name: 'n'164});165map.addMapping({166generated: { line: 2, column: 21 },167original: { line: 2, column: 3 },168source: 'two.js'169});170map.addMapping({171generated: { line: 2, column: 28 },172original: { line: 2, column: 10 },173source: 'two.js',174name: 'n'175});176177map = JSON.parse(map.toString());178179util.assertEqualMaps(assert, map, util.testMap);180};181182exports['test that source content can be set'] = function (assert, util) {183var map = new SourceMapGenerator({184file: 'min.js',185sourceRoot: '/the/root'186});187map.addMapping({188generated: { line: 1, column: 1 },189original: { line: 1, column: 1 },190source: 'one.js'191});192map.addMapping({193generated: { line: 2, column: 1 },194original: { line: 1, column: 1 },195source: 'two.js'196});197map.setSourceContent('one.js', 'one file content');198199map = JSON.parse(map.toString());200assert.equal(map.sources[0], 'one.js');201assert.equal(map.sources[1], 'two.js');202assert.equal(map.sourcesContent[0], 'one file content');203assert.equal(map.sourcesContent[1], null);204};205206exports['test .fromSourceMap'] = function (assert, util) {207var map = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(util.testMap));208util.assertEqualMaps(assert, map.toJSON(), util.testMap);209};210211exports['test .fromSourceMap with sourcesContent'] = function (assert, util) {212var map = SourceMapGenerator.fromSourceMap(213new SourceMapConsumer(util.testMapWithSourcesContent));214util.assertEqualMaps(assert, map.toJSON(), util.testMapWithSourcesContent);215};216217exports['test applySourceMap'] = function (assert, util) {218var node = new SourceNode(null, null, null, [219new SourceNode(2, 0, 'fileX', 'lineX2\n'),220'genA1\n',221new SourceNode(2, 0, 'fileY', 'lineY2\n'),222'genA2\n',223new SourceNode(1, 0, 'fileX', 'lineX1\n'),224'genA3\n',225new SourceNode(1, 0, 'fileY', 'lineY1\n')226]);227var mapStep1 = node.toStringWithSourceMap({228file: 'fileA'229}).map;230mapStep1.setSourceContent('fileX', 'lineX1\nlineX2\n');231mapStep1 = mapStep1.toJSON();232233node = new SourceNode(null, null, null, [234'gen1\n',235new SourceNode(1, 0, 'fileA', 'lineA1\n'),236new SourceNode(2, 0, 'fileA', 'lineA2\n'),237new SourceNode(3, 0, 'fileA', 'lineA3\n'),238new SourceNode(4, 0, 'fileA', 'lineA4\n'),239new SourceNode(1, 0, 'fileB', 'lineB1\n'),240new SourceNode(2, 0, 'fileB', 'lineB2\n'),241'gen2\n'242]);243var mapStep2 = node.toStringWithSourceMap({244file: 'fileGen'245}).map;246mapStep2.setSourceContent('fileB', 'lineB1\nlineB2\n');247mapStep2 = mapStep2.toJSON();248249node = new SourceNode(null, null, null, [250'gen1\n',251new SourceNode(2, 0, 'fileX', 'lineA1\n'),252new SourceNode(2, 0, 'fileA', 'lineA2\n'),253new SourceNode(2, 0, 'fileY', 'lineA3\n'),254new SourceNode(4, 0, 'fileA', 'lineA4\n'),255new SourceNode(1, 0, 'fileB', 'lineB1\n'),256new SourceNode(2, 0, 'fileB', 'lineB2\n'),257'gen2\n'258]);259var expectedMap = node.toStringWithSourceMap({260file: 'fileGen'261}).map;262expectedMap.setSourceContent('fileX', 'lineX1\nlineX2\n');263expectedMap.setSourceContent('fileB', 'lineB1\nlineB2\n');264expectedMap = expectedMap.toJSON();265266// apply source map "mapStep1" to "mapStep2"267var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(mapStep2));268generator.applySourceMap(new SourceMapConsumer(mapStep1));269var actualMap = generator.toJSON();270271util.assertEqualMaps(assert, actualMap, expectedMap);272};273274exports['test applySourceMap throws when file is missing'] = function (assert, util) {275var map = new SourceMapGenerator({276file: 'test.js'277});278var map2 = new SourceMapGenerator();279assert.throws(function() {280map.applySourceMap(new SourceMapConsumer(map2.toJSON()));281});282};283284exports['test the two additional parameters of applySourceMap'] = function (assert, util) {285// Assume the following directory structure:286//287// http://foo.org/288// bar.coffee289// app/290// coffee/291// foo.coffee292// temp/293// bundle.js294// temp_maps/295// bundle.js.map296// public/297// bundle.min.js298// bundle.min.js.map299//300// http://www.example.com/301// baz.coffee302303var bundleMap = new SourceMapGenerator({304file: 'bundle.js'305});306bundleMap.addMapping({307generated: { line: 3, column: 3 },308original: { line: 2, column: 2 },309source: '../coffee/foo.coffee'310});311bundleMap.setSourceContent('../coffee/foo.coffee', 'foo coffee');312bundleMap.addMapping({313generated: { line: 13, column: 13 },314original: { line: 12, column: 12 },315source: '/bar.coffee'316});317bundleMap.setSourceContent('/bar.coffee', 'bar coffee');318bundleMap.addMapping({319generated: { line: 23, column: 23 },320original: { line: 22, column: 22 },321source: 'http://www.example.com/baz.coffee'322});323bundleMap.setSourceContent(324'http://www.example.com/baz.coffee',325'baz coffee'326);327bundleMap = new SourceMapConsumer(bundleMap.toJSON());328329var minifiedMap = new SourceMapGenerator({330file: 'bundle.min.js',331sourceRoot: '..'332});333minifiedMap.addMapping({334generated: { line: 1, column: 1 },335original: { line: 3, column: 3 },336source: 'temp/bundle.js'337});338minifiedMap.addMapping({339generated: { line: 11, column: 11 },340original: { line: 13, column: 13 },341source: 'temp/bundle.js'342});343minifiedMap.addMapping({344generated: { line: 21, column: 21 },345original: { line: 23, column: 23 },346source: 'temp/bundle.js'347});348minifiedMap = new SourceMapConsumer(minifiedMap.toJSON());349350var expectedMap = function (sources) {351var map = new SourceMapGenerator({352file: 'bundle.min.js',353sourceRoot: '..'354});355map.addMapping({356generated: { line: 1, column: 1 },357original: { line: 2, column: 2 },358source: sources[0]359});360map.setSourceContent(sources[0], 'foo coffee');361map.addMapping({362generated: { line: 11, column: 11 },363original: { line: 12, column: 12 },364source: sources[1]365});366map.setSourceContent(sources[1], 'bar coffee');367map.addMapping({368generated: { line: 21, column: 21 },369original: { line: 22, column: 22 },370source: sources[2]371});372map.setSourceContent(sources[2], 'baz coffee');373return map.toJSON();374}375376var actualMap = function (aSourceMapPath) {377var map = SourceMapGenerator.fromSourceMap(minifiedMap);378// Note that relying on `bundleMap.file` (which is simply 'bundle.js')379// instead of supplying the second parameter wouldn't work here.380map.applySourceMap(bundleMap, '../temp/bundle.js', aSourceMapPath);381return map.toJSON();382}383384util.assertEqualMaps(assert, actualMap('../temp_maps'), expectedMap([385'coffee/foo.coffee',386'/bar.coffee',387'http://www.example.com/baz.coffee'388]));389390util.assertEqualMaps(assert, actualMap('/app/temp_maps'), expectedMap([391'/app/coffee/foo.coffee',392'/bar.coffee',393'http://www.example.com/baz.coffee'394]));395396util.assertEqualMaps(assert, actualMap('http://foo.org/app/temp_maps'), expectedMap([397'http://foo.org/app/coffee/foo.coffee',398'http://foo.org/bar.coffee',399'http://www.example.com/baz.coffee'400]));401};402403exports['test sorting with duplicate generated mappings'] = function (assert, util) {404var map = new SourceMapGenerator({405file: 'test.js'406});407map.addMapping({408generated: { line: 3, column: 0 },409original: { line: 2, column: 0 },410source: 'a.js'411});412map.addMapping({413generated: { line: 2, column: 0 }414});415map.addMapping({416generated: { line: 2, column: 0 }417});418map.addMapping({419generated: { line: 1, column: 0 },420original: { line: 1, column: 0 },421source: 'a.js'422});423424util.assertEqualMaps(assert, map.toJSON(), {425version: 3,426file: 'test.js',427sources: ['a.js'],428names: [],429mappings: 'AAAA;A;AACA'430});431};432433exports['test ignore duplicate mappings.'] = function (assert, util) {434var init = { file: 'min.js', sourceRoot: '/the/root' };435var map1, map2;436437// null original source location438var nullMapping1 = {439generated: { line: 1, column: 0 }440};441var nullMapping2 = {442generated: { line: 2, column: 2 }443};444445map1 = new SourceMapGenerator(init);446map2 = new SourceMapGenerator(init);447448map1.addMapping(nullMapping1);449map1.addMapping(nullMapping1);450451map2.addMapping(nullMapping1);452453util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());454455map1.addMapping(nullMapping2);456map1.addMapping(nullMapping1);457458map2.addMapping(nullMapping2);459460util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());461462// original source location463var srcMapping1 = {464generated: { line: 1, column: 0 },465original: { line: 11, column: 0 },466source: 'srcMapping1.js'467};468var srcMapping2 = {469generated: { line: 2, column: 2 },470original: { line: 11, column: 0 },471source: 'srcMapping2.js'472};473474map1 = new SourceMapGenerator(init);475map2 = new SourceMapGenerator(init);476477map1.addMapping(srcMapping1);478map1.addMapping(srcMapping1);479480map2.addMapping(srcMapping1);481482util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());483484map1.addMapping(srcMapping2);485map1.addMapping(srcMapping1);486487map2.addMapping(srcMapping2);488489util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());490491// full original source and name information492var fullMapping1 = {493generated: { line: 1, column: 0 },494original: { line: 11, column: 0 },495source: 'fullMapping1.js',496name: 'fullMapping1'497};498var fullMapping2 = {499generated: { line: 2, column: 2 },500original: { line: 11, column: 0 },501source: 'fullMapping2.js',502name: 'fullMapping2'503};504505map1 = new SourceMapGenerator(init);506map2 = new SourceMapGenerator(init);507508map1.addMapping(fullMapping1);509map1.addMapping(fullMapping1);510511map2.addMapping(fullMapping1);512513util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());514515map1.addMapping(fullMapping2);516map1.addMapping(fullMapping1);517518map2.addMapping(fullMapping2);519520util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());521};522523exports['test github issue #72, check for duplicate names or sources'] = function (assert, util) {524var map = new SourceMapGenerator({525file: 'test.js'526});527map.addMapping({528generated: { line: 1, column: 1 },529original: { line: 2, column: 2 },530source: 'a.js',531name: 'foo'532});533map.addMapping({534generated: { line: 3, column: 3 },535original: { line: 4, column: 4 },536source: 'a.js',537name: 'foo'538});539util.assertEqualMaps(assert, map.toJSON(), {540version: 3,541file: 'test.js',542sources: ['a.js'],543names: ['foo'],544mappings: 'CACEA;;GAEEA'545});546};547548});549550551