Source code

Revision control

Copy as Markdown

Other Tools

// Nearly every %TypedArray%.prototype method should throw a TypeError when called
// atop a detached array buffer. Here we check verify that this holds true for
// all relevant functions.
let buffer = new ArrayBuffer(32);
let array = new Int32Array(buffer);
detachArrayBuffer(buffer);
// A nice poisoned callable to ensure that we fail on a detached buffer check
// before a method attempts to do anything with its arguments.
var POISON = (function() {
var internalTarget = {};
var throwForAllTraps =
new Proxy(internalTarget, { get(target, prop, receiver) {
assertEq(target, internalTarget);
assertEq(receiver, throwForAllTraps);
throw "FAIL: " + prop + " trap invoked";
}});
return new Proxy(throwForAllTraps, throwForAllTraps);
});
assertThrowsInstanceOf(() => {
array.copyWithin(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.entries();
}, TypeError);
assertThrowsInstanceOf(() => {
array.fill(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.filter(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.find(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.findIndex(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.forEach(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.indexOf(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.includes(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.join(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.keys();
}, TypeError);
assertThrowsInstanceOf(() => {
array.lastIndexOf(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.map(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.reduce(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.reduceRight(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.reverse();
}, TypeError);
assertThrowsInstanceOf(() => {
array.slice(POISON, POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.some(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.values();
}, TypeError);
assertThrowsInstanceOf(() => {
array.every(POISON);
}, TypeError);
assertThrowsInstanceOf(() => {
array.sort(POISON);
}, TypeError);
if (typeof reportCompare === "function")
reportCompare(true, true);