toolkit/devtools/sourcemap/tests/unit/test_source_map_generator.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2  * WARNING!
     3  *
     4  * Do not edit this file directly, it is built from the sources at
     5  * https://github.com/mozilla/source-map/
     6  */
     8 Components.utils.import('resource://test/Utils.jsm');
     9 /* -*- Mode: js; js-indent-level: 2; -*- */
    10 /*
    11  * Copyright 2011 Mozilla Foundation and contributors
    12  * Licensed under the New BSD license. See LICENSE or:
    13  * http://opensource.org/licenses/BSD-3-Clause
    14  */
    15 define("test/source-map/test-source-map-generator", ["require", "exports", "module"], function (require, exports, module) {
    17   var SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator;
    18   var SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer;
    19   var SourceNode = require('source-map/source-node').SourceNode;
    20   var util = require('source-map/util');
    22   exports['test some simple stuff'] = function (assert, util) {
    23     var map = new SourceMapGenerator({
    24       file: 'foo.js',
    25       sourceRoot: '.'
    26     });
    27     assert.ok(true);
    28   };
    30   exports['test JSON serialization'] = function (assert, util) {
    31     var map = new SourceMapGenerator({
    32       file: 'foo.js',
    33       sourceRoot: '.'
    34     });
    35     assert.equal(map.toString(), JSON.stringify(map));
    36   };
    38   exports['test adding mappings (case 1)'] = function (assert, util) {
    39     var map = new SourceMapGenerator({
    40       file: 'generated-foo.js',
    41       sourceRoot: '.'
    42     });
    44     assert.doesNotThrow(function () {
    45       map.addMapping({
    46         generated: { line: 1, column: 1 }
    47       });
    48     });
    49   };
    51   exports['test adding mappings (case 2)'] = function (assert, util) {
    52     var map = new SourceMapGenerator({
    53       file: 'generated-foo.js',
    54       sourceRoot: '.'
    55     });
    57     assert.doesNotThrow(function () {
    58       map.addMapping({
    59         generated: { line: 1, column: 1 },
    60         source: 'bar.js',
    61         original: { line: 1, column: 1 }
    62       });
    63     });
    64   };
    66   exports['test adding mappings (case 3)'] = function (assert, util) {
    67     var map = new SourceMapGenerator({
    68       file: 'generated-foo.js',
    69       sourceRoot: '.'
    70     });
    72     assert.doesNotThrow(function () {
    73       map.addMapping({
    74         generated: { line: 1, column: 1 },
    75         source: 'bar.js',
    76         original: { line: 1, column: 1 },
    77         name: 'someToken'
    78       });
    79     });
    80   };
    82   exports['test adding mappings (invalid)'] = function (assert, util) {
    83     var map = new SourceMapGenerator({
    84       file: 'generated-foo.js',
    85       sourceRoot: '.'
    86     });
    88     // Not enough info.
    89     assert.throws(function () {
    90       map.addMapping({});
    91     });
    93     // Original file position, but no source.
    94     assert.throws(function () {
    95       map.addMapping({
    96         generated: { line: 1, column: 1 },
    97         original: { line: 1, column: 1 }
    98       });
    99     });
   100   };
   102   exports['test that the correct mappings are being generated'] = function (assert, util) {
   103     var map = new SourceMapGenerator({
   104       file: 'min.js',
   105       sourceRoot: '/the/root'
   106     });
   108     map.addMapping({
   109       generated: { line: 1, column: 1 },
   110       original: { line: 1, column: 1 },
   111       source: 'one.js'
   112     });
   113     map.addMapping({
   114       generated: { line: 1, column: 5 },
   115       original: { line: 1, column: 5 },
   116       source: 'one.js'
   117     });
   118     map.addMapping({
   119       generated: { line: 1, column: 9 },
   120       original: { line: 1, column: 11 },
   121       source: 'one.js'
   122     });
   123     map.addMapping({
   124       generated: { line: 1, column: 18 },
   125       original: { line: 1, column: 21 },
   126       source: 'one.js',
   127       name: 'bar'
   128     });
   129     map.addMapping({
   130       generated: { line: 1, column: 21 },
   131       original: { line: 2, column: 3 },
   132       source: 'one.js'
   133     });
   134     map.addMapping({
   135       generated: { line: 1, column: 28 },
   136       original: { line: 2, column: 10 },
   137       source: 'one.js',
   138       name: 'baz'
   139     });
   140     map.addMapping({
   141       generated: { line: 1, column: 32 },
   142       original: { line: 2, column: 14 },
   143       source: 'one.js',
   144       name: 'bar'
   145     });
   147     map.addMapping({
   148       generated: { line: 2, column: 1 },
   149       original: { line: 1, column: 1 },
   150       source: 'two.js'
   151     });
   152     map.addMapping({
   153       generated: { line: 2, column: 5 },
   154       original: { line: 1, column: 5 },
   155       source: 'two.js'
   156     });
   157     map.addMapping({
   158       generated: { line: 2, column: 9 },
   159       original: { line: 1, column: 11 },
   160       source: 'two.js'
   161     });
   162     map.addMapping({
   163       generated: { line: 2, column: 18 },
   164       original: { line: 1, column: 21 },
   165       source: 'two.js',
   166       name: 'n'
   167     });
   168     map.addMapping({
   169       generated: { line: 2, column: 21 },
   170       original: { line: 2, column: 3 },
   171       source: 'two.js'
   172     });
   173     map.addMapping({
   174       generated: { line: 2, column: 28 },
   175       original: { line: 2, column: 10 },
   176       source: 'two.js',
   177       name: 'n'
   178     });
   180     map = JSON.parse(map.toString());
   182     util.assertEqualMaps(assert, map, util.testMap);
   183   };
   185   exports['test that source content can be set'] = function (assert, util) {
   186     var map = new SourceMapGenerator({
   187       file: 'min.js',
   188       sourceRoot: '/the/root'
   189     });
   190     map.addMapping({
   191       generated: { line: 1, column: 1 },
   192       original: { line: 1, column: 1 },
   193       source: 'one.js'
   194     });
   195     map.addMapping({
   196       generated: { line: 2, column: 1 },
   197       original: { line: 1, column: 1 },
   198       source: 'two.js'
   199     });
   200     map.setSourceContent('one.js', 'one file content');
   202     map = JSON.parse(map.toString());
   203     assert.equal(map.sources[0], 'one.js');
   204     assert.equal(map.sources[1], 'two.js');
   205     assert.equal(map.sourcesContent[0], 'one file content');
   206     assert.equal(map.sourcesContent[1], null);
   207   };
   209   exports['test .fromSourceMap'] = function (assert, util) {
   210     var map = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(util.testMap));
   211     util.assertEqualMaps(assert, map.toJSON(), util.testMap);
   212   };
   214   exports['test .fromSourceMap with sourcesContent'] = function (assert, util) {
   215     var map = SourceMapGenerator.fromSourceMap(
   216       new SourceMapConsumer(util.testMapWithSourcesContent));
   217     util.assertEqualMaps(assert, map.toJSON(), util.testMapWithSourcesContent);
   218   };
   220   exports['test applySourceMap'] = function (assert, util) {
   221     var node = new SourceNode(null, null, null, [
   222       new SourceNode(2, 0, 'fileX', 'lineX2\n'),
   223       'genA1\n',
   224       new SourceNode(2, 0, 'fileY', 'lineY2\n'),
   225       'genA2\n',
   226       new SourceNode(1, 0, 'fileX', 'lineX1\n'),
   227       'genA3\n',
   228       new SourceNode(1, 0, 'fileY', 'lineY1\n')
   229     ]);
   230     var mapStep1 = node.toStringWithSourceMap({
   231       file: 'fileA'
   232     }).map;
   233     mapStep1.setSourceContent('fileX', 'lineX1\nlineX2\n');
   234     mapStep1 = mapStep1.toJSON();
   236     node = new SourceNode(null, null, null, [
   237       'gen1\n',
   238       new SourceNode(1, 0, 'fileA', 'lineA1\n'),
   239       new SourceNode(2, 0, 'fileA', 'lineA2\n'),
   240       new SourceNode(3, 0, 'fileA', 'lineA3\n'),
   241       new SourceNode(4, 0, 'fileA', 'lineA4\n'),
   242       new SourceNode(1, 0, 'fileB', 'lineB1\n'),
   243       new SourceNode(2, 0, 'fileB', 'lineB2\n'),
   244       'gen2\n'
   245     ]);
   246     var mapStep2 = node.toStringWithSourceMap({
   247       file: 'fileGen'
   248     }).map;
   249     mapStep2.setSourceContent('fileB', 'lineB1\nlineB2\n');
   250     mapStep2 = mapStep2.toJSON();
   252     node = new SourceNode(null, null, null, [
   253       'gen1\n',
   254       new SourceNode(2, 0, 'fileX', 'lineA1\n'),
   255       new SourceNode(2, 0, 'fileA', 'lineA2\n'),
   256       new SourceNode(2, 0, 'fileY', 'lineA3\n'),
   257       new SourceNode(4, 0, 'fileA', 'lineA4\n'),
   258       new SourceNode(1, 0, 'fileB', 'lineB1\n'),
   259       new SourceNode(2, 0, 'fileB', 'lineB2\n'),
   260       'gen2\n'
   261     ]);
   262     var expectedMap = node.toStringWithSourceMap({
   263       file: 'fileGen'
   264     }).map;
   265     expectedMap.setSourceContent('fileX', 'lineX1\nlineX2\n');
   266     expectedMap.setSourceContent('fileB', 'lineB1\nlineB2\n');
   267     expectedMap = expectedMap.toJSON();
   269     // apply source map "mapStep1" to "mapStep2"
   270     var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(mapStep2));
   271     generator.applySourceMap(new SourceMapConsumer(mapStep1));
   272     var actualMap = generator.toJSON();
   274     util.assertEqualMaps(assert, actualMap, expectedMap);
   275   };
   277   exports['test sorting with duplicate generated mappings'] = function (assert, util) {
   278     var map = new SourceMapGenerator({
   279       file: 'test.js'
   280     });
   281     map.addMapping({
   282       generated: { line: 3, column: 0 },
   283       original: { line: 2, column: 0 },
   284       source: 'a.js'
   285     });
   286     map.addMapping({
   287       generated: { line: 2, column: 0 }
   288     });
   289     map.addMapping({
   290       generated: { line: 2, column: 0 }
   291     });
   292     map.addMapping({
   293       generated: { line: 1, column: 0 },
   294       original: { line: 1, column: 0 },
   295       source: 'a.js'
   296     });
   298     util.assertEqualMaps(assert, map.toJSON(), {
   299       version: 3,
   300       file: 'test.js',
   301       sources: ['a.js'],
   302       names: [],
   303       mappings: 'AAAA;A;AACA'
   304     });
   305   };
   307   exports['test ignore duplicate mappings.'] = function (assert, util) {
   308     var init = { file: 'min.js', sourceRoot: '/the/root' };
   309     var map1, map2;
   311     // null original source location
   312     var nullMapping1 = {
   313       generated: { line: 1, column: 0 }
   314     };
   315     var nullMapping2 = {
   316       generated: { line: 2, column: 2 }
   317     };
   319     map1 = new SourceMapGenerator(init);
   320     map2 = new SourceMapGenerator(init);
   322     map1.addMapping(nullMapping1);
   323     map1.addMapping(nullMapping1);
   325     map2.addMapping(nullMapping1);
   327     util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
   329     map1.addMapping(nullMapping2);
   330     map1.addMapping(nullMapping1);
   332     map2.addMapping(nullMapping2);
   334     util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
   336     // original source location
   337     var srcMapping1 = {
   338       generated: { line: 1, column: 0 },
   339       original: { line: 11, column: 0 },
   340       source: 'srcMapping1.js'
   341     };
   342     var srcMapping2 = {
   343       generated: { line: 2, column: 2 },
   344       original: { line: 11, column: 0 },
   345       source: 'srcMapping2.js'
   346     };
   348     map1 = new SourceMapGenerator(init);
   349     map2 = new SourceMapGenerator(init);
   351     map1.addMapping(srcMapping1);
   352     map1.addMapping(srcMapping1);
   354     map2.addMapping(srcMapping1);
   356     util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
   358     map1.addMapping(srcMapping2);
   359     map1.addMapping(srcMapping1);
   361     map2.addMapping(srcMapping2);
   363     util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
   365     // full original source and name information
   366     var fullMapping1 = {
   367       generated: { line: 1, column: 0 },
   368       original: { line: 11, column: 0 },
   369       source: 'fullMapping1.js',
   370       name: 'fullMapping1'
   371     };
   372     var fullMapping2 = {
   373       generated: { line: 2, column: 2 },
   374       original: { line: 11, column: 0 },
   375       source: 'fullMapping2.js',
   376       name: 'fullMapping2'
   377     };
   379     map1 = new SourceMapGenerator(init);
   380     map2 = new SourceMapGenerator(init);
   382     map1.addMapping(fullMapping1);
   383     map1.addMapping(fullMapping1);
   385     map2.addMapping(fullMapping1);
   387     util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
   389     map1.addMapping(fullMapping2);
   390     map1.addMapping(fullMapping1);
   392     map2.addMapping(fullMapping2);
   394     util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON());
   395   };
   397   exports['test github issue #72, check for duplicate names or sources'] = function (assert, util) {
   398     var map = new SourceMapGenerator({
   399       file: 'test.js'
   400     });
   401     map.addMapping({
   402       generated: { line: 1, column: 1 },
   403       original: { line: 2, column: 2 },
   404       source: 'a.js',
   405       name: 'foo'
   406     });
   407     map.addMapping({
   408       generated: { line: 3, column: 3 },
   409       original: { line: 4, column: 4 },
   410       source: 'a.js',
   411       name: 'foo'
   412     });
   413     util.assertEqualMaps(assert, map.toJSON(), {
   414       version: 3,
   415       file: 'test.js',
   416       sources: ['a.js'],
   417       names: ['foo'],
   418       mappings: 'CACEA;;GAEEA'
   419     });
   420   };
   422 });
   423 function run_test() {
   424   runSourceMapTests('test/source-map/test-source-map-generator', do_throw);
   425 }

mercurial