| 'use strict'; |
| require('../common'); |
| const { Readable } = require('stream'); |
| const assert = require('assert'); |
| |
| { |
| // Call .setEncoding() while there are bytes already in the buffer. |
| const r = new Readable({ read() {} }); |
| |
| r.push(Buffer.from('a')); |
| r.push(Buffer.from('b')); |
| |
| r.setEncoding('utf8'); |
| const chunks = []; |
| r.on('data', (chunk) => chunks.push(chunk)); |
| |
| process.nextTick(() => { |
| assert.deepStrictEqual(chunks, ['ab']); |
| }); |
| } |
| |
| { |
| // Call .setEncoding() while the buffer contains a complete, |
| // but chunked character. |
| const r = new Readable({ read() {} }); |
| |
| r.push(Buffer.from([0xf0])); |
| r.push(Buffer.from([0x9f])); |
| r.push(Buffer.from([0x8e])); |
| r.push(Buffer.from([0x89])); |
| |
| r.setEncoding('utf8'); |
| const chunks = []; |
| r.on('data', (chunk) => chunks.push(chunk)); |
| |
| process.nextTick(() => { |
| assert.deepStrictEqual(chunks, ['🎉']); |
| }); |
| } |
| |
| { |
| // Call .setEncoding() while the buffer contains an incomplete character, |
| // and finish the character later. |
| const r = new Readable({ read() {} }); |
| |
| r.push(Buffer.from([0xf0])); |
| r.push(Buffer.from([0x9f])); |
| |
| r.setEncoding('utf8'); |
| |
| r.push(Buffer.from([0x8e])); |
| r.push(Buffer.from([0x89])); |
| |
| const chunks = []; |
| r.on('data', (chunk) => chunks.push(chunk)); |
| |
| process.nextTick(() => { |
| assert.deepStrictEqual(chunks, ['🎉']); |
| }); |
| } |