/* -*- 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 gTestfile = 'regress-312385-01.js'; //----------------------------------------------------------------------------- var BUGNUMBER = 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(BUGNUMBER); 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() { }