mirror of https://github.com/tc39/test262.git
ArrayBuffer.prototype.detached tests
See https://tc39.es/proposal-arraybuffer-transfer/
This commit is contained in:
parent
780b7b806e
commit
408ecd0987
|
@ -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');
|
|
@ -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);
|
|
@ -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;
|
||||||
|
});
|
|
@ -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();
|
||||||
|
});
|
|
@ -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
|
||||||
|
});
|
|
@ -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
|
||||||
|
});
|
|
@ -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
|
||||||
|
});
|
39
test/built-ins/ArrayBuffer/prototype/detached/this-has-no-arraybufferdata-internal.js
vendored
Normal file
39
test/built-ins/ArrayBuffer/prototype/detached/this-has-no-arraybufferdata-internal.js
vendored
Normal 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);
|
||||||
|
});
|
|
@ -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");
|
27
test/built-ins/ArrayBuffer/prototype/detached/this-is-sharedarraybuffer-resizable.js
vendored
Normal file
27
test/built-ins/ArrayBuffer/prototype/detached/this-is-sharedarraybuffer-resizable.js
vendored
Normal 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");
|
|
@ -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");
|
Loading…
Reference in New Issue