Selaa lähdekoodia

test(file): migrate fsmonitor tests to Effect runner (#27099)

Kit Langton 3 kuukautta sitten
vanhempi
commit
a7b5041674
1 muutettua tiedostoa jossa 52 lisäystä ja 51 poistoa
  1. 52 51
      packages/opencode/test/file/fsmonitor.test.ts

+ 52 - 51
packages/opencode/test/file/fsmonitor.test.ts

@@ -3,67 +3,68 @@ import { describe, expect, test } from "bun:test"
 import { Effect } from "effect"
 import fs from "fs/promises"
 import path from "path"
-import { File } from "../../src/file"
-import { Instance } from "../../src/project/instance"
-import { WithInstance } from "../../src/project/with-instance"
-import { provideInstance, tmpdir } from "../fixture/fixture"
 
-const run = <A, E>(eff: Effect.Effect<A, E, File.Service>) =>
-  Effect.runPromise(provideInstance(Instance.directory)(eff.pipe(Effect.provide(File.defaultLayer))))
-const status = () => run(File.Service.use((svc) => svc.status()))
-const read = (file: string) => run(File.Service.use((svc) => svc.read(file)))
-
-const wintest = process.platform === "win32" ? test : test.skip
+const it = process.platform === "win32" ? (await import("../lib/effect")).testEffect((await import("../../src/file")).File.defaultLayer) : undefined
 
 describe("file fsmonitor", () => {
-  wintest("status does not start fsmonitor for readonly git checks", async () => {
-    await using tmp = await tmpdir({ git: true })
-    const target = path.join(tmp.path, "tracked.txt")
+  if (!it) {
+    test.skip("status does not start fsmonitor for readonly git checks", () => {})
+    test.skip("read does not start fsmonitor for git diffs", () => {})
+    return
+  }
+
+  it.instance(
+    "status does not start fsmonitor for readonly git checks",
+    () =>
+      Effect.gen(function* () {
+        const { File } = yield* Effect.promise(() => import("../../src/file"))
+        const { TestInstance } = yield* Effect.promise(() => import("../fixture/fixture"))
+        const directory = (yield* TestInstance).directory
+        const target = path.join(directory, "tracked.txt")
 
-    await fs.writeFile(target, "base\n")
-    await $`git add tracked.txt`.cwd(tmp.path).quiet()
-    await $`git commit -m init`.cwd(tmp.path).quiet()
-    await $`git config core.fsmonitor true`.cwd(tmp.path).quiet()
-    await $`git fsmonitor--daemon stop`.cwd(tmp.path).quiet().nothrow()
-    await fs.writeFile(target, "next\n")
-    await fs.writeFile(path.join(tmp.path, "new.txt"), "new\n")
+        yield* Effect.promise(() => fs.writeFile(target, "base\n"))
+        yield* Effect.promise(() => $`git add tracked.txt`.cwd(directory).quiet())
+        yield* Effect.promise(() => $`git commit -m init`.cwd(directory).quiet())
+        yield* Effect.promise(() => $`git config core.fsmonitor true`.cwd(directory).quiet())
+        yield* Effect.promise(() => $`git fsmonitor--daemon stop`.cwd(directory).quiet().nothrow())
+        yield* Effect.promise(() => fs.writeFile(target, "next\n"))
+        yield* Effect.promise(() => fs.writeFile(path.join(directory, "new.txt"), "new\n"))
 
-    const before = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
-    expect(before.exitCode).not.toBe(0)
+        const before = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
+        expect(before.exitCode).not.toBe(0)
 
-    await WithInstance.provide({
-      directory: tmp.path,
-      fn: async () => {
-        await status()
-      },
-    })
+        yield* File.Service.use((svc) => svc.status())
 
-    const after = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
-    expect(after.exitCode).not.toBe(0)
-  })
+        const after = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
+        expect(after.exitCode).not.toBe(0)
+      }),
+    { git: true },
+  )
 
-  wintest("read does not start fsmonitor for git diffs", async () => {
-    await using tmp = await tmpdir({ git: true })
-    const target = path.join(tmp.path, "tracked.txt")
+  it.instance(
+    "read does not start fsmonitor for git diffs",
+    () =>
+      Effect.gen(function* () {
+        const { File } = yield* Effect.promise(() => import("../../src/file"))
+        const { TestInstance } = yield* Effect.promise(() => import("../fixture/fixture"))
+        const directory = (yield* TestInstance).directory
+        const target = path.join(directory, "tracked.txt")
 
-    await fs.writeFile(target, "base\n")
-    await $`git add tracked.txt`.cwd(tmp.path).quiet()
-    await $`git commit -m init`.cwd(tmp.path).quiet()
-    await $`git config core.fsmonitor true`.cwd(tmp.path).quiet()
-    await $`git fsmonitor--daemon stop`.cwd(tmp.path).quiet().nothrow()
-    await fs.writeFile(target, "next\n")
+        yield* Effect.promise(() => fs.writeFile(target, "base\n"))
+        yield* Effect.promise(() => $`git add tracked.txt`.cwd(directory).quiet())
+        yield* Effect.promise(() => $`git commit -m init`.cwd(directory).quiet())
+        yield* Effect.promise(() => $`git config core.fsmonitor true`.cwd(directory).quiet())
+        yield* Effect.promise(() => $`git fsmonitor--daemon stop`.cwd(directory).quiet().nothrow())
+        yield* Effect.promise(() => fs.writeFile(target, "next\n"))
 
-    const before = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
-    expect(before.exitCode).not.toBe(0)
+        const before = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
+        expect(before.exitCode).not.toBe(0)
 
-    await WithInstance.provide({
-      directory: tmp.path,
-      fn: async () => {
-        await read("tracked.txt")
-      },
-    })
+        yield* File.Service.use((svc) => svc.read("tracked.txt"))
 
-    const after = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
-    expect(after.exitCode).not.toBe(0)
-  })
+        const after = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
+        expect(after.exitCode).not.toBe(0)
+      }),
+    { git: true },
+  )
 })