fix(std/node): Stop callbacks being called twice when callback throws error (#8867)

This commit is contained in:
Liam Murphy 2021-01-26 23:34:40 +11:00 committed by GitHub
parent f9949a3170
commit 06bd692e5c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
46 changed files with 603 additions and 178 deletions

View file

@ -1,4 +1,6 @@
import * as path from "../../path/mod.ts";
import { assertEquals } from "../../testing/asserts.ts";
import { assertCallbackErrorUncaught } from "../_utils.ts";
import { realpath, realpathSync } from "./_fs_realpath.ts";
Deno.test("realpath", async function () {
@ -34,3 +36,19 @@ Deno.test("realpathSync", function () {
const realSymLinkPath = realpathSync(tempFileAlias);
assertEquals(realPath, realSymLinkPath);
});
Deno.test("[std/node/fs] realpath callback isn't called twice if error is thrown", async () => {
const tempDir = await Deno.makeTempDir();
const tempFile = path.join(tempDir, "file.txt");
const linkFile = path.join(tempDir, "link.txt");
await Deno.writeTextFile(tempFile, "hello world");
await Deno.symlink(tempFile, linkFile, { type: "file" });
const importUrl = new URL("./_fs_realpath.ts", import.meta.url);
await assertCallbackErrorUncaught({
prelude: `import { realpath } from ${JSON.stringify(importUrl)}`,
invocation: `realpath(${JSON.stringify(`${tempDir}/link.txt`)}, `,
async cleanup() {
await Deno.remove(tempDir, { recursive: true });
},
});
});