1'use strict'; 2require('../common'); 3const { Readable } = require('stream'); 4const assert = require('assert'); 5 6{ 7 // Call .setEncoding() while there are bytes already in the buffer. 8 const r = new Readable({ read() {} }); 9 10 r.push(Buffer.from('a')); 11 r.push(Buffer.from('b')); 12 13 r.setEncoding('utf8'); 14 const chunks = []; 15 r.on('data', (chunk) => chunks.push(chunk)); 16 17 process.nextTick(() => { 18 assert.deepStrictEqual(chunks, ['ab']); 19 }); 20} 21 22{ 23 // Call .setEncoding() while the buffer contains a complete, 24 // but chunked character. 25 const r = new Readable({ read() {} }); 26 27 r.push(Buffer.from([0xf0])); 28 r.push(Buffer.from([0x9f])); 29 r.push(Buffer.from([0x8e])); 30 r.push(Buffer.from([0x89])); 31 32 r.setEncoding('utf8'); 33 const chunks = []; 34 r.on('data', (chunk) => chunks.push(chunk)); 35 36 process.nextTick(() => { 37 assert.deepStrictEqual(chunks, ['��']); 38 }); 39} 40 41{ 42 // Call .setEncoding() while the buffer contains an incomplete character, 43 // and finish the character later. 44 const r = new Readable({ read() {} }); 45 46 r.push(Buffer.from([0xf0])); 47 r.push(Buffer.from([0x9f])); 48 49 r.setEncoding('utf8'); 50 51 r.push(Buffer.from([0x8e])); 52 r.push(Buffer.from([0x89])); 53 54 const chunks = []; 55 r.on('data', (chunk) => chunks.push(chunk)); 56 57 process.nextTick(() => { 58 assert.deepStrictEqual(chunks, ['��']); 59 }); 60} 61