diff options
Diffstat (limited to '')
21 files changed, 1417 insertions, 0 deletions
diff --git a/js/src/tests/non262/Exceptions/browser.js b/js/src/tests/non262/Exceptions/browser.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/non262/Exceptions/browser.js diff --git a/js/src/tests/non262/Exceptions/catchguard-002-n.js b/js/src/tests/non262/Exceptions/catchguard-002-n.js new file mode 100644 index 0000000000..fa574389db --- /dev/null +++ b/js/src/tests/non262/Exceptions/catchguard-002-n.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "var in catch clause should have caused an error."; + +var expect; +var actual; + +test(); + +function test() +{ + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard var declaration negative test."); + + try + { + throw EXCEPTION_DATA; + } + catch (var e) + { + actual = e + ''; + } + + reportCompare(expect, actual, DESCRIPTION); +} diff --git a/js/src/tests/non262/Exceptions/catchguard-003-n.js b/js/src/tests/non262/Exceptions/catchguard-003-n.js new file mode 100644 index 0000000000..a45b56adca --- /dev/null +++ b/js/src/tests/non262/Exceptions/catchguard-003-n.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "Illegally constructed catchguard should have thrown an exception."; + +var expect; +var actual; + +test(); + +function test() +{ + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard syntax negative test #2."); + + try + { + throw EXCEPTION_DATA; + } + catch (e) + { + actual = e + ': 1'; + } + catch (e) /* two non-guarded catch statements should generate an error */ + { + actual = e + ': 2'; + } + + reportCompare(expect, actual, DESCRIPTION); +} diff --git a/js/src/tests/non262/Exceptions/error-expando-reconfigure.js b/js/src/tests/non262/Exceptions/error-expando-reconfigure.js new file mode 100644 index 0000000000..c70ff5f853 --- /dev/null +++ b/js/src/tests/non262/Exceptions/error-expando-reconfigure.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "error-expando-reconfigure.js" +//----------------------------------------------------------------------------- +var BUGNUMBER = 961494; +var summary = + "Reconfiguring the first expando property added to an Error object " + + "shouldn't assert"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var err = new Error(); // no message argument => no err.message property +err.expando = 17; +Object.defineProperty(err, "expando", { configurable: false }); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/js/src/tests/non262/Exceptions/error-property-enumerability.js b/js/src/tests/non262/Exceptions/error-property-enumerability.js new file mode 100644 index 0000000000..c6674cfc57 --- /dev/null +++ b/js/src/tests/non262/Exceptions/error-property-enumerability.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var errors = ["Error", "EvalError", "RangeError", "ReferenceError", + "SyntaxError", "TypeError", "URIError"]; + +for (var i = 0; i < errors.length; i++) { + var error = this[errors[i]]; + + var desc = Object.getOwnPropertyDescriptor(error.prototype, "name"); + assertEq(!!desc, true, errors[i] + ".prototype.name should exist"); + assertEq((desc || {}).enumerable, false, errors[i] + ".prototype.name should not be enumerable"); + + desc = Object.getOwnPropertyDescriptor(error.prototype, "message"); + assertEq(!!desc, true, errors[i] + ".prototype.message should exist"); + assertEq((desc || {}).enumerable, false, errors[i] + ".prototype.message should not be enumerable"); + + var instance = new error; + desc = Object.getOwnPropertyDescriptor(instance, "message"); + assertEq(!!desc, false, "new " + errors[i] + ".message should not exist"); + + instance = new error("a message"); + desc = Object.getOwnPropertyDescriptor(instance, "message"); + assertEq(!!desc, true, "new " + errors[i] + "(...).message should exist"); + assertEq((desc || {}).enumerable, false, "new " + errors[i] + "(...).message should not be enumerable"); +} + +reportCompare(true, true); diff --git a/js/src/tests/non262/Exceptions/errstack-001.js b/js/src/tests/non262/Exceptions/errstack-001.js new file mode 100644 index 0000000000..042e357fa6 --- /dev/null +++ b/js/src/tests/non262/Exceptions/errstack-001.js @@ -0,0 +1,242 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 28 Feb 2002 + * SUMMARY: Testing that Error.stack distinguishes between: + * + * A) top-level calls: myFunc(); + * B) no-name function calls: function() { myFunc();} () + * + * The stack frame for A) should begin with '@' + * The stack frame for B) should begin with '()' + * + * This behavior was coded by Brendan during his fix for bug 127136. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=127136#c13 + * + * Note: our function getStackFrames(err) orders the array of stack frames + * so that the 0th element will correspond to the highest frame, i.e. will + * correspond to a line in top-level code. The 1st element will correspond + * to the function that is called first, and so on... + * + * NOTE: At present Rhino does not have an Error.stack property. It is an + * ECMA extension, see http://bugzilla.mozilla.org/show_bug.cgi?id=123177 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing Error.stack'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var myErr = ''; +var stackFrames = ''; + + +function A(x,y) +{ + return B(x+1,y+1); +} + +function B(x,z) +{ + return C(x+1,z+1); +} + +function C(x,y) +{ + return D(x+1,y+1); +} + +function D(x,z) +{ + try + { + throw new Error('meep!'); + } + catch (e) + { + return e; + } +} + + +myErr = A(44,13); +stackFrames = getStackFrames(myErr); +status = inSection(1); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(2); +actual = stackFrames[1].substring(0,2); +expect = 'A@'; +addThis(); + +status = inSection(3); +actual = stackFrames[2].substring(0,2); +expect = 'B@'; +addThis(); + +status = inSection(4); +actual = stackFrames[3].substring(0,2); +expect = 'C@'; +addThis(); + +status = inSection(5); +actual = stackFrames[4].substring(0,2); +expect = 'D@'; +addThis(); + + + +myErr = A('44:foo','13:bar'); +stackFrames = getStackFrames(myErr); +status = inSection(6); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(7); +actual = stackFrames[1].substring(0,2); +expect = 'A@'; +addThis(); + +status = inSection(8); +actual = stackFrames[2].substring(0,2); +expect = 'B@'; +addThis(); + +status = inSection(9); +actual = stackFrames[3].substring(0,2); +expect = 'C@'; +addThis(); + +status = inSection(10); +actual = stackFrames[4].substring(0,2); +expect = 'D@';; +addThis(); + + + +/* + * Make the first frame occur in a function with an empty name - + */ +myErr = function() { return A(44,13); } (); +stackFrames = getStackFrames(myErr); +status = inSection(11); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(12); +actual = stackFrames[1].substring(0,7); +expect = 'myErr<@'; +addThis(); + +status = inSection(13); +actual = stackFrames[2].substring(0,2); +expect = 'A@'; +addThis(); + +// etc. for the rest of the frames as above + + + +/* + * Make the first frame occur in a function with name 'anonymous' - + */ +var f = Function('return A(44,13);'); +myErr = f(); +stackFrames = getStackFrames(myErr); +status = inSection(14); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(15); +actual = stackFrames[1].substring(0,10); +expect = 'anonymous@'; +addThis(); + +status = inSection(16); +actual = stackFrames[2].substring(0,2); +expect = 'A@'; +addThis(); + +// etc. for the rest of the frames as above + + + +/* + * Make a user-defined error via the Error() function - + */ +var message = 'Hi there!'; var fileName = 'file name'; var lineNumber = 0; +myErr = Error(message, fileName, lineNumber); +stackFrames = getStackFrames(myErr); +status = inSection(17); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + + +/* + * Now use the |new| keyword. Re-use the same params - + */ +myErr = new Error(message, fileName, lineNumber); +stackFrames = getStackFrames(myErr); +status = inSection(18); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Split the string |err.stack| along its '\n' delimiter. + * As of 2002-02-28 |err.stack| ends with the delimiter, so + * the resulting array has an empty string as its last element. + * + * Pop that useless element off before doing anything. + * Then reverse the array, for convenience of indexing - + */ +function getStackFrames(err) +{ + var arr = err.stack.split('\n'); + arr.pop(); + return arr.reverse(); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } +} diff --git a/js/src/tests/non262/Exceptions/regress-121658.js b/js/src/tests/non262/Exceptions/regress-121658.js new file mode 100644 index 0000000000..f2ab6e860f --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-121658.js @@ -0,0 +1,121 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 24 Jan 2002 + * SUMMARY: "Too much recursion" errors should be safely caught by try...catch + * See http://bugzilla.mozilla.org/show_bug.cgi?id=121658 + * + * In the cases below, we expect i>0. The bug was filed because we + * were getting i===0; i.e. |i| did not retain the value it had at the + * location of the error. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 121658; +var msg = '"Too much recursion" errors should be safely caught by try...catch'; +var TEST_PASSED = 'i retained the value it had at location of error'; +var TEST_FAILED = 'i did NOT retain this value'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var i; + + +function f() +{ + ++i; + + // try...catch should catch the "too much recursion" error to ensue + try + { + f(); + } + catch(e) + { + } +} + +i=0; +f(); +status = inSection(1); +actual = (i>0); +expect = true; +addThis(); + + + +// Now try in function scope - +function g() +{ + f(); +} + +i=0; +g(); +status = inSection(2); +actual = (i>0); +expect = true; +addThis(); + + + +// Now try in eval scope - +var sEval = 'function h(){++i; try{h();} catch(e){}}; i=0; h();'; +eval(sEval); +status = inSection(3); +actual = (i>0); +expect = true; +addThis(); + + + +// Try in eval scope and mix functions up - +sEval = 'function a(){++i; try{h();} catch(e){}}; i=0; a();'; +eval(sEval); +status = inSection(4); +actual = (i>0); +expect = true; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = formatThis(actual); + expectedvalues[UBound] = formatThis(expect); + UBound++; +} + + +function formatThis(bool) +{ + return bool? TEST_PASSED : TEST_FAILED; +} + + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus(msg); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } +} diff --git a/js/src/tests/non262/Exceptions/regress-123002.js b/js/src/tests/non262/Exceptions/regress-123002.js new file mode 100644 index 0000000000..1639e6c65c --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-123002.js @@ -0,0 +1,90 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 01 Feb 2002 + * SUMMARY: Testing Error.length + * See http://bugzilla.mozilla.org/show_bug.cgi?id=123002 + * + * NOTE: Error.length should equal the length of FormalParameterList of the + * Error constructor. This is currently 1 in Rhino, 3 in SpiderMonkey. + * + * The difference is due to http://bugzilla.mozilla.org/show_bug.cgi?id=50447. + * As a result of that bug, SpiderMonkey has extended ECMA to allow two new + * parameters to Error constructors: + * + * Rhino: new Error (message) + * SpiderMonkey: new Error (message, fileName, lineNumber) + * + * NOTE: since we have hard-coded the length expectations, this testcase will + * have to be changed if the Error FormalParameterList is ever changed again. + * + * To do this, just change the two LENGTH constants below - + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 123002; +var summary = 'Testing Error.length'; +var QUOTE = '"'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var LENGTH_EXPECTED = 1; + +/* + * The various NativeError objects; see ECMA-262 Edition 3, Section 15.11.6 + */ +var errObjects = [new Error(), new EvalError(), new RangeError(), + new ReferenceError(), new SyntaxError(), new TypeError(), new URIError()]; + + +for (var i in errObjects) +{ + var err = errObjects[i]; + status = inSection(quoteThis(err.name)); + actual = Error.length; + expect = LENGTH_EXPECTED; + addThis(); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } +} + + +function quoteThis(text) +{ + return QUOTE + text + QUOTE; +} diff --git a/js/src/tests/non262/Exceptions/regress-181654.js b/js/src/tests/non262/Exceptions/regress-181654.js new file mode 100644 index 0000000000..7ddc9b0217 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-181654.js @@ -0,0 +1,118 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 23 Nov 2002 + * SUMMARY: Calling toString for an object derived from the Error class + * results in an TypeError (Rhino only) + * See http://bugzilla.mozilla.org/show_bug.cgi?id=181654 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '181654'; +var summary = 'Calling toString for an object derived from the Error class should be possible.'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var EMPTY_STRING = ''; +var EXPECTED_FORMAT = 0; + + +// derive MyError from Error +function MyError( msg ) +{ + this.message = msg; +} +MyError.prototype = new Error(); +MyError.prototype.name = "MyError"; + + +status = inSection(1); +var err1 = new MyError('msg1'); +actual = examineThis(err1, 'msg1'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(2); +var err2 = new MyError(String(err1)); +actual = examineThis(err2, err1); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(3); +var err3 = new MyError(); +actual = examineThis(err3, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(4); +var err4 = new MyError(EMPTY_STRING); +actual = examineThis(err4, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +// now generate an error - +status = inSection(5); +try +{ + throw new MyError("thrown"); +} +catch(err5) +{ + actual = examineThis(err5, "thrown"); +} +expect = EXPECTED_FORMAT; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Searches err.toString() for err.name + ':' + err.message, + * with possible whitespace on each side of the colon sign. + * + * We allow for no colon in case err.message was not provided by the user. + * In such a case, SpiderMonkey and Rhino currently set err.message = '', + * as allowed for by ECMA 15.11.4.3. This makes |pattern| work in this case. + * + * If this is ever changed to a non-empty string, e.g. 'undefined', + * you may have to modify |pattern| to take that into account - + * + */ +function examineThis(err, msg) +{ + var pattern = err.name + '\\s*:?\\s*' + msg; + return err.toString().search(RegExp(pattern)); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } +} diff --git a/js/src/tests/non262/Exceptions/regress-181914.js b/js/src/tests/non262/Exceptions/regress-181914.js new file mode 100644 index 0000000000..5f153a3912 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-181914.js @@ -0,0 +1,157 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 25 Nov 2002 + * SUMMARY: Calling a user-defined superconstructor + * See http://bugzilla.mozilla.org/show_bug.cgi?id=181914, esp. Comment 10. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '181914'; +var summary = 'Calling a user-defined superconstructor'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var EMPTY_STRING = ''; +var EXPECTED_FORMAT = 0; + + +// make a user-defined version of the Error constructor +function _Error(msg) +{ + this.message = msg; +} +_Error.prototype = new Error(); +_Error.prototype.name = '_Error'; + + +// derive MyApplyError from _Error +function MyApplyError(msg) +{ + if(this instanceof MyApplyError) + _Error.apply(this, arguments); + else + return new MyApplyError(msg); +} +MyApplyError.prototype = new _Error(); +MyApplyError.prototype.name = "MyApplyError"; + + +// derive MyCallError from _Error +function MyCallError(msg) +{ + if(this instanceof MyCallError) + _Error.call(this, msg); + else + return new MyCallError(msg); +} +MyCallError.prototype = new _Error(); +MyCallError.prototype.name = "MyCallError"; + + +function otherScope(msg) +{ + return MyApplyError(msg); +} + + +status = inSection(1); +var err1 = new MyApplyError('msg1'); +actual = examineThis(err1, 'msg1'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(2); +var err2 = new MyCallError('msg2'); +actual = examineThis(err2, 'msg2'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(3); +var err3 = MyApplyError('msg3'); +actual = examineThis(err3, 'msg3'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(4); +var err4 = MyCallError('msg4'); +actual = examineThis(err4, 'msg4'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(5); +var err5 = otherScope('msg5'); +actual = examineThis(err5, 'msg5'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(6); +var err6 = otherScope(); +actual = examineThis(err6, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(7); +var err7 = eval("MyApplyError('msg7')"); +actual = examineThis(err7, 'msg7'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(8); +var err8; +try +{ + throw MyApplyError('msg8'); +} +catch(e) +{ + if(e instanceof Error) + err8 = e; +} +actual = examineThis(err8, 'msg8'); +expect = EXPECTED_FORMAT; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +// Searches |err.toString()| for |err.name + ':' + err.message| +function examineThis(err, msg) +{ + var pattern = err.name + '\\s*:?\\s*' + msg; + return err.toString().search(RegExp(pattern)); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } +} diff --git a/js/src/tests/non262/Exceptions/regress-257751.js b/js/src/tests/non262/Exceptions/regress-257751.js new file mode 100644 index 0000000000..f95dedff49 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-257751.js @@ -0,0 +1,92 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 257751; +var summary = 'RegExp Syntax Errors should have lineNumber and fileName'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var status; +var re; + +status = summary + ' ' + inSection(1) + ' RegExp("\\\\") '; +try +{ + expect = 'Pass'; + re = RegExp('\\'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' RegExp(")") '; +try +{ + expect = 'Pass'; + re = RegExp(')'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' /\\\\/ '; +try +{ + expect = 'Pass'; + re = eval('/\\/'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(4) + ' /)/ '; +try +{ + expect = 'Pass'; + re = eval('/)/'); +} +catch(e) +{ + if (e.fileName && e.lineNumber) + { + actual = 'Pass'; + } + else + { + actual = 'Fail'; + } +} +reportCompare(expect, actual, status); diff --git a/js/src/tests/non262/Exceptions/regress-273931.js b/js/src/tests/non262/Exceptions/regress-273931.js new file mode 100644 index 0000000000..000b5f3108 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-273931.js @@ -0,0 +1,74 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 273931; +var summary = 'Pop scope chain in exception handling'; +var actual = ''; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' '; +try +{ + with ({foo:"bar"}) + throw 42; +} +catch (e) +{ + try + { + printStatus(foo); + } + catch(ee) + { + actual = ee.name; + } +} + +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' '; +try +{ + with ({foo:"bar"}) + eval("throw 42"); +} +catch (e) +{ + try + { + printStatus(foo); + } + catch(ee) + { + actual = ee.name; + } +} + +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' '; +try +{ + var s = "throw 42"; + with ({foo:"bar"}) + eval(s); +} +catch (e) +{ + try + { + printStatus(foo); + } + catch(ee) + { + actual = ee.name; + } +} + +reportCompare(expect, actual, status); diff --git a/js/src/tests/non262/Exceptions/regress-332472.js b/js/src/tests/non262/Exceptions/regress-332472.js new file mode 100644 index 0000000000..df17f2ebe9 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-332472.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 332472; +var summary = 'new RegExp() ignores string boundaries when throwing exceptions'; +var actual = ''; +var expect = true; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str1 = "?asdf\nAnd you really shouldn't see this!"; +var str2 = str1.substr(0, 5); +try { + new RegExp(str2); +} +catch(ex) { + printStatus(ex); + actual = ex instanceof SyntaxError; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/non262/Exceptions/regress-333728.js b/js/src/tests/non262/Exceptions/regress-333728.js new file mode 100644 index 0000000000..bf6f4ea34d --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-333728.js @@ -0,0 +1,83 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 333728; +var summary = 'Throw ReferenceErrors for typeof(...undef)'; +var actual = ''; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + actual = typeof (0, undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (0, undef)'); + +try +{ + actual = typeof (0 || undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (0 || undef)'); + +try +{ + actual = typeof (1 && undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (1 && undef)'); + +/* + try + { + actual = typeof (0 ? 0 : undef); + } + catch(ex) + { + actual = ex.name; + } + + reportCompare(expect, actual, summary + ': typeof (0 ? 0 : undef)'); +*/ + +/* + try + { + actual = typeof (1 ? undef : 0); + } + catch(ex) + { + actual = ex.name; + } + + reportCompare(expect, actual, summary + ': typeof (1 ? undef : 0)'); +*/ + +try +{ + actual = typeof (!this ? 0 : undef); +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary + ': typeof (!this ? 0 : undef)'); diff --git a/js/src/tests/non262/Exceptions/regress-342359.js b/js/src/tests/non262/Exceptions/regress-342359.js new file mode 100644 index 0000000000..af5e2647f5 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-342359.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 342359; +var summary = 'Overriding ReferenceError should stick'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// work around bug 376957 +var SavedReferenceError = ReferenceError; + +try +{ + ReferenceError = 5; +} +catch(ex) +{ +} + +try +{ + foo.blitz; +} +catch(ex) +{ +} + +if (SavedReferenceError == ReferenceError) +{ + actual = expect = 'Test ignored due to bug 376957'; +} +else +{ + expect = 5; + actual = ReferenceError; +} +reportCompare(expect, actual, summary); diff --git a/js/src/tests/non262/Exceptions/regress-347674.js b/js/src/tests/non262/Exceptions/regress-347674.js new file mode 100644 index 0000000000..63bc36616c --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-347674.js @@ -0,0 +1,63 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = "347674"; +var summary = "ReferenceError thrown when accessing exception bound in a " + + "catch block in a try block within that catch block"; +var actual, expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/************** + * BEGIN TEST * + **************/ + +var failed = false; + +function foo() +{ + try + { + throw "32.9"; + } + catch (e) + { + try + { + var errorCode = /^(\d+)\s+.*$/.exec(e)[1]; + } + catch (e2) + { + void("*** internal error: e == " + e + ", e2 == " + e2); + throw e2; + } + } +} + +try +{ + try + { + foo(); + } + catch (ex) + { + if (!(ex instanceof TypeError)) + throw "Wrong value thrown!\n" + + " expected: a TypeError ('32.9' doesn't match the regexp)\n" + + " actual: " + ex; + } +} +catch (e) +{ + failed = e; +} + +expect = false; +actual = failed; + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/non262/Exceptions/regress-350650-n.js b/js/src/tests/non262/Exceptions/regress-350650-n.js new file mode 100644 index 0000000000..fb457a6e07 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-350650-n.js @@ -0,0 +1,28 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350650; +var summary = 'js reports "uncaught exception'; +var actual = 'Error'; +var expect = 'Error'; + +expectExitCode(3); + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exc() { this.toString = function() { return "EXC"; } } + throw new exc(); + + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/non262/Exceptions/regress-350837.js b/js/src/tests/non262/Exceptions/regress-350837.js new file mode 100644 index 0000000000..66e721c3c5 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-350837.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350837; +var summary = 'clear cx->throwing in finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'F'; + + function f() + { + actual = "F"; + } + + try + { + try { + throw 1; + } finally { + f.call(this); + } + } + catch(ex) + { + reportCompare(1, ex, summary); + } + + reportCompare(expect, actual, summary); +} diff --git a/js/src/tests/non262/Exceptions/regress-58946.js b/js/src/tests/non262/Exceptions/regress-58946.js new file mode 100644 index 0000000000..d869c4a126 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-58946.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//------------------------------------------------------------------------------------------------- +var BUGNUMBER = '58946'; +var stat = 'Testing a return statement inside a catch statement inside a function'; + +test(); + +function test() { + printBugNumber(BUGNUMBER); + printStatus (stat); + + expect = 'PASS'; + + function f() + { + try + { + throw 'PASS'; + } + catch(e) + { + return e; + } + } + + actual = f(); + + reportCompare(expect, actual, stat); +} diff --git a/js/src/tests/non262/Exceptions/regress-95101.js b/js/src/tests/non262/Exceptions/regress-95101.js new file mode 100644 index 0000000000..372fb09428 --- /dev/null +++ b/js/src/tests/non262/Exceptions/regress-95101.js @@ -0,0 +1,81 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 13 August 2001 + * + * SUMMARY: Invoking an undefined function should produce a ReferenceError + * See http://bugzilla.mozilla.org/show_bug.cgi?id=95101 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 95101; +var summary = 'Invoking an undefined function should produce a ReferenceError'; +var msgERR_REF_YES = 'ReferenceError'; +var msgERR_REF_NO = 'did NOT generate a ReferenceError'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +try +{ + xxxyyyzzz(); +} +catch (e) +{ + status = 'Section 1 of test'; + actual = e instanceof ReferenceError; + expect = true; + addThis(); + + + /* + * This test is more literal, and may one day be invalid. + * Searching for literal string "ReferenceError" in e.toString() + */ + status = 'Section 2 of test'; + var match = e.toString().search(/ReferenceError/); + actual = (match > -1); + expect = true; + addThis(); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = isReferenceError(actual); + expectedvalues[UBound] = isReferenceError(expect); + UBound++; +} + + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } +} + + +// converts a Boolean result into a textual result - +function isReferenceError(bResult) +{ + return bResult? msgERR_REF_YES : msgERR_REF_NO; +} diff --git a/js/src/tests/non262/Exceptions/shell.js b/js/src/tests/non262/Exceptions/shell.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/non262/Exceptions/shell.js |