// Any copyright is dedicated to the Public Domain. // http://creativecommons.org/licenses/publicdomain/ //----------------------------------------------------------------------------- var BUGNUMBER = 732669; var summary = "Primitive values don't box correctly"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ var t; function returnThis() { return this; } // Boolean Boolean.prototype.method = returnThis; t = true.method(); assertEq(t !== Boolean.prototype, true); assertEq(t.toString(), "true"); Object.defineProperty(Boolean.prototype, "property", { get: returnThis, configurable: true }); t = false.property; assertEq(t !== Boolean.prototype, true); assertEq(t.toString(), "false"); delete Boolean.prototype.method; delete Boolean.prototype.property; // Number Number.prototype.method = returnThis; t = 5..method(); assertEq(t !== Number.prototype, true); assertEq(t.toString(), "5"); Object.defineProperty(Number.prototype, "property", { get: returnThis, configurable: true }); t = 17..property; assertEq(t !== Number.prototype, true); assertEq(t.toString(), "17"); delete Number.prototype.method; delete Number.prototype.property; // String String.prototype.method = returnThis; t = "foo".method(); assertEq(t !== String.prototype, true); assertEq(t.toString(), "foo"); Object.defineProperty(String.prototype, "property", { get: returnThis, configurable: true }); t = "bar".property; assertEq(t !== String.prototype, true); assertEq(t.toString(), "bar"); delete String.prototype.method; delete String.prototype.property; // Object Object.prototype.method = returnThis; t = true.method(); assertEq(t !== Object.prototype, true); assertEq(t !== Boolean.prototype, true); assertEq(t.toString(), "true"); t = 42..method(); assertEq(t !== Object.prototype, true); assertEq(t !== Number.prototype, true); assertEq(t.toString(), "42"); t = "foo".method(); assertEq(t !== Object.prototype, true); assertEq(t !== String.prototype, true); assertEq(t.toString(), "foo"); Object.defineProperty(Object.prototype, "property", { get: returnThis, configurable: true }); t = false.property; assertEq(t !== Object.prototype, true); assertEq(t !== Boolean.prototype, true); assertEq(t.toString(), "false"); t = 8675309..property; assertEq(t !== Object.prototype, true); assertEq(t !== Number.prototype, true); assertEq(t.toString(), "8675309"); t = "bar".property; assertEq(t !== Object.prototype, true); assertEq(t !== String.prototype, true); assertEq(t.toString(), "bar"); /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");