diff --git a/test/README.md b/test/README.md index a9ea434a235..9a3edd067ab 100644 --- a/test/README.md +++ b/test/README.md @@ -220,6 +220,12 @@ The expected error should be [subclassed by the `internal/errors` module](https: Tests whether `name` and `expected` are part of a raised warning. +## getArrayBufferViews(buf) +* `buf` [<Buffer>](https://nodejs.org/api/buffer.html#buffer_class_buffer) +* return [<ArrayBufferView[]>](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) + +Returns an instance of all possible `ArrayBufferView`s of the provided Buffer. + ### hasCrypto * return [<Boolean>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) diff --git a/test/common.js b/test/common.js index e77ee100cbe..ba377bebd13 100644 --- a/test/common.js +++ b/test/common.js @@ -654,3 +654,29 @@ exports.skipIfInspectorDisabled = function skipIfInspectorDisabled() { process.exit(0); } }; + +const arrayBufferViews = [ + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array, + DataView +]; + +exports.getArrayBufferViews = function getArrayBufferViews(buf) { + const { buffer, byteOffset, byteLength } = buf; + + const out = []; + for (const type of arrayBufferViews) { + const { BYTES_PER_ELEMENT = 1 } = type; + if (byteLength % BYTES_PER_ELEMENT === 0) { + out.push(new type(buffer, byteOffset, byteLength / BYTES_PER_ELEMENT)); + } + } + return out; +};