ArrayBuffer.prototype.detached tests

See https://tc39.es/proposal-arraybuffer-transfer/
This commit is contained in:
Jordan Harband 2023-01-18 13:11:36 -08:00 committed by Ms2ger
parent 780b7b806e
commit 408ecd0987
11 changed files with 326 additions and 0 deletions

View File

@ -0,0 +1,36 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: Return a boolean indicating if the ArrayBuffer is detached
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
4. Return IsDetachedBuffer(O).
includes: [detachArrayBuffer.js]
features: [ArrayBuffer, arraybuffer-transfer, resizable-arraybuffer]
---*/
var ab1 = new ArrayBuffer(0, { maxByteLength: 0 });
assert.sameValue(ab1.detached, false, 'Resizable ArrayBuffer with maxByteLength of 0 is not detached');
$DETACHBUFFER(ab1);
assert.sameValue(ab1.detached, true, 'Resizable ArrayBuffer with maxByteLength of 0 is now detached');
var ab2 = new ArrayBuffer(0, { maxByteLength: 23 });
assert.sameValue(ab2.detached, false, 'Resizable ArrayBuffer with maxByteLength of 23 is not detached');
$DETACHBUFFER(ab2);
assert.sameValue(ab2.detached, true, 'Resizable ArrayBuffer with maxByteLength of 23 is now detached');
var ab3 = new ArrayBuffer(42, { maxByteLength: 42 });
assert.sameValue(ab3.detached, false, 'Resizable ArrayBuffer with maxByteLength of 42 is not detached');
$DETACHBUFFER(ab3);
assert.sameValue(ab3.detached, true, 'Resizable ArrayBuffer with maxByteLength of 42 is now detached');

View File

@ -0,0 +1,24 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: Returns true if the buffer is detached, else false
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
4. Return IsDetachedBuffer(O).
includes: [detachArrayBuffer.js]
features: [ArrayBuffer, arraybuffer-transfer]
---*/
var ab = new ArrayBuffer(1);
assert.sameValue(ab.detached, false);
$DETACHBUFFER(ab);
assert.sameValue(ab.detached, true);

View File

@ -0,0 +1,19 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: Returns true if the buffer is detached, else false
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
4. Return IsDetachedBuffer(O).
features: [ArrayBuffer, arraybuffer-transfer]
---*/
assert.throws(TypeError, function() {
ArrayBuffer.prototype.detached;
});

View File

@ -0,0 +1,24 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: Returns true if the buffer is detached, else false
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
[...]
features: [ArrayBuffer, arraybuffer-transfer]
---*/
var getter = Object.getOwnPropertyDescriptor(
ArrayBuffer.prototype, 'detached'
).get;
assert.sameValue(typeof getter, 'function');
assert.throws(TypeError, function() {
getter();
});

View File

@ -0,0 +1,33 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: >
get ArrayBuffer.prototype.detached.length is 0.
info: |
get ArrayBuffer.prototype.detached
17 ECMAScript Standard Built-in Objects:
Every built-in Function object, including constructors, has a length
property whose value is an integer. Unless otherwise specified, this
value is equal to the largest number of named arguments shown in the
subclause headings for the function description, including optional
parameters. However, rest parameters shown using the form ...name
are not included in the default argument count.
Unless otherwise specified, the length property of a built-in Function
object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
[[Configurable]]: true }.
includes: [propertyHelper.js]
features: [ArrayBuffer, arraybuffer-transfer]
---*/
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'detached');
verifyProperty(desc.get, 'length', {
value: 0,
enumerable: false,
writable: false,
configurable: true
});

View File

@ -0,0 +1,24 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: >
get ArrayBuffer.prototype.detached
17 ECMAScript Standard Built-in Objects
Functions that are specified as get or set accessor functions of built-in
properties have "get " or "set " prepended to the property name string.
includes: [propertyHelper.js]
features: [ArrayBuffer, arraybuffer-transfer]
---*/
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'detached');
verifyProperty(desc.get, 'name', {
value: 'get detached',
enumerable: false,
writable: false,
configurable: true
});

View File

@ -0,0 +1,25 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: >
"detached" property of ArrayBuffer.prototype
info: |
ArrayBuffer.prototype.detached is an accessor property whose set
accessor function is undefined.
Section 17: Every accessor property described in clauses 18 through 26 and in
Annex B.2 has the attributes {[[Enumerable]]: false, [[Configurable]]: true }
includes: [propertyHelper.js]
features: [ArrayBuffer, arraybuffer-transfer]
---*/
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'detached');
assert.sameValue(desc.set, undefined);
assert.sameValue(typeof desc.get, 'function');
verifyProperty(ArrayBuffer.prototype, 'detached', {
enumerable: false,
configurable: true
});

View File

@ -0,0 +1,39 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: >
Throws a TypeError exception when `this` does not have a [[ArrayBufferData]]
internal slot
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
[...]
features: [DataView, Int8Array, ArrayBuffer, arraybuffer-transfer]
---*/
var getter = Object.getOwnPropertyDescriptor(
ArrayBuffer.prototype, "detached"
).get;
assert.sameValue(typeof getter, "function");
assert.throws(TypeError, function() {
getter.call({});
});
assert.throws(TypeError, function() {
getter.call([]);
});
var ta = new Int8Array(8);
assert.throws(TypeError, function() {
getter.call(ta);
});
var dv = new DataView(new ArrayBuffer(8), 0);
assert.throws(TypeError, function() {
getter.call(dv);
});

View File

@ -0,0 +1,48 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: Throws a TypeError exception when `this` is not Object
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
[...]
features: [Symbol, ArrayBuffer, arraybuffer-transfer]
---*/
var getter = Object.getOwnPropertyDescriptor(
ArrayBuffer.prototype, "detached"
).get;
assert.sameValue(typeof getter, "function");
assert.throws(TypeError, function() {
getter.call(undefined);
}, "this is undefined");
assert.throws(TypeError, function() {
getter.call(null);
}, "this is null");
assert.throws(TypeError, function() {
getter.call(42);
}, "this is 42");
assert.throws(TypeError, function() {
getter.call("1");
}, "this is a string");
assert.throws(TypeError, function() {
getter.call(true);
}, "this is true");
assert.throws(TypeError, function() {
getter.call(false);
}, "this is false");
var s = Symbol("s");
assert.throws(TypeError, function() {
getter.call(s);
}, "this is a Symbol");

View File

@ -0,0 +1,27 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: Throws a TypeError exception when `this` is a resizable SharedArrayBuffer
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
[...]
features: [SharedArrayBuffer, resizable-arraybuffer, ArrayBuffer, arraybuffer-transfer]
---*/
var detached = Object.getOwnPropertyDescriptor(
ArrayBuffer.prototype, "detached"
);
var getter = detached.get;
var sab = new SharedArrayBuffer(4);
assert.sameValue(typeof getter, "function");
assert.throws(TypeError, function() {
getter.call(sab);
}, "`this` cannot be a SharedArrayBuffer");

View File

@ -0,0 +1,27 @@
// Copyright (C) 2023 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-get-arraybuffer.prototype.detached
description: Throws a TypeError exception when `this` is a SharedArrayBuffer
info: |
get ArrayBuffer.prototype.detached
1. Let O be the this value.
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
[...]
features: [SharedArrayBuffer, ArrayBuffer, arraybuffer-transfer]
---*/
var detached = Object.getOwnPropertyDescriptor(
ArrayBuffer.prototype, "detached"
);
var getter = detached.get;
var sab = new SharedArrayBuffer(4);
assert.sameValue(typeof getter, "function");
assert.throws(TypeError, function() {
getter.call(sab);
}, "`this` cannot be a SharedArrayBuffer");