# Test Fixtures Guide ## Temporary Directory Fixture The `tmpdir` function in `fixture/fixture.ts` creates temporary directories for tests with automatic cleanup. ### Basic Usage ```typescript import { tmpdir } from "./fixture/fixture" test("example", async () => { await using tmp = await tmpdir() // tmp.path is the temp directory path // automatically cleaned up when test ends }) ``` ### Options - `git?: boolean` - Initialize a git repo with a root commit - `config?: Partial` - Write an `opencode.json` config file - `init?: (dir: string) => Promise` - Custom setup function, returns value accessible as `tmp.extra` - `dispose?: (dir: string) => Promise` - Custom cleanup function ### Examples **Git repository:** ```typescript await using tmp = await tmpdir({ git: true }) ``` **With config file:** ```typescript await using tmp = await tmpdir({ config: { model: "test/model", username: "testuser" }, }) ``` **Custom initialization (returns extra data):** ```typescript await using tmp = await tmpdir({ init: async (dir) => { await Bun.write(path.join(dir, "file.txt"), "content") return "extra data" }, }) // Access extra data via tmp.extra console.log(tmp.extra) // "extra data" ``` **With cleanup:** ```typescript await using tmp = await tmpdir({ init: async (dir) => { const specialDir = path.join(dir, "special") await fs.mkdir(specialDir) return specialDir }, dispose: async (dir) => { // Custom cleanup logic await fs.rm(path.join(dir, "special"), { recursive: true }) }, }) ``` ### Returned Object - `path: string` - Absolute path to the temp directory (realpath resolved) - `extra: T` - Value returned by the `init` function - `[Symbol.asyncDispose]` - Enables automatic cleanup via `await using` ### Notes - Directories are created in the system temp folder with prefix `opencode-test-` - Use `await using` for automatic cleanup when the variable goes out of scope - Paths are sanitized to strip null bytes (defensive fix for CI environments)