diff options
author | Benjamin Chen <benjaminlchen@gmail.com> | 2018-08-28 01:51:00 -0400 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-09-17 17:48:44 +0200 |
commit | e2325bcc0415a86a77faf06a8e85503db9f6618f (patch) | |
tree | da86baac51b5e8d0ec8331bf76d8920744809b1a | |
parent | 1b92214d097358040efb7d3ec5dff1736f364bc0 (diff) | |
download | android-node-v8-e2325bcc0415a86a77faf06a8e85503db9f6618f.tar.gz android-node-v8-e2325bcc0415a86a77faf06a8e85503db9f6618f.tar.bz2 android-node-v8-e2325bcc0415a86a77faf06a8e85503db9f6618f.zip |
string_decoder: support typed array or data view
Refs: https://github.com/nodejs/node/issues/1826
PR-URL: https://github.com/nodejs/node/pull/22562
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
-rw-r--r-- | doc/api/string_decoder.md | 12 | ||||
-rw-r--r-- | lib/string_decoder.js | 2 | ||||
-rw-r--r-- | test/parallel/test-string-decoder.js | 15 |
3 files changed, 21 insertions, 8 deletions
diff --git a/doc/api/string_decoder.md b/doc/api/string_decoder.md index 1311f37255..c2e5434ac7 100644 --- a/doc/api/string_decoder.md +++ b/doc/api/string_decoder.md @@ -59,7 +59,8 @@ Creates a new `StringDecoder` instance. added: v0.9.3 --> -* `buffer` {Buffer} A `Buffer` containing the bytes to decode. +* `buffer` {Buffer|TypedArray|DataView} A `Buffer`, or `TypedArray`, or + `DataView` containing the bytes to decode. * Returns: {string} Returns any remaining input stored in the internal buffer as a string. Bytes @@ -79,10 +80,11 @@ changes: character instead of one for each individual byte. --> -* `buffer` {Buffer} A `Buffer` containing the bytes to decode. +* `buffer` {Buffer|TypedArray|DataView} A `Buffer`, or `TypedArray`, or + `DataView` containing the bytes to decode. * Returns: {string} Returns a decoded string, ensuring that any incomplete multibyte characters at -the end of the `Buffer` are omitted from the returned string and stored in an -internal buffer for the next call to `stringDecoder.write()` or -`stringDecoder.end()`. + the end of the `Buffer`, or `TypedArray`, or `DataView` are omitted from the + returned string and stored in an internal buffer for the next call to + `stringDecoder.write()` or `stringDecoder.end()`. diff --git a/lib/string_decoder.js b/lib/string_decoder.js index b32249ad9e..e5f396cab3 100644 --- a/lib/string_decoder.js +++ b/lib/string_decoder.js @@ -73,7 +73,7 @@ StringDecoder.prototype.write = function write(buf) { return buf; if (!ArrayBuffer.isView(buf)) throw new ERR_INVALID_ARG_TYPE('buf', - ['Buffer', 'Uint8Array', 'ArrayBufferView'], + ['Buffer', 'TypedArray', 'DataView'], buf); return decode(this[kNativeDecoder], buf); }; diff --git a/test/parallel/test-string-decoder.js b/test/parallel/test-string-decoder.js index 6e4f4b121d..c4607672b0 100644 --- a/test/parallel/test-string-decoder.js +++ b/test/parallel/test-string-decoder.js @@ -97,6 +97,17 @@ assert.strictEqual(decoder.lastTotal, 3); assert.strictEqual(decoder.end(), '\ufffd'); +// ArrayBufferView tests +const arrayBufferViewStr = 'String for ArrayBufferView tests\n'; +const inputBuffer = Buffer.from(arrayBufferViewStr.repeat(8), 'utf8'); +for (const expectView of common.getArrayBufferViews(inputBuffer)) { + assert.strictEqual( + decoder.write(expectView), + inputBuffer.toString('utf8') + ); + assert.strictEqual(decoder.end(), ''); +} + decoder = new StringDecoder('utf8'); assert.strictEqual(decoder.write(Buffer.from('E18B', 'hex')), ''); assert.strictEqual(decoder.end(), '\ufffd'); @@ -174,8 +185,8 @@ common.expectsError( { code: 'ERR_INVALID_ARG_TYPE', type: TypeError, - message: 'The "buf" argument must be one of type Buffer, Uint8Array, or' + - ' ArrayBufferView. Received type object' + message: 'The "buf" argument must be one of type Buffer, TypedArray,' + + ' or DataView. Received type object' } ); |