diff --git a/pkg/test_runner/lib/src/browser_controller.dart b/pkg/test_runner/lib/src/browser_controller.dart index 4c3ab8bd29c..b0e400cdf29 100644 --- a/pkg/test_runner/lib/src/browser_controller.dart +++ b/pkg/test_runner/lib/src/browser_controller.dart @@ -1388,12 +1388,15 @@ body div { test_completed = false; } - window.onerror = function (message, url, lineNumber) { - if (url) { - reportError(url + ':' + lineNumber + ':' + message); - } else { - reportError(message); + window.onerror = function (message, url, lineNumber, columnNumber, err) { + // Ensure the stack is included in the reported error, if available. + if (err && err.stack) { + message = message + '\\n' + err.stack; } + if (url) { + message = url + ':' + lineNumber + ':' + columnNumber + ':' + message; + } + reportError(message); } function reportError(msg) { diff --git a/pkg/test_runner/lib/src/test_controller.js b/pkg/test_runner/lib/src/test_controller.js index e7523427904..caaf894b3b4 100644 --- a/pkg/test_runner/lib/src/test_controller.js +++ b/pkg/test_runner/lib/src/test_controller.js @@ -93,10 +93,14 @@ var hadTopLevelError = false; // Set window onerror to make sure that we catch test harness errors across all // browsers. -window.onerror = function (message, url, lineNumber) { +window.onerror = function (message, url, lineNumber, columnNumber, err) { + // Ensure the stack is included in the reported error, if available. + if (err && err.stack) { + message = message + '\n' + err.stack; + } if (url) { message = ('window.onerror called: \n\n' + - url + ':' + lineNumber + ':\n' + message + '\n\n'); + url + ':' + lineNumber + ':' + columnNumber + ':\n' + message + '\n\n'); } if (testExpectsGlobalError) { testSuppressedGlobalErrors.push({