Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions test/utils.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,11 @@ describe('utils', function() {
it('should work as advertised', function() {
assert.isTrue(isError(new Error()));
assert.isTrue(isError(new ReferenceError()));

if (supportsErrorEvent()) {
assert.isFalse(isError(new ErrorEvent('')));
}

assert.isTrue(isError(new RavenConfigError()));
assert.isTrue(isError(testErrorFromDifferentContext(fromContext)));
assert.isTrue(isError(testErrorFromDifferentContext(domException)));
Expand Down
31 changes: 30 additions & 1 deletion test/vendor/tracekit.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
'use strict';

var TraceKit = require('../../vendor/TraceKit/tracekit');
var utils = require('../../src/utils');
var supportsErrorEvent = utils.supportsErrorEvent;

describe('TraceKit', function() {
describe('stacktrace info', function() {
Expand Down Expand Up @@ -139,9 +141,35 @@ describe('TraceKit', function() {
}
});

if (supportsErrorEvent()) {
it("should handle error event object as 'ex' param", function() {
var ex = new ErrorEvent('', {
error: new Error('something went wrong')
});
subscriptionHandler = function(stackInfo, extra) {
assert.equal(stackInfo.name, 'Error');
assert.equal(stackInfo.message, 'something went wrong');
};
TraceKit.report.subscribe(subscriptionHandler);
window.onerror(undefined, undefined, testLineNo, undefined, ex);
});

it("should handle error event object as 'message' param", function() {
var message = new ErrorEvent('', {
message: 'something went wrong'
});
subscriptionHandler = function(stackInfo, extra) {
assert.equal(stackInfo.name, undefined);
assert.equal(stackInfo.message, 'something went wrong');
};
TraceKit.report.subscribe(subscriptionHandler);
window.onerror(message, undefined, testLineNo, undefined, undefined);
});
}

describe('with undefined arguments', function() {
it('should pass undefined:undefined', function() {
// this is probably not good behavior; just writing this test to verify
// this is probably not good behavior; just writing this test to verify
// that it doesn't change unintentionally
subscriptionHandler = function(stackInfo, extra) {
assert.equal(stackInfo.name, undefined);
Expand All @@ -151,6 +179,7 @@ describe('TraceKit', function() {
window.onerror(undefined, undefined, testLineNo);
});
});

describe('when no 5th argument (error object)', function() {
it('should seperate name, message for default error types (e.g. ReferenceError)', function(
done
Expand Down
6 changes: 6 additions & 0 deletions vendor/TraceKit/tracekit.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,11 @@ TraceKit.report = (function reportModuleWrapper() {
function traceKitWindowOnError(message, url, lineNo, colNo, ex) {
var stack = null;

// If 'ex' is ErrorEvent, get real Error from inside
if (utils.isErrorEvent(ex)) ex = ex.error;
// If 'message' is ErrorEvent, get real message from inside
if (utils.isErrorEvent(message)) message = message.message;

if (lastExceptionStack) {
TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
lastExceptionStack,
Expand All @@ -174,6 +179,7 @@ TraceKit.report = (function reportModuleWrapper() {
var name = undefined;
var msg = message; // must be new var or will modify original `arguments`
var groups;

if ({}.toString.call(message) === '[object String]') {
var groups = message.match(ERROR_TYPES_RE);
if (groups) {
Expand Down