mirror of https://github.com/tc39/test262.git
Resizable ArrayBuffer: ArrayBuffer accessors (#3020)
* Add "feature" for "Resizable ArrayBuffer" proposal * Resizable ArrayBuffer: ArrayBuffer accessors * fixup! Resizable ArrayBuffer: ArrayBuffer accessors
This commit is contained in:
parent
93ad86b859
commit
4da5c800a3
|
@ -0,0 +1,22 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: Returns 0 if the buffer is detached
|
||||
info: |
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
|
||||
4. If IsDetachedBuffer(O) is true, return +0𝔽.
|
||||
[...]
|
||||
includes: [detachArrayBuffer.js]
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var ab = new ArrayBuffer(1);
|
||||
|
||||
$DETACHBUFFER(ab);
|
||||
|
||||
assert.sameValue(ab.maxByteLength, 0);
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: Requires this value to have a [[ArrayBufferData]] internal slot
|
||||
info: |
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
ArrayBuffer.prototype.maxByteLength;
|
||||
});
|
|
@ -0,0 +1,23 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: Throws a TypeError exception when invoked as a function
|
||||
info: |
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var getter = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, 'maxByteLength'
|
||||
).get;
|
||||
|
||||
assert.sameValue(typeof getter, 'function');
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
getter();
|
||||
});
|
|
@ -0,0 +1,32 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: >
|
||||
get ArrayBuffer.prototype.maxByteLength.length is 0.
|
||||
info: |
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
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: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'maxByteLength');
|
||||
|
||||
verifyProperty(desc.get, 'length', {
|
||||
value: 0,
|
||||
enumerable: false,
|
||||
writable: false,
|
||||
configurable: true
|
||||
});
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: >
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
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: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'maxByteLength');
|
||||
|
||||
verifyProperty(desc.get, 'name', {
|
||||
value: 'get maxByteLength',
|
||||
enumerable: false,
|
||||
writable: false,
|
||||
configurable: true
|
||||
});
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: >
|
||||
"maxByteLength" property of ArrayBuffer.prototype
|
||||
info: |
|
||||
ArrayBuffer.prototype.maxByteLength 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: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'maxByteLength');
|
||||
|
||||
assert.sameValue(desc.set, undefined);
|
||||
assert.sameValue(typeof desc.get, 'function');
|
||||
|
||||
verifyProperty(ArrayBuffer.prototype, 'maxByteLength', {
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
25
test/built-ins/ArrayBuffer/prototype/maxByteLength/return-maxbytelength-non-resizable.js
vendored
Normal file
25
test/built-ins/ArrayBuffer/prototype/maxByteLength/return-maxbytelength-non-resizable.js
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: Return value from [[ArrayBufferByteLength]] internal slot
|
||||
info: |
|
||||
24.1.4.1 get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
|
||||
4. If IsDetachedBuffer(O) is true, return +0𝔽.
|
||||
5. If IsResizableArrayBuffer(O) is true, then
|
||||
[...]
|
||||
6. Else,
|
||||
a. Let length be O.[[ArrayBufferByteLength]].
|
||||
7. Return 𝔽(length).
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var ab1 = new ArrayBuffer(0);
|
||||
assert.sameValue(ab1.maxByteLength, 0);
|
||||
|
||||
var ab2 = new ArrayBuffer(42);
|
||||
assert.sameValue(ab2.maxByteLength, 42);
|
28
test/built-ins/ArrayBuffer/prototype/maxByteLength/return-maxbytelength-resizable.js
vendored
Normal file
28
test/built-ins/ArrayBuffer/prototype/maxByteLength/return-maxbytelength-resizable.js
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: Return value from [[ArrayBufferMaxByteLength]] internal slot
|
||||
info: |
|
||||
24.1.4.1 get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
|
||||
4. If IsDetachedBuffer(O) is true, return +0𝔽.
|
||||
5. If IsResizableArrayBuffer(O) is true, then
|
||||
a. Let length be O.[[ArrayBufferMaxByteLength]].
|
||||
6. Else,
|
||||
[...]
|
||||
7. Return 𝔽(length).
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var ab1 = new ArrayBuffer(0, { maxByteLength: 0 });
|
||||
assert.sameValue(ab1.maxByteLength, 0);
|
||||
|
||||
var ab2 = new ArrayBuffer(0, { maxByteLength: 23 });
|
||||
assert.sameValue(ab2.maxByteLength, 23);
|
||||
|
||||
var ab3 = new ArrayBuffer(42, { maxByteLength: 42 });
|
||||
assert.sameValue(ab3.maxByteLength, 42);
|
39
test/built-ins/ArrayBuffer/prototype/maxByteLength/this-has-no-arraybufferdata-internal.js
vendored
Normal file
39
test/built-ins/ArrayBuffer/prototype/maxByteLength/this-has-no-arraybufferdata-internal.js
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: >
|
||||
Throws a TypeError exception when `this` does not have a [[ArrayBufferData]]
|
||||
internal slot
|
||||
info: |
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [DataView, Int8Array, resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var getter = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, "maxByteLength"
|
||||
).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) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: Throws a TypeError exception when `this` is not Object
|
||||
info: |
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [Symbol, resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var getter = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, "maxByteLength"
|
||||
).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");
|
33
test/built-ins/ArrayBuffer/prototype/maxByteLength/this-is-sharedarraybuffer.js
vendored
Normal file
33
test/built-ins/ArrayBuffer/prototype/maxByteLength/this-is-sharedarraybuffer.js
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.maxbytelength
|
||||
description: Throws a TypeError exception when `this` is a SharedArrayBuffer
|
||||
info: |
|
||||
get ArrayBuffer.prototype.maxByteLength
|
||||
|
||||
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]
|
||||
---*/
|
||||
|
||||
var maxByteLength = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, "maxByteLength"
|
||||
);
|
||||
|
||||
var getter = maxByteLength.get;
|
||||
var sab = new SharedArrayBuffer(4);
|
||||
|
||||
assert.sameValue(typeof getter, "function");
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
getter.call(sab);
|
||||
}, "`this` cannot be a SharedArrayBuffer");
|
||||
|
||||
Object.defineProperties(sab, { maxByteLength: maxByteLength });
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
sab.maxByteLength;
|
||||
}, "`this` cannot be a SharedArrayBuffer");
|
|
@ -0,0 +1,34 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: Unaffected by buffer's attachedness
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
|
||||
4. Return IsResizableArrayBuffer(O).
|
||||
|
||||
IsResizableArrayBuffer ( arrayBuffer )
|
||||
|
||||
1. Assert: Type(arrayBuffer) is Object and arrayBuffer has an
|
||||
[[ArrayBufferData]] internal slot.
|
||||
2. If buffer has an [[ArrayBufferMaxByteLength]] internal slot, return true.
|
||||
3. Return false.
|
||||
includes: [detachArrayBuffer.js]
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var ab1 = new ArrayBuffer(1);
|
||||
|
||||
$DETACHBUFFER(ab1);
|
||||
|
||||
assert.sameValue(ab1.resizable, false);
|
||||
|
||||
var ab2 = new ArrayBuffer(1, {maxByteLength: 1});
|
||||
|
||||
$DETACHBUFFER(ab2);
|
||||
|
||||
assert.sameValue(ab2.resizable, true);
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: Requires this value to have a [[ArrayBufferData]] internal slot
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
ArrayBuffer.prototype.resizable;
|
||||
});
|
|
@ -0,0 +1,23 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: Throws a TypeError exception when invoked as a function
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var getter = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, 'resizable'
|
||||
).get;
|
||||
|
||||
assert.sameValue(typeof getter, 'function');
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
getter();
|
||||
});
|
|
@ -0,0 +1,32 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: >
|
||||
get ArrayBuffer.prototype.resizable.length is 0.
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizeable
|
||||
|
||||
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: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'resizable');
|
||||
|
||||
verifyProperty(desc.get, 'length', {
|
||||
value: 0,
|
||||
enumerable: false,
|
||||
writable: false,
|
||||
configurable: true
|
||||
});
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: >
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
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: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'resizable');
|
||||
|
||||
verifyProperty(desc.get, 'name', {
|
||||
value: 'get resizable',
|
||||
enumerable: false,
|
||||
writable: false,
|
||||
configurable: true
|
||||
});
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: >
|
||||
"resizable" property of ArrayBuffer.prototype
|
||||
info: |
|
||||
ArrayBuffer.prototype.resizable 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: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var desc = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'resizable');
|
||||
|
||||
assert.sameValue(desc.set, undefined);
|
||||
assert.sameValue(typeof desc.get, 'function');
|
||||
|
||||
verifyProperty(ArrayBuffer.prototype, 'resizable', {
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
|
@ -0,0 +1,29 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: Return value according to [[ArrayBufferMaxByteLength]] internal slot
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
|
||||
4. Return IsResizableArrayBuffer(O).
|
||||
|
||||
IsResizableArrayBuffer ( arrayBuffer )
|
||||
|
||||
1. Assert: Type(arrayBuffer) is Object and arrayBuffer has an
|
||||
[[ArrayBufferData]] internal slot.
|
||||
2. If buffer has an [[ArrayBufferMaxByteLength]] internal slot, return true.
|
||||
3. Return false.
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var ab1 = new ArrayBuffer(1);
|
||||
|
||||
assert.sameValue(ab1.resizable, false);
|
||||
|
||||
var ab2 = new ArrayBuffer(1, {maxByteLength: 1});
|
||||
|
||||
assert.sameValue(ab2.resizable, true);
|
39
test/built-ins/ArrayBuffer/prototype/resizable/this-has-no-arraybufferdata-internal.js
vendored
Normal file
39
test/built-ins/ArrayBuffer/prototype/resizable/this-has-no-arraybufferdata-internal.js
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: >
|
||||
Throws a TypeError exception when `this` does not have a [[ArrayBufferData]]
|
||||
internal slot
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [DataView, Int8Array, resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var getter = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, "resizable"
|
||||
).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) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: Throws a TypeError exception when `this` is not Object
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
1. Let O be the this value.
|
||||
2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
|
||||
[...]
|
||||
features: [Symbol, resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
var getter = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, "resizable"
|
||||
).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");
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright (C) 2021 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-get-arraybuffer.prototype.resizable
|
||||
description: Throws a TypeError exception when `this` is a SharedArrayBuffer
|
||||
info: |
|
||||
get ArrayBuffer.prototype.resizable
|
||||
|
||||
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]
|
||||
---*/
|
||||
|
||||
var resizable = Object.getOwnPropertyDescriptor(
|
||||
ArrayBuffer.prototype, "resizable"
|
||||
);
|
||||
|
||||
var getter = resizable.get;
|
||||
var sab = new SharedArrayBuffer(4);
|
||||
|
||||
assert.sameValue(typeof getter, "function");
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
getter.call(sab);
|
||||
}, "`this` cannot be a SharedArrayBuffer");
|
||||
|
||||
Object.defineProperties(sab, { resizable: resizable });
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
sab.resizable;
|
||||
}, "`this` cannot be a SharedArrayBuffer");
|
Loading…
Reference in New Issue