From d05efd6f2b69c5ee11d78d5ac37da9630117999f Mon Sep 17 00:00:00 2001 From: "bclary%bclary.com" Date: Wed, 19 Apr 2006 02:35:10 +0000 Subject: [PATCH] JavaScript Test Library - Regression test for bug 312385 --- js/tests/js1_6/Regress/regress-312385-01.js | 153 ++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100755 js/tests/js1_6/Regress/regress-312385-01.js diff --git a/js/tests/js1_6/Regress/regress-312385-01.js b/js/tests/js1_6/Regress/regress-312385-01.js new file mode 100755 index 000000000000..37e0cc7bba24 --- /dev/null +++ b/js/tests/js1_6/Regress/regress-312385-01.js @@ -0,0 +1,153 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla 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/MPL/ + * + * 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 + * Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * 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 MPL, 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 MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +//----------------------------------------------------------------------------- +var bug = 312385; +var summary = 'Generic methods with null or undefined |this|'; +var actual = ''; +var expect = true; +var voids = [null, undefined]; + +var generics = { + String: [{ quote: [] }, + { substring: [] }, + { toLowerCase: [] }, + { toUpperCase: [] }, + { charAt: [] }, + { charCodeAt: [] }, + { indexOf: [] }, + { lastIndexOf: [] }, + { toLocaleLowerCase: [] }, + { toLocaleUpperCase: [] }, + { localeCompare: [] }, + { match: [/(?:)/] }, // match(regexp) + { search: [] }, + { replace: [] }, + { split: [] }, + { substr: [] }, + { concat: [] }, + { slice: [] }], + + Array: [{ join: [] }, + { reverse: [] }, + { sort: [] }, + { push: [0] }, // push(item1, ...) + { pop: [] }, + { shift: [] }, + { unshift: [] }, + { splice: [0, 0, 1] }, // splice(start, deleteCount, item1, ...) + { concat: [] }, + { indexOf: [] }, + { lastIndexOf: [] }, + // forEach is excluded since it does not return a value... + /* { forEach: [noop] }, // forEach(callback, thisObj) */ + { map: [noop] }, // map(callback, thisObj) + { filter: [noop] }, // filter(callback, thisObj) + { some: [noop] }, // some(callback, thisObj) + { every: [noop] } // every(callback, thisObj) + ] +}; + +printBugNumber (bug); +printStatus (summary); + +for (var c in generics) +{ + var methods = generics[c]; + for (var i = 0; i < methods.length; i++) + { + var method = methods[i]; + + for (var methodname in method) + { + for (var v = 0; v < voids.length; v++) + { + var lhs = c + '.' + methodname + + '(' + voids[v] + (method[methodname].length ?(', ' + method[methodname].toString()):'') + ')'; + + var rhs = c + '.prototype.' + methodname + + '.apply(' + voids[v] + ', ' + method[methodname].toSource() + ')'; + + var expr = lhs + ' == ' + rhs; + printStatus('Testing ' + expr); + + try + { + printStatus('lhs ' + lhs + ': ' + eval(lhs)); + } + catch(ex) + { + printStatus(ex + ''); + } + + try + { + printStatus('rhs ' + rhs + ': ' + eval(rhs)); + } + catch(ex) + { + printStatus(ex + ''); + } + + try + { + actual = comparelr(eval(lhs), eval(rhs)); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, expr); + printStatus(''); + } + } + } +} + +function comparelr(lhs, rhs) +{ + + if (lhs.constructor.name != 'Array') + { + return (lhs == rhs); + } + + return (lhs.toSource() == rhs.toSource()); +} + +function noop() +{ +}