// deno-fmt-ignore-file // deno-lint-ignore-file // Copyright Joyent and Node contributors. All rights reserved. MIT license. // Taken from Node 18.12.1 // This file is automatically generated by "node/_tools/setup.ts". Do not modify this file manually // Flags: --expose-internals 'use strict'; require('../common'); const assert = require('assert'); const BufferList = require('internal/streams/buffer_list'); // Test empty buffer list. const emptyList = new BufferList(); emptyList.shift(); assert.deepStrictEqual(emptyList, new BufferList()); assert.strictEqual(emptyList.join(','), ''); assert.deepStrictEqual(emptyList.concat(0), Buffer.alloc(0)); const buf = Buffer.from('foo'); function testIterator(list, count) { // test iterator let len = 0; // eslint-disable-next-line no-unused-vars for (const x of list) { len++; } assert.strictEqual(len, count); } // Test buffer list with one element. const list = new BufferList(); testIterator(list, 0); list.push(buf); testIterator(list, 1); for (const x of list) { assert.strictEqual(x, buf); } const copy = list.concat(3); testIterator(copy, 3); assert.notStrictEqual(copy, buf); assert.deepStrictEqual(copy, buf); assert.strictEqual(list.join(','), 'foo'); const shifted = list.shift(); testIterator(list, 0); assert.strictEqual(shifted, buf); assert.deepStrictEqual(list, new BufferList()); { const list = new BufferList(); list.push('foo'); list.push('bar'); list.push('foo'); list.push('bar'); assert.strictEqual(list.consume(6, true), 'foobar'); assert.strictEqual(list.consume(6, true), 'foobar'); } { const list = new BufferList(); list.push('foo'); list.push('bar'); assert.strictEqual(list.consume(5, true), 'fooba'); } { const list = new BufferList(); list.push(buf); list.push(buf); list.push(buf); list.push(buf); assert.strictEqual(list.consume(6).toString(), 'foofoo'); assert.strictEqual(list.consume(6).toString(), 'foofoo'); } { const list = new BufferList(); list.push(buf); list.push(buf); assert.strictEqual(list.consume(5).toString(), 'foofo'); }