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-node", ["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;
21 exports['test .add()'] = function (assert, util) {
22 var node = new SourceNode(null, null, null);
24 // Adding a string works.
25 node.add('function noop() {}');
27 // Adding another source node works.
28 node.add(new SourceNode(null, null, null));
30 // Adding an array works.
31 node.add(['function foo() {',
32 new SourceNode(null, null, null,
33 'return 10;'),
34 '}']);
36 // Adding other stuff doesn't.
37 assert.throws(function () {
38 node.add({});
39 });
40 assert.throws(function () {
41 node.add(function () {});
42 });
43 };
45 exports['test .prepend()'] = function (assert, util) {
46 var node = new SourceNode(null, null, null);
48 // Prepending a string works.
49 node.prepend('function noop() {}');
50 assert.equal(node.children[0], 'function noop() {}');
51 assert.equal(node.children.length, 1);
53 // Prepending another source node works.
54 node.prepend(new SourceNode(null, null, null));
55 assert.equal(node.children[0], '');
56 assert.equal(node.children[1], 'function noop() {}');
57 assert.equal(node.children.length, 2);
59 // Prepending an array works.
60 node.prepend(['function foo() {',
61 new SourceNode(null, null, null,
62 'return 10;'),
63 '}']);
64 assert.equal(node.children[0], 'function foo() {');
65 assert.equal(node.children[1], 'return 10;');
66 assert.equal(node.children[2], '}');
67 assert.equal(node.children[3], '');
68 assert.equal(node.children[4], 'function noop() {}');
69 assert.equal(node.children.length, 5);
71 // Prepending other stuff doesn't.
72 assert.throws(function () {
73 node.prepend({});
74 });
75 assert.throws(function () {
76 node.prepend(function () {});
77 });
78 };
80 exports['test .toString()'] = function (assert, util) {
81 assert.equal((new SourceNode(null, null, null,
82 ['function foo() {',
83 new SourceNode(null, null, null, 'return 10;'),
84 '}'])).toString(),
85 'function foo() {return 10;}');
86 };
88 exports['test .join()'] = function (assert, util) {
89 assert.equal((new SourceNode(null, null, null,
90 ['a', 'b', 'c', 'd'])).join(', ').toString(),
91 'a, b, c, d');
92 };
94 exports['test .walk()'] = function (assert, util) {
95 var node = new SourceNode(null, null, null,
96 ['(function () {\n',
97 ' ', new SourceNode(1, 0, 'a.js', ['someCall()']), ';\n',
98 ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n',
99 '}());']);
100 var expected = [
101 { str: '(function () {\n', source: null, line: null, column: null },
102 { str: ' ', source: null, line: null, column: null },
103 { str: 'someCall()', source: 'a.js', line: 1, column: 0 },
104 { str: ';\n', source: null, line: null, column: null },
105 { str: ' ', source: null, line: null, column: null },
106 { str: 'if (foo) bar()', source: 'b.js', line: 2, column: 0 },
107 { str: ';\n', source: null, line: null, column: null },
108 { str: '}());', source: null, line: null, column: null },
109 ];
110 var i = 0;
111 node.walk(function (chunk, loc) {
112 assert.equal(expected[i].str, chunk);
113 assert.equal(expected[i].source, loc.source);
114 assert.equal(expected[i].line, loc.line);
115 assert.equal(expected[i].column, loc.column);
116 i++;
117 });
118 };
120 exports['test .replaceRight'] = function (assert, util) {
121 var node;
123 // Not nested
124 node = new SourceNode(null, null, null, 'hello world');
125 node.replaceRight(/world/, 'universe');
126 assert.equal(node.toString(), 'hello universe');
128 // Nested
129 node = new SourceNode(null, null, null,
130 [new SourceNode(null, null, null, 'hey sexy mama, '),
131 new SourceNode(null, null, null, 'want to kill all humans?')]);
132 node.replaceRight(/kill all humans/, 'watch Futurama');
133 assert.equal(node.toString(), 'hey sexy mama, want to watch Futurama?');
134 };
136 exports['test .toStringWithSourceMap()'] = function (assert, util) {
137 var node = new SourceNode(null, null, null,
138 ['(function () {\n',
139 ' ',
140 new SourceNode(1, 0, 'a.js', 'someCall', 'originalCall'),
141 new SourceNode(1, 8, 'a.js', '()'),
142 ';\n',
143 ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n',
144 '}());']);
145 var map = node.toStringWithSourceMap({
146 file: 'foo.js'
147 }).map;
149 assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
150 map = new SourceMapConsumer(map.toString());
152 var actual;
154 actual = map.originalPositionFor({
155 line: 1,
156 column: 4
157 });
158 assert.equal(actual.source, null);
159 assert.equal(actual.line, null);
160 assert.equal(actual.column, null);
162 actual = map.originalPositionFor({
163 line: 2,
164 column: 2
165 });
166 assert.equal(actual.source, 'a.js');
167 assert.equal(actual.line, 1);
168 assert.equal(actual.column, 0);
169 assert.equal(actual.name, 'originalCall');
171 actual = map.originalPositionFor({
172 line: 3,
173 column: 2
174 });
175 assert.equal(actual.source, 'b.js');
176 assert.equal(actual.line, 2);
177 assert.equal(actual.column, 0);
179 actual = map.originalPositionFor({
180 line: 3,
181 column: 16
182 });
183 assert.equal(actual.source, null);
184 assert.equal(actual.line, null);
185 assert.equal(actual.column, null);
187 actual = map.originalPositionFor({
188 line: 4,
189 column: 2
190 });
191 assert.equal(actual.source, null);
192 assert.equal(actual.line, null);
193 assert.equal(actual.column, null);
194 };
196 exports['test .fromStringWithSourceMap()'] = function (assert, util) {
197 var node = SourceNode.fromStringWithSourceMap(
198 util.testGeneratedCode,
199 new SourceMapConsumer(util.testMap));
201 var result = node.toStringWithSourceMap({
202 file: 'min.js'
203 });
204 var map = result.map;
205 var code = result.code;
207 assert.equal(code, util.testGeneratedCode);
208 assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
209 map = map.toJSON();
210 assert.equal(map.version, util.testMap.version);
211 assert.equal(map.file, util.testMap.file);
212 assert.equal(map.mappings, util.testMap.mappings);
213 };
215 exports['test .fromStringWithSourceMap() empty map'] = function (assert, util) {
216 var node = SourceNode.fromStringWithSourceMap(
217 util.testGeneratedCode,
218 new SourceMapConsumer(util.emptyMap));
219 var result = node.toStringWithSourceMap({
220 file: 'min.js'
221 });
222 var map = result.map;
223 var code = result.code;
225 assert.equal(code, util.testGeneratedCode);
226 assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
227 map = map.toJSON();
228 assert.equal(map.version, util.emptyMap.version);
229 assert.equal(map.file, util.emptyMap.file);
230 assert.equal(map.mappings.length, util.emptyMap.mappings.length);
231 assert.equal(map.mappings, util.emptyMap.mappings);
232 };
234 exports['test .fromStringWithSourceMap() complex version'] = function (assert, util) {
235 var input = new SourceNode(null, null, null, [
236 "(function() {\n",
237 " var Test = {};\n",
238 " ", new SourceNode(1, 0, "a.js", "Test.A = { value: 1234 };\n"),
239 " ", new SourceNode(2, 0, "a.js", "Test.A.x = 'xyz';"), "\n",
240 "}());\n",
241 "/* Generated Source */"]);
242 input = input.toStringWithSourceMap({
243 file: 'foo.js'
244 });
246 var node = SourceNode.fromStringWithSourceMap(
247 input.code,
248 new SourceMapConsumer(input.map.toString()));
250 var result = node.toStringWithSourceMap({
251 file: 'foo.js'
252 });
253 var map = result.map;
254 var code = result.code;
256 assert.equal(code, input.code);
257 assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
258 map = map.toJSON();
259 var inputMap = input.map.toJSON();
260 util.assertEqualMaps(assert, map, inputMap);
261 };
263 exports['test .fromStringWithSourceMap() merging duplicate mappings'] = function (assert, util) {
264 var input = new SourceNode(null, null, null, [
265 new SourceNode(1, 0, "a.js", "(function"),
266 new SourceNode(1, 0, "a.js", "() {\n"),
267 " ",
268 new SourceNode(1, 0, "a.js", "var Test = "),
269 new SourceNode(1, 0, "b.js", "{};\n"),
270 new SourceNode(2, 0, "b.js", "Test"),
271 new SourceNode(2, 0, "b.js", ".A", "A"),
272 new SourceNode(2, 20, "b.js", " = { value: 1234 };\n", "A"),
273 "}());\n",
274 "/* Generated Source */"
275 ]);
276 input = input.toStringWithSourceMap({
277 file: 'foo.js'
278 });
280 var correctMap = new SourceMapGenerator({
281 file: 'foo.js'
282 });
283 correctMap.addMapping({
284 generated: { line: 1, column: 0 },
285 source: 'a.js',
286 original: { line: 1, column: 0 }
287 });
288 correctMap.addMapping({
289 generated: { line: 2, column: 0 }
290 });
291 correctMap.addMapping({
292 generated: { line: 2, column: 2 },
293 source: 'a.js',
294 original: { line: 1, column: 0 }
295 });
296 correctMap.addMapping({
297 generated: { line: 2, column: 13 },
298 source: 'b.js',
299 original: { line: 1, column: 0 }
300 });
301 correctMap.addMapping({
302 generated: { line: 3, column: 0 },
303 source: 'b.js',
304 original: { line: 2, column: 0 }
305 });
306 correctMap.addMapping({
307 generated: { line: 3, column: 4 },
308 source: 'b.js',
309 name: 'A',
310 original: { line: 2, column: 0 }
311 });
312 correctMap.addMapping({
313 generated: { line: 3, column: 6 },
314 source: 'b.js',
315 name: 'A',
316 original: { line: 2, column: 20 }
317 });
318 correctMap.addMapping({
319 generated: { line: 4, column: 0 }
320 });
322 var inputMap = input.map.toJSON();
323 correctMap = correctMap.toJSON();
324 util.assertEqualMaps(assert, correctMap, inputMap);
325 };
327 exports['test setSourceContent with toStringWithSourceMap'] = function (assert, util) {
328 var aNode = new SourceNode(1, 1, 'a.js', 'a');
329 aNode.setSourceContent('a.js', 'someContent');
330 var node = new SourceNode(null, null, null,
331 ['(function () {\n',
332 ' ', aNode,
333 ' ', new SourceNode(1, 1, 'b.js', 'b'),
334 '}());']);
335 node.setSourceContent('b.js', 'otherContent');
336 var map = node.toStringWithSourceMap({
337 file: 'foo.js'
338 }).map;
340 assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator');
341 map = new SourceMapConsumer(map.toString());
343 assert.equal(map.sources.length, 2);
344 assert.equal(map.sources[0], 'a.js');
345 assert.equal(map.sources[1], 'b.js');
346 assert.equal(map.sourcesContent.length, 2);
347 assert.equal(map.sourcesContent[0], 'someContent');
348 assert.equal(map.sourcesContent[1], 'otherContent');
349 };
351 exports['test walkSourceContents'] = function (assert, util) {
352 var aNode = new SourceNode(1, 1, 'a.js', 'a');
353 aNode.setSourceContent('a.js', 'someContent');
354 var node = new SourceNode(null, null, null,
355 ['(function () {\n',
356 ' ', aNode,
357 ' ', new SourceNode(1, 1, 'b.js', 'b'),
358 '}());']);
359 node.setSourceContent('b.js', 'otherContent');
360 var results = [];
361 node.walkSourceContents(function (sourceFile, sourceContent) {
362 results.push([sourceFile, sourceContent]);
363 });
364 assert.equal(results.length, 2);
365 assert.equal(results[0][0], 'a.js');
366 assert.equal(results[0][1], 'someContent');
367 assert.equal(results[1][0], 'b.js');
368 assert.equal(results[1][1], 'otherContent');
369 };
370 });
371 function run_test() {
372 runSourceMapTests('test/source-map/test-source-node', do_throw);
373 }