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