From 68fafb4cbe7f6fba782630bd59557a8814e400fb Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Tue, 21 Mar 2017 11:31:33 +0100 Subject: [PATCH] Tests for throwing a TypeError in the TypedArray constructor on a detached buffer Detached buffer causes an exception - If it's already detached going into the constructor - If the byteOffset coercion causes it to be detached Tests are valid in ES2017 --- .../TypedArrays/buffer-arg-detached.js | 20 +++++++++++++++++++ .../byteoffset-arg-detachbuffer.js | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 test/built-ins/TypedArrays/buffer-arg-detached.js create mode 100644 test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js diff --git a/test/built-ins/TypedArrays/buffer-arg-detached.js b/test/built-ins/TypedArrays/buffer-arg-detached.js new file mode 100644 index 0000000000..9e112d0bca --- /dev/null +++ b/test/built-ins/TypedArrays/buffer-arg-detached.js @@ -0,0 +1,20 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-buffer-byteoffset-length +description: If TypedArray() is passed a detached buffer, throw +info: > + 22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] ) + + ... + 8. If IsDetachedBuffer(buffer) is true, throw a TypeError exception. + ... +includes: [testTypedArray.js, detachArrayBuffer.js] +---*/ + +testWithTypedArrayConstructors(function(TA) { + var offset = TA.BYTES_PER_ELEMENT; + var buffer = new ArrayBuffer(3 * offset); + $DETACHBUFFER(buffer); + assert.throws(TypeError, () => new TA(buffer)); +}); diff --git a/test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js b/test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js new file mode 100644 index 0000000000..5f3406ce1c --- /dev/null +++ b/test/built-ins/TypedArrays/byteoffset-arg-detachbuffer.js @@ -0,0 +1,20 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-typedarray-buffer-byteoffset-length +description: If TypedArray() is passed a detached buffer, throw +info: > + 22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] ) + + ... + 8. If IsDetachedBuffer(buffer) is true, throw a TypeError exception. + ... +includes: [testTypedArray.js, detachArrayBuffer.js] +---*/ + +testWithTypedArrayConstructors(function(TA) { + var offset = TA.BYTES_PER_ELEMENT; + var buffer = new ArrayBuffer(3 * offset); + var byteOffset = { valueOf() { $DETACHBUFFER(buffer); return 1; } }; + assert.throws(TypeError, () => new TA(buffer, byteOffset)); +});