diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit_node/_fs/_fs_watch_test.ts | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/tests/unit_node/_fs/_fs_watch_test.ts b/tests/unit_node/_fs/_fs_watch_test.ts index c6082d77f..963e0889f 100644 --- a/tests/unit_node/_fs/_fs_watch_test.ts +++ b/tests/unit_node/_fs/_fs_watch_test.ts @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { unwatchFile, watch, watchFile } from "node:fs"; -import { assertEquals } from "@std/assert"; +import { watch as watchPromise } from "node:fs/promises"; +import { assert, assertEquals } from "@std/assert"; function wait(time: number) { return new Promise((resolve) => { @@ -52,3 +53,46 @@ Deno.test({ watcher.unref(); }, }); + +Deno.test({ + name: "node [fs/promises] watch should return async iterable", + sanitizeOps: false, + sanitizeResources: false, + async fn() { + const file = Deno.makeTempFileSync(); + Deno.writeTextFileSync(file, "foo"); + + const result: { eventType: string; filename: string | null }[] = []; + + const controller = new AbortController(); + const watcher = watchPromise(file, { + // Node types resolved by the LSP clash with ours + // deno-lint-ignore no-explicit-any + signal: controller.signal as any, + }); + + const deferred = Promise.withResolvers<void>(); + let stopLength = 0; + setTimeout(async () => { + Deno.writeTextFileSync(file, "something"); + controller.abort(); + stopLength = result.length; + await wait(100); + Deno.writeTextFileSync(file, "something else"); + await wait(100); + deferred.resolve(); + }, 100); + + for await (const event of watcher) { + result.push(event); + } + await deferred.promise; + + assertEquals(result.length, stopLength); + assert( + result.every((item) => + typeof item.eventType === "string" && typeof item.filename === "string" + ), + ); + }, +}); |