diff --git a/ext/node/polyfills/_fs/_fs_dirent.ts b/ext/node/polyfills/_fs/_fs_dirent.ts index d39655ec80..ab1f229532 100644 --- a/ext/node/polyfills/_fs/_fs_dirent.ts +++ b/ext/node/polyfills/_fs/_fs_dirent.ts @@ -44,7 +44,7 @@ export default class Dirent { } isSymbolicLink(): boolean { - return this.entry.isSymLink; + return this.entry.isSymlink; } /** @deprecated */ diff --git a/tests/unit_node/_fs/_fs_dirent_test.ts b/tests/unit_node/_fs/_fs_dirent_test.ts deleted file mode 100644 index ed722bb555..0000000000 --- a/tests/unit_node/_fs/_fs_dirent_test.ts +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. -import { assert, assertEquals, assertThrows } from "@std/assert/mod.ts"; -import { Dirent } from "node:fs"; - -class DirEntryMock implements Deno.DirEntry { - name = ""; - isFile = false; - isDirectory = false; - isSymlink = false; -} - -Deno.test({ - name: "Directories are correctly identified", - fn() { - const entry = new DirEntryMock(); - entry.isDirectory = true; - entry.isFile = false; - entry.isSymlink = false; - const dir = new Dirent("foo", "parent", entry); - assert(dir.isDirectory()); - assert(!dir.isFile()); - assert(!dir.isSymbolicLink()); - }, -}); - -Deno.test({ - name: "Files are correctly identified", - fn() { - const entry = new DirEntryMock(); - entry.isDirectory = false; - entry.isFile = true; - entry.isSymlink = false; - const dir = new Dirent("foo", "parent", entry); - assert(!dir.isDirectory()); - assert(dir.isFile()); - assert(!dir.isSymbolicLink()); - }, -}); - -Deno.test({ - name: "Symlinks are correctly identified", - fn() { - const entry = new DirEntryMock(); - entry.isDirectory = false; - entry.isFile = false; - entry.isSymlink = true; - const dir = new Dirent("foo", "parent", entry); - assert(!dir.isDirectory()); - assert(!dir.isFile()); - assert(dir.isSymbolicLink()); - }, -}); - -Deno.test({ - name: "File name is correct", - fn() { - const entry = new DirEntryMock(); - const mock = new Dirent("my_file", "parent", entry); - assertEquals(mock.name, "my_file"); - }, -}); - -Deno.test({ - name: "Socket and FIFO pipes aren't yet available", - fn() { - const entry = new DirEntryMock(); - const dir = new Dirent("my_file", "parent", entry); - assertThrows( - () => dir.isFIFO(), - Error, - "does not yet support", - ); - assertThrows( - () => dir.isSocket(), - Error, - "does not yet support", - ); - }, -}); - -Deno.test({ - name: "Path and parent path is correct", - fn() { - const entry = new DirEntryMock(); - const dir = new Dirent("my_file", "/home/user", entry); - assertEquals(dir.name, "my_file"); - assertEquals(dir.path, "/home/user"); - assertEquals(dir.parentPath, "/home/user"); - }, -}); diff --git a/tests/unit_node/_fs/_fs_readdir_test.ts b/tests/unit_node/_fs/_fs_readdir_test.ts index b54e15816a..2cc1d6b953 100644 --- a/tests/unit_node/_fs/_fs_readdir_test.ts +++ b/tests/unit_node/_fs/_fs_readdir_test.ts @@ -1,7 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { assertEquals, assertNotEquals, fail } from "@std/assert/mod.ts"; import { assertCallbackErrorUncaught } from "../_test_utils.ts"; -import { readdir, readdirSync } from "node:fs"; +import { Dirent, readdir, readdirSync } from "node:fs"; import { join } from "@std/path/mod.ts"; Deno.test({ @@ -90,3 +90,66 @@ Deno.test("[std/node/fs] readdir callback isn't called twice if error is thrown" }, }); }); + +Deno.test("[node/fs] readdir creates Dirent instances", async () => { + const tempDir = await Deno.makeTempDir(); + await Deno.writeTextFile(join(tempDir, "file.txt"), "file content"); + await Deno.symlink(join(tempDir, "file.txt"), join(tempDir, "link")); + await Deno.mkdir(join(tempDir, "dir")); + + try { + const result = await new Promise((resolve, reject) => { + readdir(tempDir, { withFileTypes: true }, (err, files) => { + if (err) reject(err); + resolve(files); + }); + }); + result.sort((a, b) => a.name.localeCompare(b.name)); + + assertEquals(result[0].name, "dir"); + assertEquals(result[0].isFile(), false); + assertEquals(result[0].isDirectory(), true); + assertEquals(result[0].isSymbolicLink(), false); + + assertEquals(result[1].name, "file.txt"); + assertEquals(result[1].isFile(), true); + assertEquals(result[1].isDirectory(), false); + assertEquals(result[1].isSymbolicLink(), false); + + assertEquals(result[2].name, "link"); + assertEquals(result[2].isFile(), false); + assertEquals(result[2].isDirectory(), false); + assertEquals(result[2].isSymbolicLink(), true); + } finally { + await Deno.remove(tempDir, { recursive: true }); + } +}); + +Deno.test("[node/fs] readdirSync creates Dirent instances", async () => { + const tempDir = await Deno.makeTempDir(); + await Deno.writeTextFile(join(tempDir, "file.txt"), "file content"); + await Deno.symlink(join(tempDir, "file.txt"), join(tempDir, "link")); + await Deno.mkdir(join(tempDir, "dir")); + + try { + const result = readdirSync(tempDir, { withFileTypes: true }); + result.sort((a, b) => a.name.localeCompare(b.name)); + + assertEquals(result[0].name, "dir"); + assertEquals(result[0].isFile(), false); + assertEquals(result[0].isDirectory(), true); + assertEquals(result[0].isSymbolicLink(), false); + + assertEquals(result[1].name, "file.txt"); + assertEquals(result[1].isFile(), true); + assertEquals(result[1].isDirectory(), false); + assertEquals(result[1].isSymbolicLink(), false); + + assertEquals(result[2].name, "link"); + assertEquals(result[2].isFile(), false); + assertEquals(result[2].isDirectory(), false); + assertEquals(result[2].isSymbolicLink(), true); + } finally { + await Deno.remove(tempDir, { recursive: true }); + } +});