/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var gTestfile = 'redefine-arguments-length.js'; //----------------------------------------------------------------------------- var BUGNUMBER = 539766; var summary = "Object.defineProperty sets arguments.length without setting the " + "length-overridden bit"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ function test_JSOP_ARGCNT() { var length = "length"; Object.defineProperty(arguments, length, { value: 17 }); assertEq(arguments.length, 17); assertEq(arguments[length], 17); } test_JSOP_ARGCNT(); function test_js_fun_apply() { var length = "length"; Object.defineProperty(arguments, length, { value: 17 }); function fun() { assertEq(arguments.length, 17); assertEq(arguments[length], 17); assertEq(arguments[0], "foo"); for (var i = 1; i < 17; i++) assertEq(arguments[i], undefined); } fun.apply(null, arguments); } test_js_fun_apply("foo"); function test_array_toString_sub_1() { Object.defineProperty(arguments, "length", { value: 1 }); arguments.join = [].join; assertEq([].toString.call(arguments), "1"); } test_array_toString_sub_1(1, 2); function test_array_toString_sub_2() { Object.defineProperty(arguments, "length", { value: 1 }); assertEq([].toLocaleString.call(arguments), "1"); } test_array_toString_sub_2(1, 2); /******************************************************************************/ reportCompare(true, true); print("All tests passed!");