diff options
Diffstat (limited to 'tests/unit_node/_fs/_fs_read_test.ts')
-rw-r--r-- | tests/unit_node/_fs/_fs_read_test.ts | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/tests/unit_node/_fs/_fs_read_test.ts b/tests/unit_node/_fs/_fs_read_test.ts index 42e8fed73..288e4a57c 100644 --- a/tests/unit_node/_fs/_fs_read_test.ts +++ b/tests/unit_node/_fs/_fs_read_test.ts @@ -1,4 +1,5 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +/// <reference types="npm:@types/node" /> import { assertEquals, assertFalse, @@ -13,21 +14,21 @@ import { closeSync } from "node:fs"; async function readTest( testData: string, - buffer: Buffer, + buffer: NodeJS.ArrayBufferView, offset: number, length: number, position: number | null = null, expected: ( fd: number, bytesRead: number | null, - data: Buffer | undefined, + data: ArrayBufferView | undefined, ) => void, ) { let fd1 = 0; await new Promise<{ fd: number; bytesRead: number | null; - data: Buffer | undefined; + data: ArrayBufferView | undefined; }>((resolve, reject) => { open(testData, "r", (err, fd) => { if (err) reject(err); @@ -320,3 +321,35 @@ Deno.test({ closeSync(fd); }, }); + +Deno.test({ + name: "accepts non Uint8Array buffer", + async fn() { + const moduleDir = path.dirname(path.fromFileUrl(import.meta.url)); + const testData = path.resolve(moduleDir, "testdata", "hello.txt"); + const buffer = new ArrayBuffer(1024); + const buf = new Int8Array(buffer); + await readTest( + testData, + buf, + buf.byteOffset, + buf.byteLength, + null, + (_fd, bytesRead, data) => { + assertStrictEquals(bytesRead, 11); + assertEquals(data instanceof Buffer, true); + assertMatch((data as Buffer).toString(), /hello world/); + }, + ); + const fd = openSync(testData, "r"); + + try { + const nRead = readSync(fd, buf); + const expected = new TextEncoder().encode("hello world"); + + assertEquals(buf.slice(0, nRead), new Int8Array(expected.buffer)); + } finally { + closeSync(fd); + } + }, +}); |