diff options
Diffstat (limited to 'std/node/_fs')
-rw-r--r-- | std/node/_fs/_fs_close.ts | 14 | ||||
-rw-r--r-- | std/node/_fs/_fs_close_test.ts | 43 |
2 files changed, 45 insertions, 12 deletions
diff --git a/std/node/_fs/_fs_close.ts b/std/node/_fs/_fs_close.ts index 469bdc77b..cdd815ad9 100644 --- a/std/node/_fs/_fs_close.ts +++ b/std/node/_fs/_fs_close.ts @@ -3,20 +3,14 @@ import { CallbackWithError } from "./_fs_common.ts"; export function close(fd: number, callback: CallbackWithError): void { - new Promise((resolve, reject) => { + queueMicrotask(() => { try { Deno.close(fd); - resolve(); + callback(null); } catch (err) { - reject(err); - } - }) - .then(() => { - callback(); - }) - .catch((err) => { callback(err); - }); + } + }); } export function closeSync(fd: number): void { diff --git a/std/node/_fs/_fs_close_test.ts b/std/node/_fs/_fs_close_test.ts index 8bcd662c9..1ea324cb4 100644 --- a/std/node/_fs/_fs_close_test.ts +++ b/std/node/_fs/_fs_close_test.ts @@ -1,6 +1,6 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. const { test } = Deno; -import { fail, assert } from "../../testing/asserts.ts"; +import { fail, assert, assertThrows } from "../../testing/asserts.ts"; import { close, closeSync } from "./_fs_close.ts"; test({ @@ -12,7 +12,7 @@ test({ assert(Deno.resources()[file.rid]); await new Promise((resolve, reject) => { close(file.rid, (err) => { - if (err) reject(); + if (err !== null) reject(); else resolve(); }); }) @@ -29,6 +29,38 @@ test({ }); test({ + name: "ASYNC: Invalid fd", + async fn() { + await new Promise((resolve, reject) => { + close(-1, (err) => { + if (err !== null) return resolve(); + reject(); + }); + }); + }, +}); + +test({ + name: "close callback should be asynchronous", + async fn() { + const tempFile: string = Deno.makeTempFileSync(); + const file: Deno.File = Deno.openSync(tempFile); + + let foo: string; + const promise = new Promise((resolve) => { + close(file.rid, () => { + assert(foo === "bar"); + resolve(); + }); + foo = "bar"; + }); + + await promise; + Deno.removeSync(tempFile); + }, +}); + +test({ name: "SYNC: File is closed", fn() { const tempFile: string = Deno.makeTempFileSync(); @@ -40,3 +72,10 @@ test({ Deno.removeSync(tempFile); }, }); + +test({ + name: "SYNC: Invalid fd", + fn() { + assertThrows(() => closeSync(-1)); + }, +}); |