Skip to content
Snippets Groups Projects
Commit ef45786a authored by David Fugate's avatar David Fugate
Browse files

A major web browser does not fire window.onerror for iframes when the iframe's document

contains a JavaScript syntax error (major test area).  Added a workaround.
parent b0554239
Branches
No related tags found
No related merge requests found
...@@ -91,7 +91,7 @@ function BrowserRunner() { ...@@ -91,7 +91,7 @@ function BrowserRunner() {
// Set up some globals. // Set up some globals.
win.testRun = testRun; win.testRun = testRun;
win.testFinished = testFinished; win.testFinished = testFinished;
win.iframeError = undefined;
//TODO: these should be moved to sta.js //TODO: these should be moved to sta.js
win.SputnikError = SputnikError; win.SputnikError = SputnikError;
win.$ERROR = $ERROR; win.$ERROR = $ERROR;
...@@ -125,16 +125,23 @@ function BrowserRunner() { ...@@ -125,16 +125,23 @@ function BrowserRunner() {
//--Scenario 1: we're dealing with a global scope test case //--Scenario 1: we're dealing with a global scope test case
if (GlobalScopeTests[id]!==undefined) { if (GlobalScopeTests[id]!==undefined) {
win.iframeError = undefined;
win.onerror = undefined;
win.onErrorHack = undefined;
var testDescrip = GlobalScopeTests[id]; var testDescrip = GlobalScopeTests[id];
//Add an error handler //Add an error handler
doc.writeln("<script type='text/javascript'>window.onerror = function(errorMsg, url, lineNumber) {window.iframeError = errorMsg;};" + "</script>"); doc.writeln("<script type='text/javascript'>window.onerror = function(errorMsg, url, lineNumber) {window.iframeError = errorMsg;};" + "</script>");
//Parse and execute the code //Parse and execute the code
doc.writeln("<script type='text/javascript'>try{" + code + "}catch(test262RuntimeError){window.iframeError=test262RuntimeError.message || \"None\";}</script>"); doc.writeln("<script type='text/javascript'>onErrorHack = true;try{" + code + "}catch(test262RuntimeError){window.iframeError=test262RuntimeError.message || \"None\";}</script>");
//validation //validation
if (testDescrip.negative!==undefined) { //An exception is expected if (testDescrip.negative!==undefined) { //An exception is expected
if (win.iframeError===undefined) { //no exception was thrown if (win.onErrorHack===undefined) { //Hack for browsers not supporting window.onerror WRT early parse errors
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
'pass', 'Not parsable');
}
else if (win.iframeError===undefined) { //no exception was thrown
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '', testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
'fail', 'No Exception Thrown'); 'fail', 'No Exception Thrown');
} else if(! (new RegExp(testDescrip.negative, "i").test(win.iframeError))) { //wrong type of exception thrown } else if(! (new RegExp(testDescrip.negative, "i").test(win.iframeError))) { //wrong type of exception thrown
...@@ -150,7 +157,7 @@ function BrowserRunner() { ...@@ -150,7 +157,7 @@ function BrowserRunner() {
} else { } else {
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '', testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
'pass', undefined); 'pass', undefined);
} }
} }
//--Scenario 2: we're dealing with a normal positive(?) test case //--Scenario 2: we're dealing with a normal positive(?) test case
else { else {
......
...@@ -91,7 +91,7 @@ function BrowserRunner() { ...@@ -91,7 +91,7 @@ function BrowserRunner() {
// Set up some globals. // Set up some globals.
win.testRun = testRun; win.testRun = testRun;
win.testFinished = testFinished; win.testFinished = testFinished;
win.iframeError = undefined;
//TODO: these should be moved to sta.js //TODO: these should be moved to sta.js
win.SputnikError = SputnikError; win.SputnikError = SputnikError;
win.$ERROR = $ERROR; win.$ERROR = $ERROR;
...@@ -125,16 +125,23 @@ function BrowserRunner() { ...@@ -125,16 +125,23 @@ function BrowserRunner() {
//--Scenario 1: we're dealing with a global scope test case //--Scenario 1: we're dealing with a global scope test case
if (GlobalScopeTests[id]!==undefined) { if (GlobalScopeTests[id]!==undefined) {
win.iframeError = undefined;
win.onerror = undefined;
win.onErrorHack = undefined;
var testDescrip = GlobalScopeTests[id]; var testDescrip = GlobalScopeTests[id];
//Add an error handler //Add an error handler
doc.writeln("<script type='text/javascript'>window.onerror = function(errorMsg, url, lineNumber) {window.iframeError = errorMsg;};" + "</script>"); doc.writeln("<script type='text/javascript'>window.onerror = function(errorMsg, url, lineNumber) {window.iframeError = errorMsg;};" + "</script>");
//Parse and execute the code //Parse and execute the code
doc.writeln("<script type='text/javascript'>try{" + code + "}catch(test262RuntimeError){window.iframeError=test262RuntimeError.message || \"None\";}</script>"); doc.writeln("<script type='text/javascript'>onErrorHack = true;try{" + code + "}catch(test262RuntimeError){window.iframeError=test262RuntimeError.message || \"None\";}</script>");
//validation //validation
if (testDescrip.negative!==undefined) { //An exception is expected if (testDescrip.negative!==undefined) { //An exception is expected
if (win.iframeError===undefined) { //no exception was thrown if (win.onErrorHack===undefined) { //Hack for browsers not supporting window.onerror WRT early parse errors
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
'pass', 'Not parsable');
}
else if (win.iframeError===undefined) { //no exception was thrown
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '', testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
'fail', 'No Exception Thrown'); 'fail', 'No Exception Thrown');
} else if(! (new RegExp(testDescrip.negative, "i").test(win.iframeError))) { //wrong type of exception thrown } else if(! (new RegExp(testDescrip.negative, "i").test(win.iframeError))) { //wrong type of exception thrown
...@@ -150,7 +157,7 @@ function BrowserRunner() { ...@@ -150,7 +157,7 @@ function BrowserRunner() {
} else { } else {
testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '', testRun(testDescrip.id, testDescrip.path, testDescrip.description, code, typeof testDescrip.precondition !== 'undefined' ? testDescrip.precondition.toString() : '',
'pass', undefined); 'pass', undefined);
} }
} }
//--Scenario 2: we're dealing with a normal positive(?) test case //--Scenario 2: we're dealing with a normal positive(?) test case
else { else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment