Wed, 31 Dec 2014 06:09:35 +0100
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 }