diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/invoked-as-accessor.js b/test/built-ins/SharedArrayBuffer/prototype/growable/invoked-as-accessor.js new file mode 100644 index 0000000000..c3a8835864 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/invoked-as-accessor.js @@ -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-sharedarraybuffer.prototype.growable +description: Requires this value to have a [[ArrayBufferData]] internal slot +info: | + get SharedArrayBuffer.prototype.growable + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [resizable-arraybuffer] +---*/ + +assert.throws(TypeError, function() { + SharedArrayBuffer.prototype.growable; +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/invoked-as-func.js b/test/built-ins/SharedArrayBuffer/prototype/growable/invoked-as-func.js new file mode 100644 index 0000000000..b1be36ca6e --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/invoked-as-func.js @@ -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-sharedarraybuffer.prototype.growable +description: Throws a TypeError exception when invoked as a function +info: | + get SharedArrayBuffer.prototype.growable + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [resizable-arraybuffer] +---*/ + +var getter = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.prototype, 'growable' +).get; + +assert.sameValue(typeof getter, 'function'); + +assert.throws(TypeError, function() { + getter(); +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/length.js b/test/built-ins/SharedArrayBuffer/prototype/growable/length.js new file mode 100644 index 0000000000..d237046011 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/length.js @@ -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-sharedarraybuffer.prototype.growable +description: > + get SharedArrayBuffer.prototype.growable.length is 0. +info: | + get SharedArrayBuffer.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(SharedArrayBuffer.prototype, 'growable'); + +verifyProperty(desc.get, 'length', { + value: 0, + enumerable: false, + writable: false, + configurable: true +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/name.js b/test/built-ins/SharedArrayBuffer/prototype/growable/name.js new file mode 100644 index 0000000000..5ee9edd799 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/name.js @@ -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-sharedarraybuffer.prototype.growable +description: > + get SharedArrayBuffer.prototype.growable + + 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(SharedArrayBuffer.prototype, 'growable'); + +verifyProperty(desc.get, 'name', { + value: 'get growable', + enumerable: false, + writable: false, + configurable: true +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/prop-desc.js b/test/built-ins/SharedArrayBuffer/prototype/growable/prop-desc.js new file mode 100644 index 0000000000..88b86571f9 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/prop-desc.js @@ -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-sharedarraybuffer.prototype.growable +description: > + "growable" property of SharedArrayBuffer.prototype +info: | + SharedArrayBuffer.prototype.growable 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(SharedArrayBuffer.prototype, 'growable'); + +assert.sameValue(desc.set, undefined); +assert.sameValue(typeof desc.get, 'function'); + +verifyProperty(SharedArrayBuffer.prototype, 'growable', { + enumerable: false, + configurable: true +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/return-growable.js b/test/built-ins/SharedArrayBuffer/prototype/growable/return-growable.js new file mode 100644 index 0000000000..2c4bdb0d0f --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/return-growable.js @@ -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-sharedarraybuffer.prototype.growable +description: Return value according to [[ArrayBufferMaxByteLength]] internal slot +info: | + get SharedArrayBuffer.prototype.growable + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + 3. If IsSharedArrayBuffer(O) is false, 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 sab1 = new SharedArrayBuffer(1); + +assert.sameValue(sab1.growable, false); + +var sab2 = new SharedArrayBuffer(1, {maxByteLength: 1}); + +assert.sameValue(sab2.growable, true); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/this-has-no-arraybufferdata-internal.js b/test/built-ins/SharedArrayBuffer/prototype/growable/this-has-no-arraybufferdata-internal.js new file mode 100644 index 0000000000..1c666cc571 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/this-has-no-arraybufferdata-internal.js @@ -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-sharedarraybuffer.prototype.growable +description: > + Throws a TypeError exception when `this` does not have a [[ArrayBufferData]] + internal slot +info: | + get SharedArrayBuffer.prototype.growable + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [DataView, Int8Array, resizable-arraybuffer] +---*/ + +var getter = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.prototype, "growable" +).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 SharedArrayBuffer(8), 0); +assert.throws(TypeError, function() { + getter.call(dv); +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/this-is-arraybuffer.js b/test/built-ins/SharedArrayBuffer/prototype/growable/this-is-arraybuffer.js new file mode 100644 index 0000000000..2e41ddc7f6 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/this-is-arraybuffer.js @@ -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-sharedarraybuffer.prototype.growable +description: Throws a TypeError exception when `this` is an SharedArrayBuffer +info: | + get SharedArrayBuffer.prototype.growable + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + 3. If IsSharedArrayBuffer(O) is false, throw a TypeError exception. + [...] +features: [SharedArrayBuffer, resizable-arraybuffer] +---*/ + +var growable = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.prototype, "growable" +); + +var getter = growable.get; +var ab = new SharedArrayBuffer(4); + +assert.sameValue(typeof getter, "function"); + +assert.throws(TypeError, function() { + getter.call(ab); +}, "`this` cannot be an SharedArrayBuffer"); + +Object.defineProperties(ab, { growable: growable }); + +assert.throws(TypeError, function() { + ab.growable; +}, "`this` cannot be an SharedArrayBuffer"); diff --git a/test/built-ins/SharedArrayBuffer/prototype/growable/this-is-not-object.js b/test/built-ins/SharedArrayBuffer/prototype/growable/this-is-not-object.js new file mode 100644 index 0000000000..e55b8fd0ed --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/growable/this-is-not-object.js @@ -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-sharedarraybuffer.prototype.growable +description: Throws a TypeError exception when `this` is not Object +info: | + get SharedArrayBuffer.prototype.growable + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [Symbol, resizable-arraybuffer] +---*/ + +var getter = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.prototype, "growable" +).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"); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/invoked-as-accessor.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/invoked-as-accessor.js new file mode 100644 index 0000000000..a58d599b44 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/invoked-as-accessor.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: Requires this value to have a [[ArrayBufferData]] internal slot +info: | + get SharedArrayBuffer.prototype.maxByteLength + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [resizable-arraybuffer] +---*/ + +assert.throws(TypeError, function() { + SharedArrayBuffer.prototype.maxByteLength; +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/invoked-as-func.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/invoked-as-func.js new file mode 100644 index 0000000000..d07c2a38aa --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/invoked-as-func.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: Throws a TypeError exception when invoked as a function +info: | + get SharedArrayBuffer.prototype.maxByteLength + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [resizable-arraybuffer] +---*/ + +var getter = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.prototype, 'maxByteLength' +).get; + +assert.sameValue(typeof getter, 'function'); + +assert.throws(TypeError, function() { + getter(); +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/length.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/length.js new file mode 100644 index 0000000000..7b4a6e781c --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/length.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: > + get SharedArrayBuffer.prototype.maxByteLength.length is 0. +info: | + get SharedArrayBuffer.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(SharedArrayBuffer.prototype, 'maxByteLength'); + +verifyProperty(desc.get, 'length', { + value: 0, + enumerable: false, + writable: false, + configurable: true +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/name.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/name.js new file mode 100644 index 0000000000..31c668fe33 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/name.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: > + get SharedArrayBuffer.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(SharedArrayBuffer.prototype, 'maxByteLength'); + +verifyProperty(desc.get, 'name', { + value: 'get maxByteLength', + enumerable: false, + writable: false, + configurable: true +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/prop-desc.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/prop-desc.js new file mode 100644 index 0000000000..22f8a6ce7f --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/prop-desc.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: > + "maxByteLength" property of SharedArrayBuffer.prototype +info: | + SharedArrayBuffer.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(SharedArrayBuffer.prototype, 'maxByteLength'); + +assert.sameValue(desc.set, undefined); +assert.sameValue(typeof desc.get, 'function'); + +verifyProperty(SharedArrayBuffer.prototype, 'maxByteLength', { + enumerable: false, + configurable: true +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/return-maxbytelength-growable.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/return-maxbytelength-growable.js new file mode 100644 index 0000000000..4ed60bf793 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/return-maxbytelength-growable.js @@ -0,0 +1,27 @@ +// 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-sharedarraybuffer.prototype.maxbytelength +description: Return value from [[ArrayBufferMaxByteLength]] internal slot +info: | + 24.1.4.1 get SharedArrayBuffer.prototype.maxByteLength + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + 3. If IsSharedArrayBuffer(O) is false, throw a TypeError exception. + 4. If IsResizableArrayBuffer(O) is true, then + a. Let length be O.[[ArrayBufferMaxByteLength]]. + 5. Else, + [...] + 6. Return 𝔽(length). +features: [resizable-arraybuffer] +---*/ + +var ab1 = new SharedArrayBuffer(0, { maxByteLength: 0 }); +assert.sameValue(ab1.maxByteLength, 0); + +var ab2 = new SharedArrayBuffer(0, { maxByteLength: 23 }); +assert.sameValue(ab2.maxByteLength, 23); + +var ab3 = new SharedArrayBuffer(42, { maxByteLength: 42 }); +assert.sameValue(ab3.maxByteLength, 42); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/return-maxbytelength-non-growable.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/return-maxbytelength-non-growable.js new file mode 100644 index 0000000000..3957f784c1 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/return-maxbytelength-non-growable.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: Return value from [[ArrayBufferByteLength]] internal slot +info: | + 24.1.4.1 get SharedArrayBuffer.prototype.maxByteLength + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + 3. If IsSharedArrayBuffer(O) is false, throw a TypeError exception. + 4. If IsResizableArrayBuffer(O) is true, then + [...] + 5. Else, + a. Let length be O.[[ArrayBufferByteLength]]. + 6. Return 𝔽(length). +features: [resizable-arraybuffer] +---*/ + +var ab1 = new SharedArrayBuffer(0); +assert.sameValue(ab1.maxByteLength, 0); + +var ab2 = new SharedArrayBuffer(42); +assert.sameValue(ab2.maxByteLength, 42); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-has-no-arraybufferdata-internal.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-has-no-arraybufferdata-internal.js new file mode 100644 index 0000000000..fc00fbc158 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-has-no-arraybufferdata-internal.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: > + Throws a TypeError exception when `this` does not have a [[ArrayBufferData]] + internal slot +info: | + get SharedArrayBuffer.prototype.maxByteLength + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [DataView, Int8Array, resizable-arraybuffer] +---*/ + +var getter = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.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 SharedArrayBuffer(8), 0); +assert.throws(TypeError, function() { + getter.call(dv); +}); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-is-arraybuffer.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-is-arraybuffer.js new file mode 100644 index 0000000000..53ceb407f6 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-is-arraybuffer.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: Throws a TypeError exception when `this` is an ArrayBuffer +info: | + get SharedArrayBuffer.prototype.maxByteLength + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + 3. If IsSharedArrayBuffer(O) is false, throw a TypeError exception. + [...] +features: [ArrayBuffer, resizable-arraybuffer] +---*/ + +var maxByteLength = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.prototype, "maxByteLength" +); + +var getter = maxByteLength.get; +var ab = new ArrayBuffer(4); + +assert.sameValue(typeof getter, "function"); + +assert.throws(TypeError, function() { + getter.call(ab); +}, "`this` cannot be an ArrayBuffer"); + +Object.defineProperties(sab, { maxByteLength: maxByteLength }); + +assert.throws(TypeError, function() { + ab.maxByteLength; +}, "`this` cannot be an ArrayBuffer"); diff --git a/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-is-not-object.js b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-is-not-object.js new file mode 100644 index 0000000000..9afa3cf857 --- /dev/null +++ b/test/built-ins/SharedArrayBuffer/prototype/maxByteLength/this-is-not-object.js @@ -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-sharedarraybuffer.prototype.maxbytelength +description: Throws a TypeError exception when `this` is not Object +info: | + get SharedArrayBuffer.prototype.maxByteLength + + 1. Let O be the this value. + 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + [...] +features: [Symbol, resizable-arraybuffer] +---*/ + +var getter = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.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");