diff options
Diffstat (limited to 'js/src/tests/js1_5/Exceptions')
-rw-r--r-- | js/src/tests/js1_5/Exceptions/browser.js | 0 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/catchguard-002-n.js | 36 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/catchguard-003-n.js | 40 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/errstack-001.js | 245 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-121658.js | 124 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-123002.js | 93 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-257751.js | 92 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-273931.js | 74 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-315147.js | 36 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-332472.js | 25 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-333728.js | 83 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-342359.js | 43 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-347674.js | 63 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-350650-n.js | 31 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/regress-350837.js | 46 | ||||
-rw-r--r-- | js/src/tests/js1_5/Exceptions/shell.js | 0 |
16 files changed, 1031 insertions, 0 deletions
diff --git a/js/src/tests/js1_5/Exceptions/browser.js b/js/src/tests/js1_5/Exceptions/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/browser.js diff --git a/js/src/tests/js1_5/Exceptions/catchguard-002-n.js b/js/src/tests/js1_5/Exceptions/catchguard-002-n.js new file mode 100644 index 000000000..64c8ea081 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/catchguard-002-n.js @@ -0,0 +1,36 @@ +/* -*- 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."; +EXPECTED = "error"; + +var expect; +var actual; + +test(); + +function test() +{ + enterFunc ("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); + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/Exceptions/catchguard-003-n.js b/js/src/tests/js1_5/Exceptions/catchguard-003-n.js new file mode 100644 index 000000000..e9e99eb49 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/catchguard-003-n.js @@ -0,0 +1,40 @@ +/* -*- 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."; +EXPECTED = "error"; + +var expect; +var actual; + +test(); + +function test() +{ + enterFunc ("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); + + exitFunc ("test"); +} diff --git a/js/src/tests/js1_5/Exceptions/errstack-001.js b/js/src/tests/js1_5/Exceptions/errstack-001.js new file mode 100644 index 000000000..834ce037b --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/errstack-001.js @@ -0,0 +1,245 @@ +/* -*- 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() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/regress-121658.js b/js/src/tests/js1_5/Exceptions/regress-121658.js new file mode 100644 index 000000000..8da92a7ec --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-121658.js @@ -0,0 +1,124 @@ +/* -*- 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() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(msg); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/regress-123002.js b/js/src/tests/js1_5/Exceptions/regress-123002.js new file mode 100644 index 000000000..ab9d73b60 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-123002.js @@ -0,0 +1,93 @@ +/* -*- 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() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function quoteThis(text) +{ + return QUOTE + text + QUOTE; +} diff --git a/js/src/tests/js1_5/Exceptions/regress-257751.js b/js/src/tests/js1_5/Exceptions/regress-257751.js new file mode 100644 index 000000000..f95dedff4 --- /dev/null +++ b/js/src/tests/js1_5/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/js1_5/Exceptions/regress-273931.js b/js/src/tests/js1_5/Exceptions/regress-273931.js new file mode 100644 index 000000000..000b5f310 --- /dev/null +++ b/js/src/tests/js1_5/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/js1_5/Exceptions/regress-315147.js b/js/src/tests/js1_5/Exceptions/regress-315147.js new file mode 100644 index 000000000..49b49ae5f --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-315147.js @@ -0,0 +1,36 @@ +/* -*- 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 = 315147; +var summary = 'Error JSMSG_UNDEFINED_PROP should be JSEXN_REFERENCEERR'; +var actual = ''; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var o = {}; + +try +{ + o.foo; + actual = 'no error'; +} +catch(ex) +{ + actual = ex.name; +} + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/Exceptions/regress-332472.js b/js/src/tests/js1_5/Exceptions/regress-332472.js new file mode 100644 index 000000000..df17f2ebe --- /dev/null +++ b/js/src/tests/js1_5/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/js1_5/Exceptions/regress-333728.js b/js/src/tests/js1_5/Exceptions/regress-333728.js new file mode 100644 index 000000000..bf6f4ea34 --- /dev/null +++ b/js/src/tests/js1_5/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/js1_5/Exceptions/regress-342359.js b/js/src/tests/js1_5/Exceptions/regress-342359.js new file mode 100644 index 000000000..af5e2647f --- /dev/null +++ b/js/src/tests/js1_5/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/js1_5/Exceptions/regress-347674.js b/js/src/tests/js1_5/Exceptions/regress-347674.js new file mode 100644 index 000000000..63bc36616 --- /dev/null +++ b/js/src/tests/js1_5/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/js1_5/Exceptions/regress-350650-n.js b/js/src/tests/js1_5/Exceptions/regress-350650-n.js new file mode 100644 index 000000000..aafb6734a --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-350650-n.js @@ -0,0 +1,31 @@ +// |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() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exc() { this.toString = function() { return "EXC"; } } + throw new exc(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/regress-350837.js b/js/src/tests/js1_5/Exceptions/regress-350837.js new file mode 100644 index 000000000..f15cba4d0 --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/regress-350837.js @@ -0,0 +1,46 @@ +/* -*- 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() +{ + enterFunc ('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); + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/Exceptions/shell.js b/js/src/tests/js1_5/Exceptions/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/Exceptions/shell.js |