michael@0: /* michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ michael@0: */ michael@0: michael@0: var BUGNUMBER = 465199; michael@0: var summary = "RegExp lastIndex property set should not coerce type to number"; michael@0: michael@0: print(BUGNUMBER + ": " + summary); michael@0: michael@0: /************** michael@0: * BEGIN TEST * michael@0: **************/ michael@0: michael@0: var called = false; michael@0: var o = { valueOf: function() { called = true; return 1; } }; michael@0: var r = /a/g; michael@0: var desc, m; michael@0: michael@0: assertEq(r.lastIndex, 0); michael@0: michael@0: desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); michael@0: assertEq(desc.enumerable, false); michael@0: assertEq(desc.configurable, false); michael@0: assertEq(desc.value, 0); michael@0: assertEq(desc.writable, true); michael@0: michael@0: r.lastIndex = o; michael@0: michael@0: assertEq(r.lastIndex, o); michael@0: michael@0: desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); michael@0: assertEq(desc.enumerable, false); michael@0: assertEq(desc.configurable, false); michael@0: assertEq(desc.value, o); michael@0: assertEq(desc.writable, true); michael@0: michael@0: assertEq(called, false); michael@0: assertEq(r.exec("aaaa").length, 1); michael@0: assertEq(called, true); michael@0: assertEq(r.lastIndex, 2); michael@0: michael@0: desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); michael@0: assertEq(desc.enumerable, false); michael@0: assertEq(desc.configurable, false); michael@0: assertEq(desc.value, 2); michael@0: assertEq(desc.writable, true); michael@0: michael@0: michael@0: r.lastIndex = -0.2; michael@0: assertEq(r.lastIndex, -0.2); michael@0: michael@0: m = r.exec("aaaa"); michael@0: assertEq(Array.isArray(m), true); michael@0: assertEq(m.length, 1); michael@0: assertEq(m[0], "a"); michael@0: assertEq(r.lastIndex, 1); michael@0: michael@0: m = r.exec("aaaa"); michael@0: assertEq(Array.isArray(m), true); michael@0: assertEq(m.length, 1); michael@0: assertEq(m[0], "a"); michael@0: assertEq(r.lastIndex, 2); michael@0: michael@0: michael@0: /******************************************************************************/ michael@0: michael@0: if (typeof reportCompare === "function") michael@0: reportCompare(true, true); michael@0: michael@0: print("All tests passed!");