Source code
Revision control
Copy as Markdown
Other Tools
function ensureSetterCalledOnce(fn, value, index) {
var setterCalled = false;
Object.defineProperty(Array.prototype, index, {
configurable: true,
set: function(v) {
assertEq(setterCalled, false);
setterCalled = true;
assertEq(v, value);
}
});
assertEq(setterCalled, false);
fn();
assertEq(setterCalled, true);
delete Array.prototype[index];
}
ensureSetterCalledOnce(function() {
[].push("push");
}, "push", 0);
ensureSetterCalledOnce(function() {
[/* hole */, "reverse"].reverse();
}, "reverse", 0);
ensureSetterCalledOnce(function() {
["reverse", /* hole */,].reverse();
}, "reverse", 1);
ensureSetterCalledOnce(function() {
[/* hole */, "shift"].shift();
}, "shift", 0);
ensureSetterCalledOnce(function() {
[/* hole */, "sort"].sort();
}, "sort", 0);
ensureSetterCalledOnce(function() {
[/* hole */, undefined].sort();
}, undefined, 0);
ensureSetterCalledOnce(function() {
[].splice(0, 0, "splice");
}, "splice", 0);
ensureSetterCalledOnce(function() {
[/* hole */, "splice"].splice(0, 1);
}, "splice", 0);
ensureSetterCalledOnce(function(v) {
["splice", /* hole */,].splice(0, 0, "item");
}, "splice", 1);
ensureSetterCalledOnce(function() {
[].unshift("unshift");
}, "unshift", 0);
if (typeof reportCompare === "function")
reportCompare(true, true);