mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 12:19:12 +00:00
fix(node/fs): support recursive
option in readdir (#27179)
We didn't support the `recursive` option of `fs.readdir()/fs.readdirSync()`. Fixes https://github.com/denoland/deno/issues/27175
This commit is contained in:
parent
b78c851a94
commit
2fbc5fea83
2 changed files with 116 additions and 32 deletions
|
@ -53,6 +53,29 @@ Deno.test({
|
|||
},
|
||||
});
|
||||
|
||||
Deno.test("ASYNC: read dirs recursively", async () => {
|
||||
const dir = Deno.makeTempDirSync();
|
||||
Deno.writeTextFileSync(join(dir, "file1.txt"), "hi");
|
||||
Deno.mkdirSync(join(dir, "sub"));
|
||||
Deno.writeTextFileSync(join(dir, "sub", "file2.txt"), "hi");
|
||||
|
||||
try {
|
||||
const files = await new Promise<string[]>((resolve, reject) => {
|
||||
readdir(dir, { recursive: true }, (err, files) => {
|
||||
if (err) reject(err);
|
||||
resolve(files.map((f) => f.toString()));
|
||||
});
|
||||
});
|
||||
|
||||
assertEqualsArrayAnyOrder(
|
||||
files,
|
||||
["file1.txt", "sub", join("sub", "file2.txt")],
|
||||
);
|
||||
} finally {
|
||||
Deno.removeSync(dir, { recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "SYNC: reading empty the directory",
|
||||
fn() {
|
||||
|
@ -75,6 +98,26 @@ Deno.test({
|
|||
},
|
||||
});
|
||||
|
||||
Deno.test("SYNC: read dirs recursively", () => {
|
||||
const dir = Deno.makeTempDirSync();
|
||||
Deno.writeTextFileSync(join(dir, "file1.txt"), "hi");
|
||||
Deno.mkdirSync(join(dir, "sub"));
|
||||
Deno.writeTextFileSync(join(dir, "sub", "file2.txt"), "hi");
|
||||
|
||||
try {
|
||||
const files = readdirSync(dir, { recursive: true }).map((f) =>
|
||||
f.toString()
|
||||
);
|
||||
|
||||
assertEqualsArrayAnyOrder(
|
||||
files,
|
||||
["file1.txt", "sub", join("sub", "file2.txt")],
|
||||
);
|
||||
} finally {
|
||||
Deno.removeSync(dir, { recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
Deno.test("[std/node/fs] readdir callback isn't called twice if error is thrown", async () => {
|
||||
// The correct behaviour is not to catch any errors thrown,
|
||||
// but that means there'll be an uncaught error and the test will fail.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue