aboutsummaryrefslogtreecommitdiff
path: root/test/js
diff options
context:
space:
mode:
authorGravatar Ai Hoshino <ambiguous404@gmail.com> 2023-08-18 05:27:33 +0800
committerGravatar GitHub <noreply@github.com> 2023-08-17 14:27:33 -0700
commitb2f8ef4dff8c4fa0a12f3d11520bb0609bbaecde (patch)
tree740c9be7d79ee446598a2e4af184e44e8b5ef2b2 /test/js
parentb0e76a965d6580e1c09a9effe6df7aabccb670ef (diff)
downloadbun-b2f8ef4dff8c4fa0a12f3d11520bb0609bbaecde.tar.gz
bun-b2f8ef4dff8c4fa0a12f3d11520bb0609bbaecde.tar.zst
bun-b2f8ef4dff8c4fa0a12f3d11520bb0609bbaecde.zip
Fix(node:fs): add buffer parameter in fs.read callback. (#4191)
Close: #4178
Diffstat (limited to 'test/js')
-rw-r--r--test/js/node/fs/fs.test.ts116
1 files changed, 116 insertions, 0 deletions
diff --git a/test/js/node/fs/fs.test.ts b/test/js/node/fs/fs.test.ts
index 5b25beded..8bbaea70d 100644
--- a/test/js/node/fs/fs.test.ts
+++ b/test/js/node/fs/fs.test.ts
@@ -1692,3 +1692,119 @@ it("createReadStream on a large file emits readable event correctly", () => {
});
});
});
+
+describe("fs.read", () => {
+ it("should work with (fd, callback)", done => {
+ const path = `${tmpdir()}/bun-fs-read-1-${Date.now()}.txt`;
+ fs.writeFileSync(path, "bun");
+
+ const fd = fs.openSync(path, "r");
+ fs.read(fd, (err, bytesRead, buffer) => {
+ try {
+ expect(err).toBeNull();
+ expect(bytesRead).toBe(3);
+ expect(buffer).toStrictEqual(Buffer.concat([Buffer.from("bun"), Buffer.alloc(16381)]));
+ } catch (e) {
+ return done(e);
+ } finally {
+ unlinkSync(path);
+ }
+ done();
+ });
+ });
+ it("should work with (fd, options, callback)", done => {
+ const path = `${tmpdir()}/bun-fs-read-2-${Date.now()}.txt`;
+ fs.writeFileSync(path, "bun");
+
+ const fd = fs.openSync(path, "r");
+ const buffer = Buffer.alloc(16);
+ fs.read(fd, { buffer: buffer }, (err, bytesRead, buffer) => {
+ try {
+ expect(err).toBeNull();
+ expect(bytesRead).toBe(3);
+ expect(buffer.slice(0, bytesRead).toString()).toStrictEqual("bun");
+ } catch (e) {
+ return done(e);
+ } finally {
+ unlinkSync(path);
+ }
+ done();
+ });
+ });
+ it("should work with (fd, buffer, offset, length, position, callback)", done => {
+ const path = `${tmpdir()}/bun-fs-read-3-${Date.now()}.txt`;
+ fs.writeFileSync(path, "bun");
+
+ const fd = fs.openSync(path, "r");
+ const buffer = Buffer.alloc(16);
+ fs.read(fd, buffer, 0, buffer.length, 0, (err, bytesRead, buffer) => {
+ try {
+ expect(err).toBeNull();
+ expect(bytesRead).toBe(3);
+ expect(buffer.slice(0, bytesRead).toString()).toStrictEqual("bun");
+ } catch (e) {
+ return done(e);
+ } finally {
+ unlinkSync(path);
+ }
+ done();
+ });
+ });
+ it("should work with offset", done => {
+ const path = `${tmpdir()}/bun-fs-read-4-${Date.now()}.txt`;
+ fs.writeFileSync(path, "bun");
+
+ const fd = fs.openSync(path, "r");
+ const buffer = Buffer.alloc(16);
+ fs.read(fd, buffer, 1, buffer.length - 1, 0, (err, bytesRead, buffer) => {
+ try {
+ expect(err).toBeNull();
+ expect(bytesRead).toBe(3);
+ expect(buffer.slice(1, bytesRead + 1).toString()).toStrictEqual("bun");
+ } catch (e) {
+ return done(e);
+ } finally {
+ unlinkSync(path);
+ }
+ done();
+ });
+ });
+ it("should work with position", done => {
+ const path = `${tmpdir()}/bun-fs-read-5-${Date.now()}.txt`;
+ fs.writeFileSync(path, "bun");
+
+ const fd = fs.openSync(path, "r");
+ const buffer = Buffer.alloc(16);
+ fs.read(fd, buffer, 0, buffer.length, 1, (err, bytesRead, buffer) => {
+ try {
+ expect(err).toBeNull();
+ expect(bytesRead).toBe(2);
+ expect(buffer.slice(0, bytesRead).toString()).toStrictEqual("un");
+ } catch (e) {
+ return done(e);
+ } finally {
+ unlinkSync(path);
+ }
+ done();
+ });
+ });
+ it("should work with both position and offset", done => {
+ const path = `${tmpdir()}/bun-fs-read-6-${Date.now()}.txt`;
+ fs.writeFileSync(path, "bun");
+
+ const fd = fs.openSync(path, "r");
+ const buffer = Buffer.alloc(16);
+ fs.read(fd, buffer, 1, buffer.length - 1, 1, (err, bytesRead, buffer) => {
+ try {
+ expect(err).toBeNull();
+ expect(bytesRead).toBe(2);
+ expect(buffer.slice(1, bytesRead + 1).toString()).toStrictEqual("un");
+ } catch (e) {
+ return done(e);
+ } finally {
+ unlinkSync(path);
+ }
+ done();
+ });
+ });
+});