/* -*- Mode: java; tab-width:8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** 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) 2007 * the Initial Developer. All Rights Reserved. * * Contributor(s): Igor Bukanov * * 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 ***** */ gTestfile = 'regress-376773.js'; var BUGNUMBER = 376773; var summary = 'xmlsimple.stringmethod === xmlsimple.function::stringmethod'; var actual = ''; var expect = ''; var actualcall = ''; var expectcall = ''; printBugNumber(BUGNUMBER); START(summary); var nTest = 0; var xml = TEXT; // -------------------------------------------------------------- String.prototype.orig_toString = String.prototype.toString; String.prototype.toString = function() { actualcall = 'String.prototype.toString called'; return this.orig_toString(); }; expect = 'TEXT'; expectcall = 'String.prototype.toString not called'; actualcall = expectcall; actual = xml.toString(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::toString(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::toString.call(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.toString = String.prototype.orig_toString; delete String.prototype.orig_toString; // -------------------------------------------------------------- String.prototype.orig_toSource = String.prototype.toSource; String.prototype.toSource = function() { actualcall = 'String.prototype.toSource called'; return this.orig_toSource(); }; expect = 'TEXT'; expectcall = 'String.prototype.toSource not called'; actualcall = expectcall; actual = xml.toSource(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::toSource(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::toSource.call(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.toSource = String.prototype.orig_toSource; delete String.prototype.orig_toSource; // -------------------------------------------------------------- String.prototype.orig_valueOf = String.prototype.valueOf; String.prototype.valueOf = function() { actualcall = 'String.prototype.valueOf called'; return this.orig_valueOf(); }; expect = 'TEXT'; expectcall = 'String.prototype.valueOf not called'; actualcall = expectcall; actual = xml.valueOf(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::valueOf(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::valueOf.call(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.valueOf = String.prototype.orig_valueOf; delete String.prototype.orig_valueOf; // -------------------------------------------------------------- String.prototype.orig_charAt = String.prototype.charAt; String.prototype.charAt = function(pos) { actualcall = 'String.prototype.charAt called'; return this.orig_charAt(pos); }; expect = 'T'; expectcall = 'String.prototype.charAt called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.charAt(0); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::charAt(0); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::charAt.call(xml, 0); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.charAt = String.prototype.orig_charAt; delete String.prototype.orig_charAt; // -------------------------------------------------------------- String.prototype.orig_charCodeAt = String.prototype.charCodeAt; String.prototype.charCodeAt = function(pos) { actualcall = 'String.prototype.charCodeAt called'; return this.orig_charCodeAt(pos); }; expect = 84; expectcall = 'String.prototype.charCodeAt called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.charCodeAt(0); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::charCodeAt(0); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::charCodeAt.call(xml, 0); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.charCodeAt = String.prototype.orig_charCodeAt; delete String.prototype.orig_charCodeAt; // -------------------------------------------------------------- String.prototype.orig_concat = String.prototype.concat; String.prototype.concat = function(string1) { actualcall = 'String.prototype.concat called'; return this.orig_concat(string1); }; expect = 'TEXTtext'; expectcall = 'String.prototype.concat called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.concat(text); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::concat(text); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::concat.call(xml, text); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.concat = String.prototype.orig_concat; delete String.prototype.orig_concat; // -------------------------------------------------------------- String.prototype.orig_indexOf = String.prototype.indexOf; String.prototype.indexOf = function(searchString, position) { actualcall = 'String.prototype.indexOf called'; return this.orig_indexOf(searchString, position); }; expect = 0; expectcall = 'String.prototype.indexOf called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.indexOf('T'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::indexOf('T'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::indexOf.call(xml, 'T'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.indexOf = String.prototype.orig_indexOf; delete String.prototype.orig_indexOf; // -------------------------------------------------------------- String.prototype.orig_lastIndexOf = String.prototype.lastIndexOf; String.prototype.lastIndexOf = function(searchString, position) { actualcall = 'String.prototype.lastIndexOf called'; return this.orig_lastIndexOf(searchString, position); }; expect = 3; expectcall = 'String.prototype.lastIndexOf called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.lastIndexOf('T'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::lastIndexOf('T'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::lastIndexOf.call(xml, 'T'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.lastIndexOf = String.prototype.orig_lastIndexOf; delete String.prototype.orig_lastIndexOf; // -------------------------------------------------------------- String.prototype.orig_localeCompare = String.prototype.localeCompare; String.prototype.localeCompare = function(that) { actualcall = 'String.prototype.localeCompare called'; return this.orig_localeCompare(that); }; expect = 0; expectcall = 'String.prototype.localeCompare called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.localeCompare(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::localeCompare(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::localeCompare.call(xml, xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.localeCompare = String.prototype.orig_localeCompare; delete String.prototype.orig_localeCompare; // -------------------------------------------------------------- String.prototype.orig_match = String.prototype.match; String.prototype.match = function(regexp) { actualcall = 'String.prototype.match called'; return this.orig_match(regexp); }; expect = ['TEXT']; expectcall = 'String.prototype.match called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.match(/TEXT/); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::match(/TEXT/); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.replace(/called/, 'not called'); actual = xml.function::match.call(xml, /TEXT/); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.match = String.prototype.orig_match; delete String.prototype.orig_match; // -------------------------------------------------------------- String.prototype.orig_replace = String.prototype.replace; String.prototype.replace = function(searchValue, replaceValue) { actualcall = 'String.prototype.replace called'; return this.orig_replace(searchValue, replaceValue); }; expect = 'TEXT'; expectcall = 'String.prototype.replace not called'; actualcall = expectcall; actual = xml.replace(/EXT/, 'ext'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::replace(/EXT/, 'ext'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall; actual = xml.function::replace.call(xml, /EXT/, 'ext'); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.replace = String.prototype.orig_replace; delete String.prototype.orig_replace; // -------------------------------------------------------------- String.prototype.orig_search = String.prototype.search; String.prototype.search = function(regexp) { actualcall = 'String.prototype.search called'; return this.orig_search(regexp); }; expect = 0; expectcall = 'String.prototype.search called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.search(/TEXT/); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.search(/called/, 'not called'); actual = xml.function::search(/TEXT/); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.search(/called/, 'not called'); actual = xml.function::search.call(xml, /TEXT/); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.search = String.prototype.orig_search; delete String.prototype.orig_search; // -------------------------------------------------------------- String.prototype.orig_slice = String.prototype.slice; String.prototype.slice = function(start, end) { actualcall = 'String.prototype.slice called'; return this.orig_slice(start, end); }; expect = ''; expectcall = 'String.prototype.slice called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.slice(1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.slice(/called/, 'not called'); actual = xml.function::slice(1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.slice(/called/, 'not called'); actual = xml.function::slice.call(xml, 1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.slice = String.prototype.orig_slice; delete String.prototype.orig_slice; // -------------------------------------------------------------- String.prototype.orig_split = String.prototype.split; String.prototype.split = function(separator, limit) { actualcall = 'String.prototype.split called'; return this.orig_split(separator, limit); }; expect = ['T', 'E', 'X', 'T']; expectcall = 'String.prototype.split called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.split(''); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.split(/called/, 'not called'); actual = xml.function::split(''); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.split(/called/, 'not called'); actual = xml.function::split.call(xml, ''); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.split = String.prototype.orig_split; delete String.prototype.orig_split; // -------------------------------------------------------------- String.prototype.orig_substr = String.prototype.substr; String.prototype.substr = function(start, length) { actualcall = 'String.prototype.substr called'; return this.orig_substr(start, length); }; expect = 'E'; expectcall = 'String.prototype.substr called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.substr(1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.substr(/called/, 'not called'); actual = xml.function::substr(1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.substr(/called/, 'not called'); actual = xml.function::substr.call(xml, 1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.substr = String.prototype.orig_substr; delete String.prototype.orig_substr; // -------------------------------------------------------------- String.prototype.orig_substring = String.prototype.substring; String.prototype.substring = function(start, end) { actualcall = 'String.prototype.substring called'; return this.orig_substring(start, end); }; expect = ''; expectcall = 'String.prototype.substring called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.substring(1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.substring(/called/, 'not called'); actual = xml.function::substring(1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.substring(/called/, 'not called'); actual = xml.function::substring.call(xml, 1,1); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.substring = String.prototype.orig_substring; delete String.prototype.orig_substring; // -------------------------------------------------------------- String.prototype.orig_toLowerCase = String.prototype.toLowerCase; String.prototype.toLowerCase = function() { actualcall = 'String.prototype.toLowerCase called'; return this.orig_toLowerCase(); }; expect = 'text'; expectcall = 'String.prototype.toLowerCase called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.toLowerCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toLowerCase(/called/, 'not called'); actual = xml.function::toLowerCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toLowerCase(/called/, 'not called'); actual = xml.function::toLowerCase.call(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.toLowerCase = String.prototype.orig_toLowerCase; delete String.prototype.orig_toLowerCase; // -------------------------------------------------------------- String.prototype.orig_toLocaleLowerCase = String.prototype.toLocaleLowerCase; String.prototype.toLocaleLowerCase = function() { actualcall = 'String.prototype.toLocaleLowerCase called'; return this.orig_toLocaleLowerCase(); }; expect = 'text'; expectcall = 'String.prototype.toLocaleLowerCase called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.toLocaleLowerCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toLocaleLowerCase(/called/, 'not called'); actual = xml.function::toLocaleLowerCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toLocaleLowerCase(/called/, 'not called'); actual = xml.function::toLocaleLowerCase.call(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.toLocaleLowerCase = String.prototype.orig_toLocaleLowerCase; delete String.prototype.orig_toLocaleLowerCase; // -------------------------------------------------------------- String.prototype.orig_toUpperCase = String.prototype.toUpperCase; String.prototype.toUpperCase = function() { actualcall = 'String.prototype.toUpperCase called'; return this.orig_toUpperCase(); }; expect = 'TEXT'; expectcall = 'String.prototype.toUpperCase called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.toUpperCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toUpperCase(/called/, 'not called'); actual = xml.function::toUpperCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toUpperCase(/called/, 'not called'); actual = xml.function::toUpperCase.call(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.toUpperCase = String.prototype.orig_toUpperCase; delete String.prototype.orig_toUpperCase; // -------------------------------------------------------------- String.prototype.orig_toLocaleUpperCase = String.prototype.toLocaleUpperCase; String.prototype.toLocaleUpperCase = function() { actualcall = 'String.prototype.toLocaleUpperCase called'; return this.orig_toLocaleUpperCase(); }; expect = 'TEXT'; expectcall = 'String.prototype.toLocaleUpperCase called'; actualcall = expectcall.replace(/called/, 'not called'); actual = xml.toLocaleUpperCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toLocaleUpperCase(/called/, 'not called'); actual = xml.function::toLocaleUpperCase(); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); actualcall = expectcall.toLocaleUpperCase(/called/, 'not called'); actual = xml.function::toLocaleUpperCase.call(xml); TEST(++nTest, expectcall + ':' + expect, actualcall + ':' + actual); String.prototype.toLocaleUpperCase = String.prototype.orig_toLocaleUpperCase; delete String.prototype.orig_toLocaleUpperCase; var l = <>text; expect = 't'; actual = l.function::charAt.call(l, 0); TEST(++nTest, expect, actual); expect = 't'; with (l) actual = function::charAt(0); TEST(++nTest, expect, actual); END();