test: add tests for invalid UTF-8

Verify that `Blob.prototype.text()`, `streamConsumers.text()` and
`TextDecoder.prototype.decode()` work as expected with invalid UTF-8.

PR-URL: https://github.com/nodejs/node/pull/40351
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
This commit is contained in:
git-srinivas
2021-10-23 08:14:40 +05:30
committed by Luigi Pinca
parent d049a52204
commit dc35aef14c
3 changed files with 31 additions and 0 deletions

View File

@@ -87,6 +87,15 @@ assert.throws(() => new Blob({}), {
}));
}
{
const b = new Blob(['hello', new Uint8Array([0xed, 0xa0, 0x88])]);
assert.strictEqual(b.size, 8);
b.text().then(common.mustCall((text) => {
assert.strictEqual(text, 'hello\ufffd\ufffd\ufffd');
assert.strictEqual(text.length, 8);
}));
}
{
const b = new Blob(
[

View File

@@ -13,6 +13,7 @@ const {
} = require('stream/consumers');
const {
Readable,
PassThrough
} = require('stream');
@@ -73,6 +74,19 @@ const kArrayBuffer =
setTimeout(() => passthrough.end('there'), 10);
}
{
const readable = new Readable({
read() {}
});
text(readable).then((data) => {
assert.strictEqual(data, 'foo\ufffd\ufffd\ufffd');
});
readable.push(new Uint8Array([0x66, 0x6f, 0x6f, 0xed, 0xa0, 0x80]));
readable.push(null);
}
{
const passthrough = new PassThrough();

View File

@@ -191,3 +191,11 @@ if (common.hasIntl) {
}
);
}
// Test TextDecoder for incomplete UTF-8 byte sequence.
{
const decoder = new TextDecoder();
const chunk = new Uint8Array([0x66, 0x6f, 0x6f, 0xed]);
const str = decoder.decode(chunk);
assert.strictEqual(str, 'foo\ufffd');
}