From 664119841a92d13a297e88032f9985fe7e35f77c Mon Sep 17 00:00:00 2001 From: dave caruso Date: Mon, 21 Aug 2023 16:26:07 -0700 Subject: Implement `napi_ref_threadsafe_function` (#4156) * Implement napi_ref_threadsafe_function * work on this * i hate event loops * little better * clean --- test/bun.lockb | Bin 153753 -> 153785 bytes .../third_party/fsevents/fsevents-event-loop.mjs | 10 ++++++++++ test/js/third_party/fsevents/fsevents.test.ts | 20 ++++++++++++++++++++ test/js/third_party/fsevents/package.json | 6 ++++++ test/package.json | 1 + 5 files changed, 37 insertions(+) create mode 100644 test/js/third_party/fsevents/fsevents-event-loop.mjs create mode 100644 test/js/third_party/fsevents/fsevents.test.ts create mode 100644 test/js/third_party/fsevents/package.json (limited to 'test') diff --git a/test/bun.lockb b/test/bun.lockb index 98c35844d..c94d5aff3 100755 Binary files a/test/bun.lockb and b/test/bun.lockb differ diff --git a/test/js/third_party/fsevents/fsevents-event-loop.mjs b/test/js/third_party/fsevents/fsevents-event-loop.mjs new file mode 100644 index 000000000..80e4729a1 --- /dev/null +++ b/test/js/third_party/fsevents/fsevents-event-loop.mjs @@ -0,0 +1,10 @@ +import fsevents from "fsevents"; + +if (process.argv.length < 3) { + console.log("Usage: bun fsevents-event-loop.ts "); + process.exit(1); +} +fsevents.watch(process.argv[2], () => { + console.log("it works!"); + process.exit(0); +}); diff --git a/test/js/third_party/fsevents/fsevents.test.ts b/test/js/third_party/fsevents/fsevents.test.ts new file mode 100644 index 000000000..1381347e9 --- /dev/null +++ b/test/js/third_party/fsevents/fsevents.test.ts @@ -0,0 +1,20 @@ +import { bunEnv, bunExe } from "harness"; +import path from "path"; +import fs from "fs"; +import os from "os"; + +test("fsevents works (napi_ref_threadsafe_function keeps event loop alive)", async () => { + const tempFile = fs.mkdtempSync(path.join(os.tmpdir(), "fsevents-test-")); + const spawned = Bun.spawn({ + cmd: [bunExe(), "run", path.join(import.meta.dir, "fsevents-event-loop.mjs"), tempFile], + env: bunEnv, + stdio: ["pipe", "pipe", "pipe"], + }); + await Bun.sleep(50); + if (spawned.killed) { + throw new Error("event loop died, test failed"); + } + await Bun.write(tempFile + "/hello.txt", "test"); + expect(await spawned.exited).toBe(0); + expect(await new Response(spawned.stdout).text()).toBe("it works!\n"); +}); diff --git a/test/js/third_party/fsevents/package.json b/test/js/third_party/fsevents/package.json new file mode 100644 index 000000000..315c73e1a --- /dev/null +++ b/test/js/third_party/fsevents/package.json @@ -0,0 +1,6 @@ +{ + "name": "fsevents-test", + "dependencies": { + "fsevents": "2.3.2" + } +} diff --git a/test/package.json b/test/package.json index f841d2003..099f3d312 100644 --- a/test/package.json +++ b/test/package.json @@ -17,6 +17,7 @@ "es-module-lexer": "1.3.0", "esbuild": "0.18.6", "express": "4.18.2", + "fsevents": "2.3.2", "iconv-lite": "0.6.3", "jest-extended": "4.0.0", "lodash": "4.17.21", -- cgit v1.2.3