diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:52 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:52 -0800 |
commit | 8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (patch) | |
tree | 11425ea0b299d6fb89c6d3618a22d97d5bf68d0f /JavaScriptCore/tests/mozilla/js1_5/Exceptions | |
parent | 648161bb0edfc3d43db63caed5cc5213bc6cb78f (diff) | |
download | external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.zip external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.gz external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'JavaScriptCore/tests/mozilla/js1_5/Exceptions')
10 files changed, 1050 insertions, 0 deletions
diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-001-n.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-001-n.js new file mode 100644 index 0000000..37b10ae --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-001-n.js @@ -0,0 +1,57 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code, released March + * 31, 1998. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Rob Ginda rginda@netscape.com + */ + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard syntax negative test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e) /* the non-guarded catch should HAVE to appear last */ + { + + } + catch (e if true) + { + + } + catch (e if false) + { + + } + + reportFailure ("Illegally constructed catchguard should have thrown " + + "an exception."); + + exitFunc ("test"); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-001.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-001.js new file mode 100644 index 0000000..e65723e --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-001.js @@ -0,0 +1,64 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code, released March + * 31, 1998. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Rob Ginda rginda@netscape.com + */ + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e = "foo"; + var caught = false; + + printStatus ("Basic catchguard test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e if true) + { + caught = true; + e = "this change should not propagate outside of this scope"; + } + catch (e if false) + { + reportFailure ("Catch block (e if false) should not have executed."); + } + catch (e) + { + reportFailure ("Catch block (e) should not have executed."); + } + + if (!caught) + reportFailure ("Execption was never caught."); + + if (e != "foo") + reportFailure ("Exception data modified inside catch() scope should " + + "not be visible in the function scope (e = '" + + e + "'.)"); + + exitFunc ("test"); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-002-n.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-002-n.js new file mode 100644 index 0000000..4446dd4 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-002-n.js @@ -0,0 +1,46 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code, released March + * 31, 1998. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Rob Ginda rginda@netscape.com + */ + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard var declaration negative test."); + + try + { + throw EXCEPTION_DATA; + } + catch (var e) + { + + } + + reportFailure ("var in catch clause should have caused an error."); + + exitFunc ("test"); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-002.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-002.js new file mode 100644 index 0000000..4e89078 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-002.js @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code, released March + * 31, 1998. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Rob Ginda rginda@netscape.com + */ + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + var caught = false; + + printStatus ("Basic catchguard test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e if true) + { + caught = true; + } + catch (e if true) + { + reportFailure ("Second (e if true) catch block should not have " + + "executed."); + } + catch (e) + { + reportFailure ("Catch block (e) should not have executed."); + } + + if (!caught) + reportFailure ("Execption was never caught."); + + + exitFunc ("test"); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-003-n.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-003-n.js new file mode 100644 index 0000000..b5fca02 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-003-n.js @@ -0,0 +1,53 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code, released March + * 31, 1998. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Rob Ginda rginda@netscape.com + */ + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard syntax negative test #2."); + + try + { + throw EXCEPTION_DATA; + } + catch (e) + { + + } + catch (e) /* two non-guarded catch statements shoud generate an error */ + { + + } + + reportFailure ("Illegally constructed catchguard should have thrown " + + "an exception."); + + exitFunc ("test"); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-003.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-003.js new file mode 100644 index 0000000..2cb64a6 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/catchguard-003.js @@ -0,0 +1,69 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is Mozilla Communicator client code, released March + * 31, 1998. + * + * The Initial Developer of the Original Code is Netscape Communications + * Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Rob Ginda rginda@netscape.com + */ + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e = "foo", x = "foo"; + var caught = false; + + printStatus ("Catchguard 'Common Scope' test."); + + try + { + throw EXCEPTION_DATA; + } + catch (e if ((x = 1) && false)) + { + reportFailure ("Catch block (e if ((x = 1) && false) should not " + + "have executed."); + } + catch (e if (x == 1)) + { + caught = true; + } + catch (e) + { + reportFailure ("Same scope should be used across all catchguards."); + } + + if (!caught) + reportFailure ("Execption was never caught."); + + if (e != "foo") + reportFailure ("Exception data modified inside catch() scope should " + + "not be visible in the function scope (e ='" + + e + "'.)"); + + if (x != 1) + reportFailure ("Data modified in 'catchguard expression' should " + + "be visible in the function scope (x = '" + + x + "'.)"); + + exitFunc ("test"); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/errstack-001.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/errstack-001.js new file mode 100644 index 0000000..4850d20 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/errstack-001.js @@ -0,0 +1,274 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: NPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Netscape Public License +* Version 1.1 (the "License"); you may not use this file except in +* compliance with the License. You may obtain a copy of the License at +* http://www.mozilla.org/NPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is JavaScript Engine testing utilities. +* +* The Initial Developer of the Original Code is Netscape Communications Corp. +* Portions created by the Initial Developer are Copyright (C) 2002 +* the Initial Developer. All Rights Reserved. +* +* Contributor(s): brendan@mozilla.org, pschwartau@netscape.com +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the NPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the NPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** +* +* +* 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 bug = '(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,9); + expect = 'A(44,13)@'; + addThis(); + + status = inSection(3); + actual = stackFrames[2].substring(0,9); + expect = 'B(45,14)@'; + addThis(); + + status = inSection(4); + actual = stackFrames[3].substring(0,9); + expect = 'C(46,15)@'; + addThis(); + + status = inSection(5); + actual = stackFrames[4].substring(0,9); + expect = 'D(47,16)@'; + 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,21); + expect = 'A("44:foo","13:bar")@'; + addThis(); + + status = inSection(8); + actual = stackFrames[2].substring(0,23); + expect = 'B("44:foo1","13:bar1")@'; + addThis(); + + status = inSection(9); + actual = stackFrames[3].substring(0,25); + expect = 'C("44:foo11","13:bar11")@'; + addThis(); + + status = inSection(10); + actual = stackFrames[4].substring(0,27); + expect = 'D("44:foo111","13:bar111")@';; + 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,3); + expect = '()@'; + addThis(); + + status = inSection(13); + actual = stackFrames[2].substring(0,9); + expect = 'A(44,13)@'; + 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,12); + expect = 'anonymous()@'; + addThis(); + + status = inSection(16); + actual = stackFrames[2].substring(0,9); + expect = 'A(44,13)@'; + 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(bug); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-121658.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-121658.js new file mode 100644 index 0000000..7328749 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-121658.js @@ -0,0 +1,152 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: NPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Netscape Public License +* Version 1.1 (the "License"); you may not use this file except in +* compliance with the License. You may obtain a copy of the License at +* http://www.mozilla.org/NPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is JavaScript Engine testing utilities. +* +* The Initial Developer of the Original Code is Netscape Communications Corp. +* Portions created by the Initial Developer are Copyright (C) 2002 +* the Initial Developer. All Rights Reserved. +* +* Contributor(s): timeless@mac.com,pschwartau@netscape.com +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the NPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the NPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** +* +* +* 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 bug = 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(bug); + printStatus(msg); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-123002.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-123002.js new file mode 100644 index 0000000..aee6893 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-123002.js @@ -0,0 +1,129 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: NPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Netscape Public License +* Version 1.1 (the "License"); you may not use this file except in +* compliance with the License. You may obtain a copy of the License at +* http://www.mozilla.org/NPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is JavaScript Engine testing utilities. +* +* The Initial Developer of the Original Code is Netscape Communications Corp. +* Portions created by the Initial Developer are Copyright (C) 2002 +* the Initial Developer. All Rights Reserved. +* +* Contributor(s): pschwartau@netscape.com +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the NPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the NPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** +* +* +* 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 LENGTH_RHINO = 1; +var LENGTH_SPIDERMONKEY = 3; +var UBound = 0; +var bug = 123002; +var summary = 'Testing Error.length'; +var QUOTE = '"'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Are we in Rhino or SpiderMonkey? + */ +// var LENGTH_EXPECTED = inRhino()? LENGTH_RHINO : LENGTH_SPIDERMONKEY; +// ECMA spec says length should be 1 +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(bug); + 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/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-50447.js b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-50447.js new file mode 100644 index 0000000..0133e88 --- /dev/null +++ b/JavaScriptCore/tests/mozilla/js1_5/Exceptions/regress-50447.js @@ -0,0 +1,146 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- +* +* The contents of this file are subject to the Netscape Public +* License Version 1.1 (the "License"); you may not use this file +* except in compliance with the License. You may obtain a copy of +* the License at http://www.mozilla.org/NPL/ +* +* Software distributed under the License is distributed on an "AS +* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +* implied. See the License for the specific language governing +* rights and limitations under the License. +* +* The Original Code is Mozilla Communicator client code, released March +* 31, 1998. +* +* The Initial Developer of the Original Code is Netscape Communications +* Corporation. Portions created by Netscape are +* Copyright (C) 1998 Netscape Communications Corporation. All +* Rights Reserved. +* +* Contributor(s): Rob Ginda rginda@netscape.com +* +* SUMMARY: New properties fileName, lineNumber have been added to Error objects +* in SpiderMonkey. These are non-ECMA extensions and do not exist in Rhino. +* +* See http://bugzilla.mozilla.org/show_bug.cgi?id=50447 +*/ +//----------------------------------------------------------------------------- +var bug = 50447; +var summary = 'Test (non-ECMA) Error object properties fileName, lineNumber'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber (bug); + printStatus (summary); + + testRealError(); + test1(); + test2(); + test3(); + test4(); + + exitFunc('test'); +} + + +function testRealError() +{ + /* throw a real error, and see what it looks like */ + enterFunc ("testRealError"); + + try + { + blabla; + } + catch (e) + { + if (e.fileName.search (/-50447\.js$/i) == -1) + reportFailure ("expected fileName to end with '-50447.js'"); + + reportCompare (61, e.lineNumber, + "lineNumber property returned unexpected value."); + } + + exitFunc ("testRealError"); +} + + +function test1() +{ + /* generate an error with msg, file, and lineno properties */ + enterFunc ("test1"); + + var e = new InternalError ("msg", "file", 2); + reportCompare ("(new InternalError(\"msg\", \"file\", 2))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("file", e.fileName, + "fileName property returned unexpected value."); + reportCompare (2, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test1"); +} + + +function test2() +{ + /* generate an error with only msg property */ + enterFunc ("test2"); + + var e = new InternalError ("msg"); + reportCompare ("(new InternalError(\"msg\", \"\"))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("", e.fileName, + "fileName property returned unexpected value."); + reportCompare (0, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test2"); +} + + +function test3() +{ + /* generate an error with only msg and lineNo properties */ + enterFunc ("test3"); + + var e = new InternalError ("msg"); + e.lineNumber = 10; + reportCompare ("(new InternalError(\"msg\", \"\", 10))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("", e.fileName, + "fileName property returned unexpected value."); + reportCompare (10, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test3"); +} + + +function test4() +{ + /* generate an error with only msg and filename properties */ + enterFunc ("test4"); + + var e = new InternalError ("msg", "file"); + reportCompare ("(new InternalError(\"msg\", \"file\"))", + e.toSource(), + "toSource() returned unexpected result."); + reportCompare ("file", e.fileName, + "fileName property returned unexpected value."); + reportCompare (0, e.lineNumber, + "lineNumber property returned unexpected value."); + + exitFunc ("test4"); +} |