/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var gTestfile = 'toLocaleString.js'; var BUGNUMBER = 653789; var summary = "Object.prototype.toLocaleString"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ function expectThrowTypeError(fun) { try { var r = fun(); throw "didn't throw TypeError, returned " + r; } catch (e) { assertEq(e instanceof TypeError, true, "didn't throw TypeError, got: " + e); } } var toLocaleString = Object.prototype.toLocaleString; /* * 1. Let O be the result of calling ToObject passing the this value as the * argument. */ expectThrowTypeError(function() { toLocaleString.call(null); }); expectThrowTypeError(function() { toLocaleString.call(undefined); }); expectThrowTypeError(function() { toLocaleString.apply(null); }); expectThrowTypeError(function() { toLocaleString.apply(undefined); }); /* * 2. Let toString be the result of calling the [[Get]] internal method of O * passing "toString" as the argument. */ try { toLocaleString.call({ get toString() { throw 17; } }); throw new Error("didn't throw"); } catch (e) { assertEq(e, 17); } /* 3. If IsCallable(toString) is false, throw a TypeError exception. */ expectThrowTypeError(function() { toLocaleString.call({ toString: 12 }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: 0.3423423452352e9 }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: undefined }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: false }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: [] }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: {} }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: new String }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: new Number(7.7) }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: new Boolean(true) }); }); expectThrowTypeError(function() { toLocaleString.call({ toString: JSON }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 12 }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 0.3423423452352e9 }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: undefined }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: false }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: [] }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: {} }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new String }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Number(7.7) }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Boolean(true) }); }); expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: JSON }); }); /* * 4. Return the result of calling the [[Call]] internal method of toString * passing O as the this value and no arguments. */ assertEq(toLocaleString.call({ get toString() { return function() { return "foo"; } } }), "foo"); var obj = { toString: function() { assertEq(this, obj); assertEq(arguments.length, 0); return 5; } }; assertEq(toLocaleString.call(obj), 5); assertEq(toLocaleString.call({ toString: function() { return obj; } }), obj); assertEq(toLocaleString.call({ toString: function() { return obj; }, valueOf: function() { return "abc"; } }), obj); /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("All tests passed!");