aboutsummaryrefslogtreecommitdiffstats
path: root/website
diff options
context:
space:
mode:
authorDavid Fugate <dfugate@microsoft.com>2011-11-11 11:40:05 -0800
committerDavid Fugate <dfugate@microsoft.com>2011-11-11 11:40:05 -0800
commit5df3134fac0ab0ebb385f08722885881e21a27c2 (patch)
treed0fcc88b87b21e4d1b673a998b7b78dfc9edbd28 /website
parent5a935ed229102851707f09b15cf959f03d2a0e9f (diff)
Fixed https://bugs.ecmascript.org/show_bug.cgi?id=207.
Diffstat (limited to 'website')
-rw-r--r--website/harness/sth.js43
1 files changed, 42 insertions, 1 deletions
diff --git a/website/harness/sth.js b/website/harness/sth.js
index 491eeedf5..48222d071 100644
--- a/website/harness/sth.js
+++ b/website/harness/sth.js
@@ -99,6 +99,45 @@ function BrowserRunner() {
/* Run the test. */
this.run = function (test, code) {
+
+ //--Detect proper window.onerror support
+ if (instance.supportsWindowOnerror===undefined) {
+ var iframePrereqs = document.createElement("iframe");
+ iframePrereqs.setAttribute("id", "prereqsIframe");
+ if (!/firefox/i.test(navigator.userAgent)) {
+ iframePrereqs.setAttribute("style", "display:none");
+ }
+ document.body.appendChild(iframePrereqs);
+
+ var iwinPrereqs = iframePrereqs.contentWindow;
+ var idocPrereqs = iwinPrereqs.document;
+ idocPrereqs.open();
+
+ iwinPrereqs.failCount = 0;
+
+ var stuff = [
+ "window.onerror = function(a, b, c) { this.failCount++; }",
+ "va xyz =",
+ "throw Error();"
+ ];
+
+ for(var i in stuff) {
+ idocPrereqs.writeln("<script type='text/javascript'>");
+ idocPrereqs.writeln(stuff[i]);
+ idocPrereqs.writeln("</script>");
+ }
+ idocPrereqs.close();
+
+ //TODO - 500ms *should* be a sufficient delay
+ setTimeout(function() {
+ instance.supportsWindowOnerror = iwinPrereqs.failCount === 2;
+ //alert(iwinPrereqs.failCount);
+ document.body.removeChild(iframePrereqs);
+ instance.run(test, code);
+ }, 500);
+ return;
+ }
+
currentTest = {};
for (var tempIndex in test) {
if (test.hasOwnProperty(tempIndex)) {
@@ -106,6 +145,8 @@ function BrowserRunner() {
}
}
currentTest.code = code;
+
+
iframe = document.createElement("iframe");
iframe.setAttribute("id", "runnerIframe");
@@ -167,7 +208,7 @@ function BrowserRunner() {
//Run the code
idoc.writeln("<script type='text/javascript'>");
- if (/opera/i.test(navigator.userAgent)) { //Opera doesn't support window.onerror
+ if (! instance.supportsWindowOnerror) {
idoc.writeln("try {eval(\"" + this.convertForEval(code) + "\");} catch(e) {window.onerror(e.toString(), null, null);}");
} else {
idoc.writeln(code);