summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Chen <benjaminlchen@gmail.com>2018-08-28 01:51:00 -0400
committerAnna Henningsen <anna@addaleax.net>2018-09-17 17:48:44 +0200
commite2325bcc0415a86a77faf06a8e85503db9f6618f (patch)
treeda86baac51b5e8d0ec8331bf76d8920744809b1a
parent1b92214d097358040efb7d3ec5dff1736f364bc0 (diff)
downloadandroid-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.md12
-rw-r--r--lib/string_decoder.js2
-rw-r--r--test/parallel/test-string-decoder.js15
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'
}
);