SVN commit 439012 by porten: more detailed toString() and toLocalString() testing M +39 -0 Array.js --- trunk/tests/khtmltests/regression/tests/js/Array.js #439011:439012 @@ -147,3 +147,42 @@ shouldBe("propnames[0]","'0'"); shouldBe("propnames[1]","'1'"); shouldBe("propnames[2]","'2'"); + +function testToString() { + // backup + var backupNumberToString = Number.prototype.toString; + var backupNumberToLocaleString = Number.prototype.toLocaleString; + var backupRegExpToString = RegExp.prototype.toString; + var backupRegExpToLocaleString = RegExp.prototype.toLocaleString; + + // change functions + Number.prototype.toString = function() { return "toString"; } + Number.prototype.toLocaleString = function() { return "toLocaleString"; } + RegExp.prototype.toString = function() { return "toString2"; } + RegExp.prototype.toLocaleString = function() { return "toLocaleString2"; } + + // the tests + shouldBe("[1].toString()", "'1'"); + shouldBe("[1].toLocaleString()", "'toLocaleString'"); + Number.prototype.toLocaleString = "invalid"; + shouldBe("[1].toLocaleString()", "'1'"); + shouldBe("[/r/].toString()", "'toString2'"); + shouldBe("[/r/].toLocaleString()", "'toLocaleString2'"); + RegExp.prototype.toLocaleString = "invalid"; + shouldBe("[/r/].toLocaleString()", "'toString2'"); + + var caught = false; + try { + [{ toString : 0 }].toString(); + } catch (e) { + caught = true; + } + shouldBeTrue("caught"); + + // restore + Number.prototype.toString = backupNumberToString; + Number.prototype.toLocaleString = backupNumberToLocaleString; + RegExp.prototype.toString = backupRegExpToString; + RegExp.prototype.toLocaleString = backupRegExpToLocaleString; +} +