aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/bufferlist.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'test/bun.js/bufferlist.test.ts')
-rw-r--r--test/bun.js/bufferlist.test.ts187
1 files changed, 187 insertions, 0 deletions
diff --git a/test/bun.js/bufferlist.test.ts b/test/bun.js/bufferlist.test.ts
new file mode 100644
index 000000000..e344d49b4
--- /dev/null
+++ b/test/bun.js/bufferlist.test.ts
@@ -0,0 +1,187 @@
+import { Readable } from "stream";
+import { it, expect } from "bun:test";
+
+function makeUint8Array(str) {
+ return new Uint8Array([].map.call(str, function(ch) {
+ return ch.charCodeAt(0);
+ }));
+}
+
+it("should work with .clear()", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.push({})).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.push({})).toBeUndefined();
+ expect(list.length).toBe(2);
+ expect(list.clear()).toBeUndefined();
+ expect(list.length).toBe(0);
+});
+
+it("should work with .concat()", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.push(makeUint8Array("foo"))).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.concat(3)).toEqual(new Uint8Array([ 102, 111, 111 ]));
+ expect(list.push(makeUint8Array("bar"))).toBeUndefined();
+ expect(list.length).toBe(2);
+ expect(list.concat(10)).toEqual(new Uint8Array([
+ 102, 111, 111, 98, 97,
+ 114, 0, 0, 0, 0,
+ ]));
+});
+
+it("should fail on .concat() with invalid items", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.push("foo")).toBeUndefined();
+ expect(() => {
+ list.concat(42);
+ }).toThrow(TypeError);
+});
+
+it("should fail on .concat() buffer overflow", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.push(makeUint8Array("foo"))).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(() => {
+ list.concat(2);
+ }).toThrow(RangeError);
+ expect(list.push(makeUint8Array("bar"))).toBeUndefined();
+ expect(list.length).toBe(2);
+ expect(() => {
+ list.concat(5);
+ }).toThrow(RangeError);
+});
+
+it("should work with .consume() on strings", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.consume(42, true)).toBe("");
+ expect(list.push("foo")).toBeUndefined();
+ expect(list.push("bar")).toBeUndefined();
+ expect(list.push("baz")).toBeUndefined();
+ expect(list.push("moo")).toBeUndefined();
+ expect(list.push("moz")).toBeUndefined();
+ expect(list.length).toBe(5);
+ expect(list.consume(3, true)).toBe("foo");
+ expect(list.length).toBe(4);
+ expect(list.consume(4, true)).toBe("barb");
+ expect(list.length).toBe(3);
+ expect(list.consume(256, true)).toBe("azmoomoz");
+ expect(list.length).toBe(0);
+});
+
+it("should work with .consume() on buffers", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.consume(42, false)).toEqual(new Uint8Array());
+ expect(list.push(makeUint8Array("foo"))).toBeUndefined();
+ expect(list.push(makeUint8Array("bar"))).toBeUndefined();
+ expect(list.push(makeUint8Array("baz"))).toBeUndefined();
+ expect(list.push(makeUint8Array("moo"))).toBeUndefined();
+ expect(list.push(makeUint8Array("moz"))).toBeUndefined();
+ expect(list.length).toBe(5);
+ expect(list.consume(3, false)).toEqual(makeUint8Array("foo"));
+ expect(list.length).toBe(4);
+ expect(list.consume(2, false)).toEqual(makeUint8Array("ba"));
+ expect(list.length).toBe(4);
+ expect(list.consume(4, false)).toEqual(makeUint8Array("rbaz"));
+ expect(list.length).toBe(2);
+ expect(list.consume(10, false)).toEqual(new Uint8Array([
+ 109, 111, 111, 109, 111,
+ 122, 0, 0, 0, 0,
+ ]));
+ expect(list.length).toBe(0);
+});
+
+it("should fail on .consume() with invalid items", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.push("foo")).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.consume(0, false)).toEqual(new Uint8Array([]));
+ expect(() => {
+ list.consume(1, false);
+ }).toThrow(TypeError);
+ expect(list.consume(3, true)).toBe("foo");
+ expect(list.length).toBe(0);
+ expect(list.push(makeUint8Array("bar"))).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.consume(0, true)).toEqual("");
+ expect(() => {
+ list.consume(1, true);
+ }).toThrow(TypeError);
+ expect(list.consume(3, false)).toEqual(new Uint8Array([ 98, 97, 114 ]));
+});
+
+it("should work with .first()", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.first()).toBeUndefined();
+ const item = {};
+ expect(list.push(item)).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.first()).toBe(item);
+});
+
+it("should work with .join()", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.push(42)).toBeUndefined();
+ expect(list.push(null)).toBeUndefined();
+ expect(list.push("foo")).toBeUndefined();
+ expect(list.push(makeUint8Array("bar"))).toBeUndefined();
+ expect(list.length).toBe(4);
+ expect(list.join("")).toBe("42nullfoo98,97,114");
+ expect(list.join(",")).toBe("42,null,foo,98,97,114");
+ expect(list.join(" baz ")).toBe("42 baz null baz foo baz 98,97,114");
+});
+
+it("should work with .push()", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ const item1 = {};
+ expect(list.push(item1)).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.first()).toBe(item1);
+ const item2 = {};
+ expect(list.push(item2)).toBeUndefined();
+ expect(list.length).toBe(2);
+ expect(list.shift()).toBe(item1);
+ expect(list.shift()).toBe(item2);
+ expect(list.shift()).toBeUndefined();
+});
+
+it("should work with .shift()", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ expect(list.shift()).toBeUndefined();
+ const item = {};
+ expect(list.push(item)).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.shift()).toBe(item);
+ expect(list.shift()).toBeUndefined();
+});
+
+it("should work with .unshift()", () => {
+ const list = new Readable().readableBuffer;
+ expect(list.length).toBe(0);
+ const item1 = {};
+ expect(list.unshift(item1)).toBeUndefined();
+ expect(list.length).toBe(1);
+ expect(list.first()).toBe(item1);
+ const item2 = {};
+ expect(list.push(item2)).toBeUndefined();
+ expect(list.length).toBe(2);
+ expect(list.first()).toBe(item1);
+ const item3 = {};
+ expect(list.unshift(item3)).toBeUndefined();
+ expect(list.length).toBe(3);
+ expect(list.shift()).toBe(item3);
+ expect(list.shift()).toBe(item1);
+ expect(list.shift()).toBe(item2);
+ expect(list.shift()).toBeUndefined();
+});