react / wstein / node_modules / react / node_modules / envify / node_modules / jstransform / node_modules / source-map / test / source-map / test-source-map-generator.js
80559 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);22};2324exports['test JSON serialization'] = function (assert, util) {25var map = new SourceMapGenerator({26file: 'foo.js',27sourceRoot: '.'28});29assert.equal(map.toString(), JSON.stringify(map));30};3132exports['test adding mappings (case 1)'] = function (assert, util) {33var map = new SourceMapGenerator({34file: 'generated-foo.js',35sourceRoot: '.'36});3738assert.doesNotThrow(function () {39map.addMapping({40generated: { line: 1, column: 1 }41});42});43};4445exports['test adding mappings (case 2)'] = function (assert, util) {46var map = new SourceMapGenerator({47file: 'generated-foo.js',48sourceRoot: '.'49});5051assert.doesNotThrow(function () {52map.addMapping({53generated: { line: 1, column: 1 },54source: 'bar.js',55original: { line: 1, column: 1 }56});57});58};5960exports['test adding mappings (case 3)'] = function (assert, util) {61var map = new SourceMapGenerator({62file: 'generated-foo.js',63sourceRoot: '.'64});6566assert.doesNotThrow(function () {67map.addMapping({68generated: { line: 1, column: 1 },69source: 'bar.js',70original: { line: 1, column: 1 },71name: 'someToken'72});73});74};7576exports['test adding mappings (invalid)'] = function (assert, util) {77var map = new SourceMapGenerator({78file: 'generated-foo.js',79sourceRoot: '.'80});8182// Not enough info.83assert.throws(function () {84map.addMapping({});85});8687// Original file position, but no source.88assert.throws(function () {89map.addMapping({90generated: { line: 1, column: 1 },91original: { line: 1, column: 1 }92});93});94};9596exports['test that the correct mappings are being generated'] = function (assert, util) {97var map = new SourceMapGenerator({98file: 'min.js',99sourceRoot: '/the/root'100});101102map.addMapping({103generated: { line: 1, column: 1 },104original: { line: 1, column: 1 },105source: 'one.js'106});107map.addMapping({108generated: { line: 1, column: 5 },109original: { line: 1, column: 5 },110source: 'one.js'111});112map.addMapping({113generated: { line: 1, column: 9 },114original: { line: 1, column: 11 },115source: 'one.js'116});117map.addMapping({118generated: { line: 1, column: 18 },119original: { line: 1, column: 21 },120source: 'one.js',121name: 'bar'122});123map.addMapping({124generated: { line: 1, column: 21 },125original: { line: 2, column: 3 },126source: 'one.js'127});128map.addMapping({129generated: { line: 1, column: 28 },130original: { line: 2, column: 10 },131source: 'one.js',132name: 'baz'133});134map.addMapping({135generated: { line: 1, column: 32 },136original: { line: 2, column: 14 },137source: 'one.js',138name: 'bar'139});140141map.addMapping({142generated: { line: 2, column: 1 },143original: { line: 1, column: 1 },144source: 'two.js'145});146map.addMapping({147generated: { line: 2, column: 5 },148original: { line: 1, column: 5 },149source: 'two.js'150});151map.addMapping({152generated: { line: 2, column: 9 },153original: { line: 1, column: 11 },154source: 'two.js'155});156map.addMapping({157generated: { line: 2, column: 18 },158original: { line: 1, column: 21 },159source: 'two.js',160name: 'n'161});162map.addMapping({163generated: { line: 2, column: 21 },164original: { line: 2, column: 3 },165source: 'two.js'166});167map.addMapping({168generated: { line: 2, column: 28 },169original: { line: 2, column: 10 },170source: 'two.js',171name: 'n'172});173174map = JSON.parse(map.toString());175176util.assertEqualMaps(assert, map, util.testMap);177};178179exports['test that source content can be set'] = function (assert, util) {180var map = new SourceMapGenerator({181file: 'min.js',182sourceRoot: '/the/root'183});184map.addMapping({185generated: { line: 1, column: 1 },186original: { line: 1, column: 1 },187source: 'one.js'188});189map.addMapping({190generated: { line: 2, column: 1 },191original: { line: 1, column: 1 },192source: 'two.js'193});194map.setSourceContent('one.js', 'one file content');195196map = JSON.parse(map.toString());197assert.equal(map.sources[0], 'one.js');198assert.equal(map.sources[1], 'two.js');199assert.equal(map.sourcesContent[0], 'one file content');200assert.equal(map.sourcesContent[1], null);201};202203exports['test .fromSourceMap'] = function (assert, util) {204var map = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(util.testMap));205util.assertEqualMaps(assert, map.toJSON(), util.testMap);206};207208exports['test .fromSourceMap with sourcesContent'] = function (assert, util) {209var map = SourceMapGenerator.fromSourceMap(210new SourceMapConsumer(util.testMapWithSourcesContent));211util.assertEqualMaps(assert, map.toJSON(), util.testMapWithSourcesContent);212};213214exports['test applySourceMap'] = function (assert, util) {215var node = new SourceNode(null, null, null, [216new SourceNode(2, 0, 'fileX', 'lineX2\n'),217'genA1\n',218new SourceNode(2, 0, 'fileY', 'lineY2\n'),219'genA2\n',220new SourceNode(1, 0, 'fileX', 'lineX1\n'),221'genA3\n',222new SourceNode(1, 0, 'fileY', 'lineY1\n')223]);224var mapStep1 = node.toStringWithSourceMap({225file: 'fileA'226}).map;227mapStep1.setSourceContent('fileX', 'lineX1\nlineX2\n');228mapStep1 = mapStep1.toJSON();229230node = new SourceNode(null, null, null, [231'gen1\n',232new SourceNode(1, 0, 'fileA', 'lineA1\n'),233new SourceNode(2, 0, 'fileA', 'lineA2\n'),234new SourceNode(3, 0, 'fileA', 'lineA3\n'),235new SourceNode(4, 0, 'fileA', 'lineA4\n'),236new SourceNode(1, 0, 'fileB', 'lineB1\n'),237new SourceNode(2, 0, 'fileB', 'lineB2\n'),238'gen2\n'239]);240var mapStep2 = node.toStringWithSourceMap({241file: 'fileGen'242}).map;243mapStep2.setSourceContent('fileB', 'lineB1\nlineB2\n');244mapStep2 = mapStep2.toJSON();245246node = new SourceNode(null, null, null, [247'gen1\n',248new SourceNode(2, 0, 'fileX', 'lineA1\n'),249new SourceNode(2, 0, 'fileA', 'lineA2\n'),250new SourceNode(2, 0, 'fileY', 'lineA3\n'),251new SourceNode(4, 0, 'fileA', 'lineA4\n'),252new SourceNode(1, 0, 'fileB', 'lineB1\n'),253new SourceNode(2, 0, 'fileB', 'lineB2\n'),254'gen2\n'255]);256var expectedMap = node.toStringWithSourceMap({257file: 'fileGen'258}).map;259expectedMap.setSourceContent('fileX', 'lineX1\nlineX2\n');260expectedMap.setSourceContent('fileB', 'lineB1\nlineB2\n');261expectedMap = expectedMap.toJSON();262263// apply source map "mapStep1" to "mapStep2"264var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(mapStep2));265generator.applySourceMap(new SourceMapConsumer(mapStep1));266var actualMap = generator.toJSON();267268util.assertEqualMaps(assert, actualMap, expectedMap);269};270271exports['test sorting with duplicate generated mappings'] = function (assert, util) {272var map = new SourceMapGenerator({273file: 'test.js'274});275map.addMapping({276generated: { line: 3, column: 0 },277original: { line: 2, column: 0 },278source: 'a.js'279});280map.addMapping({281generated: { line: 2, column: 0 }282});283map.addMapping({284generated: { line: 2, column: 0 }285});286map.addMapping({287generated: { line: 1, column: 0 },288original: { line: 1, column: 0 },289source: 'a.js'290});291292util.assertEqualMaps(assert, map.toJSON(), {293version: 3,294file: 'test.js',295sources: ['a.js'],296names: [],297mappings: 'AAAA;A;AACA'298});299};300301exports['test ignore duplicate mappings.'] = function (assert, util) {302var init = { file: 'min.js', sourceRoot: '/the/root' };303var map1, map2;304305// null original source location306var nullMapping1 = {307generated: { line: 1, column: 0 }308};309var nullMapping2 = {310generated: { line: 2, column: 2 }311};312313map1 = new SourceMapGenerator(init);314map2 = new SourceMapGenerator(init);315316map1.addMapping(nullMapping1);317map1.addMapping(nullMapping1);318319map2.addMapping(nullMapping1);320321util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());322323map1.addMapping(nullMapping2);324map1.addMapping(nullMapping1);325326map2.addMapping(nullMapping2);327328util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());329330// original source location331var srcMapping1 = {332generated: { line: 1, column: 0 },333original: { line: 11, column: 0 },334source: 'srcMapping1.js'335};336var srcMapping2 = {337generated: { line: 2, column: 2 },338original: { line: 11, column: 0 },339source: 'srcMapping2.js'340};341342map1 = new SourceMapGenerator(init);343map2 = new SourceMapGenerator(init);344345map1.addMapping(srcMapping1);346map1.addMapping(srcMapping1);347348map2.addMapping(srcMapping1);349350util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());351352map1.addMapping(srcMapping2);353map1.addMapping(srcMapping1);354355map2.addMapping(srcMapping2);356357util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());358359// full original source and name information360var fullMapping1 = {361generated: { line: 1, column: 0 },362original: { line: 11, column: 0 },363source: 'fullMapping1.js',364name: 'fullMapping1'365};366var fullMapping2 = {367generated: { line: 2, column: 2 },368original: { line: 11, column: 0 },369source: 'fullMapping2.js',370name: 'fullMapping2'371};372373map1 = new SourceMapGenerator(init);374map2 = new SourceMapGenerator(init);375376map1.addMapping(fullMapping1);377map1.addMapping(fullMapping1);378379map2.addMapping(fullMapping1);380381util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());382383map1.addMapping(fullMapping2);384map1.addMapping(fullMapping1);385386map2.addMapping(fullMapping2);387388util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());389};390391exports['test github issue #72, check for duplicate names or sources'] = function (assert, util) {392var map = new SourceMapGenerator({393file: 'test.js'394});395map.addMapping({396generated: { line: 1, column: 1 },397original: { line: 2, column: 2 },398source: 'a.js',399name: 'foo'400});401map.addMapping({402generated: { line: 3, column: 3 },403original: { line: 4, column: 4 },404source: 'a.js',405name: 'foo'406});407util.assertEqualMaps(assert, map.toJSON(), {408version: 3,409file: 'test.js',410sources: ['a.js'],411names: ['foo'],412mappings: 'CACEA;;GAEEA'413});414};415416});417418419