diff --git a/test/parallel/test-blob.js b/test/parallel/test-blob.js index 2ac91ac99c9bcc..39301e85c9c9b6 100644 --- a/test/parallel/test-blob.js +++ b/test/parallel/test-blob.js @@ -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( [ diff --git a/test/parallel/test-stream-consumers.js b/test/parallel/test-stream-consumers.js index 1a3b6ce00200d4..bdcc6fc6ff1b21 100644 --- a/test/parallel/test-stream-consumers.js +++ b/test/parallel/test-stream-consumers.js @@ -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(); diff --git a/test/parallel/test-whatwg-encoding-custom-textdecoder.js b/test/parallel/test-whatwg-encoding-custom-textdecoder.js index 877cd43734451b..1fa65164c70678 100644 --- a/test/parallel/test-whatwg-encoding-custom-textdecoder.js +++ b/test/parallel/test-whatwg-encoding-custom-textdecoder.js @@ -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'); +}