Skip to content

Commit 6f09056

Browse files
sigmundchCommit Queue
authored andcommitted
[test_runner] include error stack in window.onerror if available.
According to the [Window.onerror MDN docs][1] an error object may be provided as a 5th argument. This error object can be used to extract a stack trace with more context about the error message. [1]: https://developer.mozilla.org/en-US/docs/Web/API/Window/error_event With this change, we can get a more precise error on uncuaght exceptions. This is an example of a before and after on a unit test failing in ddc-chrome-linux. Before: ``` Runtime window.onerror: window.onerror called: http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:5082: Uncaught Error ``` After: ``` Runtime window.onerror: window.onerror called: http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:5082: Uncaught Error Error: Expected a value of type 'FutureOr<FileSystem>?', but got one of type 'LegacyJavaScriptObject' at Object.throw_ [as throw] (http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:5082:11) at Object.castError (http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:5041:15) at Object.cast [as as] (http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:5385:19) at dart.NullableType.new.as (http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:7243:60) at _AsyncCompleter.new.complete (http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:31216:28) at http://127.0.0.1:46235/root_build/gen/utils/ddc/stable/sdk/amd/dart_sdk.js:99073:19 ``` Change-Id: If89c253d8e6edee9b7102269466b40b605951a6c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/328804 Reviewed-by: Nicholas Shahan <[email protected]> Commit-Queue: Sigmund Cherem <[email protected]>
1 parent efc62a8 commit 6f09056

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

pkg/test_runner/lib/src/browser_controller.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,12 +1388,15 @@ body div {
13881388
test_completed = false;
13891389
}
13901390
1391-
window.onerror = function (message, url, lineNumber) {
1391+
window.onerror = function (message, url, lineNumber, columnNumber, err) {
1392+
// Ensure the stack is included in the reported error, if available.
1393+
if (err && err.stack) {
1394+
message = message + '\\n' + err.stack;
1395+
}
13921396
if (url) {
1393-
reportError(url + ':' + lineNumber + ':' + message);
1394-
} else {
1395-
reportError(message);
1397+
message = url + ':' + lineNumber + ':' + columnNumber + ':' + message;
13961398
}
1399+
reportError(message);
13971400
}
13981401
13991402
function reportError(msg) {

pkg/test_runner/lib/src/test_controller.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,14 @@ var hadTopLevelError = false;
9393

9494
// Set window onerror to make sure that we catch test harness errors across all
9595
// browsers.
96-
window.onerror = function (message, url, lineNumber) {
96+
window.onerror = function (message, url, lineNumber, columnNumber, err) {
97+
// Ensure the stack is included in the reported error, if available.
98+
if (err && err.stack) {
99+
message = message + '\n' + err.stack;
100+
}
97101
if (url) {
98102
message = ('window.onerror called: \n\n' +
99-
url + ':' + lineNumber + ':\n' + message + '\n\n');
103+
url + ':' + lineNumber + ':' + columnNumber + ':\n' + message + '\n\n');
100104
}
101105
if (testExpectsGlobalError) {
102106
testSuppressedGlobalErrors.push({

0 commit comments

Comments
 (0)