summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/unit_node/_fs/_fs_watch_test.ts46
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"
+ ),
+ );
+ },
+});