Browse Source

Merge pull request #262 from novemberborn/source-map-pragma

Support source map pragmas for stack traces
babel-plugin-for-integration-tests
Sindre Sorhus 9 years ago
parent
commit
fb98d5dcff
  1. 5
      lib/babel.js
  2. 22
      test/cli.js
  3. 13
      test/fixture/source-map-exception.js
  4. 6
      test/fixture/source-map-pragma-exception.js
  5. 25
      test/fixture/source-with-source-map-pragma.js
  6. 1
      test/fixture/source-with-source-map-pragma.map
  7. 12
      test/fixture/uncaught-exception.js

5
lib/babel.js

@ -1,7 +1,8 @@
'use strict';
var sourceMapCache = Object.create(null);
require('source-map-support').install({
var sourceMapSupport = require('source-map-support');
sourceMapSupport.install({
retrieveSourceMap: function (source) {
if (sourceMapCache[source]) {
return {
@ -9,7 +10,7 @@ require('source-map-support').install({
map: sourceMapCache[source]
};
}
return null;
return sourceMapSupport.retrieveSourceMap(source);
}
});

22
test/cli.js

@ -166,8 +166,6 @@ test('uncaught exception will be reported to console', function (t) {
execCli('fixture/uncaught-exception.js', function (err, stdout, stderr) {
t.ok(err);
t.true(/Can't catch me!/.test(stderr));
t.match(stderr, /^.*?at.*?bar\b.*uncaught-exception.js:12.*$/m);
t.match(stderr, /^.*?at.*?foo\b.*uncaught-exception.js:8.*$/m);
// TODO(jamestalmage): This should get printed, but we reject the promise (ending all tests) instead of just ending that one test and reporting.
// t.ok(/1 uncaught exception[^s]/.test(stdout));
t.end();
@ -194,6 +192,26 @@ test('throwing a anonymous function will report the function to the console', fu
});
});
test('stack traces for exceptions are corrected using a source map', function (t) {
execCli('fixture/source-map-exception.js', function (err, stdout, stderr) {
t.ok(err);
t.true(/Can't catch me!/.test(stderr));
t.match(stderr, /^.*?at.*?bar\b.*source-map-exception.js:12.*$/m);
t.match(stderr, /^.*?at.*?foo\b.*source-map-exception.js:8.*$/m);
t.end();
});
});
test('stack traces for exceptions are corrected using a source map, found via a pragma', function (t) {
execCli('fixture/source-map-pragma-exception.js', function (err, stdout, stderr) {
t.ok(err);
t.true(/Can't catch me!/.test(stderr));
t.match(stderr, /^.*?at.*?bar\b.*source-with-source-map-pragma.js:8.*$/m);
t.match(stderr, /^.*?at.*?foo\b.*source-with-source-map-pragma.js:4.*$/m);
t.end();
});
});
test('absolute paths in CLI', function (t) {
t.plan(2);

13
test/fixture/source-map-exception.js

@ -0,0 +1,13 @@
const test = require('../../');
test('throw an uncaught exception', t => {
setImmediate(foo);
});
function foo() {
bar();
}
function bar() {
throw new Error(`Can't catch me!`)
}

6
test/fixture/source-map-pragma-exception.js

@ -0,0 +1,6 @@
const test = require('../../');
const foo = require('./source-with-source-map-pragma');
test('throw an uncaught exception', t => {
setImmediate(foo);
});

25
test/fixture/source-with-source-map-pragma.js

@ -0,0 +1,25 @@
"use strict";
module.exports = foo;
function foo() {
bar();
}
function bar() {
throw new Error("Can't catch me!");
}
//# sourceMappingURL=./source-with-source-map-pragma.map
/* original source:
module.exports = foo
function foo() {
bar()
}
function bar() {
throw new Error(`Can't catch me!`)
}
*/

1
test/fixture/source-with-source-map-pragma.map

@ -0,0 +1 @@
{"version":3,"sources":["test/fixture/source-with-source-map-pragma.js"],"names":[],"mappings":";;AAAA,MAAM,CAAC,OAAO,GAAG,GAAG,CAAA;;AAEpB,SAAS,GAAG,GAAG;AACd,IAAG,EAAE,CAAA;CACL;;AAED,SAAS,GAAG,GAAG;AACd,OAAM,IAAI,KAAK,mBAAmB,CAAA;CAClC","file":"test/fixture/source-with-source-map-pragma.js","sourcesContent":["module.exports = foo\n\nfunction foo() {\n\tbar()\n}\n\nfunction bar() {\n\tthrow new Error(`Can't catch me!`)\n}\n"]}

12
test/fixture/uncaught-exception.js

@ -1,13 +1,7 @@
const test = require('../../');
test('throw an uncaught exception', t => {
setImmediate(foo);
setImmediate(() => {
throw new Error(`Can't catch me!`)
});
});
function foo() {
bar();
}
function bar() {
throw new Error(`Can't catch me!`)
}

Loading…
Cancel
Save