0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-08 07:16:56 -05:00

fix: node dirent tests

This commit is contained in:
Marvin Hagemeister 2024-07-11 08:59:58 +02:00
parent 42400415b9
commit 0337a7efbf
3 changed files with 65 additions and 92 deletions

View file

@ -44,7 +44,7 @@ export default class Dirent {
}
isSymbolicLink(): boolean {
return this.entry.isSymLink;
return this.entry.isSymlink;
}
/** @deprecated */

View file

@ -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");
},
});

View file

@ -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<Dirent[]>((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 });
}
});