summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLuke Parker <[email protected]>2026-02-24 23:03:18 +1000
committerGitHub <[email protected]>2026-02-24 23:03:18 +1000
commit3d379c20c4973ef2b1c0305dbd1064ba0f1d8e3f (patch)
treed558b8dc498bcb2ed20a0c9bb84eecccf6bbcbd1
parent06f25c78f655257819d681b39598bf151837caf6 (diff)
downloadopencode-3d379c20c4973ef2b1c0305dbd1064ba0f1d8e3f.tar.gz
opencode-3d379c20c4973ef2b1c0305dbd1064ba0f1d8e3f.zip
fix(test): replace Unix-only assumptions with cross-platform alternatives (#14906)
-rw-r--r--packages/opencode/test/tool/bash.test.ts10
-rw-r--r--packages/opencode/test/tool/external-directory.test.ts4
-rw-r--r--packages/opencode/test/tool/write.test.ts15
3 files changed, 19 insertions, 10 deletions
diff --git a/packages/opencode/test/tool/bash.test.ts b/packages/opencode/test/tool/bash.test.ts
index db05f8f62..ac9301692 100644
--- a/packages/opencode/test/tool/bash.test.ts
+++ b/packages/opencode/test/tool/bash.test.ts
@@ -1,4 +1,5 @@
import { describe, expect, test } from "bun:test"
+import os from "os"
import path from "path"
import { BashTool } from "../../src/tool/bash"
import { Instance } from "../../src/project/instance"
@@ -138,14 +139,14 @@ describe("tool.bash permissions", () => {
await bash.execute(
{
command: "ls",
- workdir: "/tmp",
- description: "List /tmp",
+ workdir: os.tmpdir(),
+ description: "List temp dir",
},
testCtx,
)
const extDirReq = requests.find((r) => r.permission === "external_directory")
expect(extDirReq).toBeDefined()
- expect(extDirReq!.patterns).toContain("/tmp/*")
+ expect(extDirReq!.patterns).toContain(path.join(os.tmpdir(), "*"))
},
})
})
@@ -366,7 +367,8 @@ describe("tool.bash truncation", () => {
ctx,
)
expect((result.metadata as any).truncated).toBe(false)
- expect(result.output).toBe("hello\n")
+ const eol = process.platform === "win32" ? "\r\n" : "\n"
+ expect(result.output).toBe(`hello${eol}`)
},
})
})
diff --git a/packages/opencode/test/tool/external-directory.test.ts b/packages/opencode/test/tool/external-directory.test.ts
index 33c5e2c73..a75f767b3 100644
--- a/packages/opencode/test/tool/external-directory.test.ts
+++ b/packages/opencode/test/tool/external-directory.test.ts
@@ -65,7 +65,7 @@ describe("tool.assertExternalDirectory", () => {
const directory = "/tmp/project"
const target = "/tmp/outside/file.txt"
- const expected = path.join(path.dirname(target), "*")
+ const expected = path.join(path.dirname(target), "*").replaceAll("\\", "/")
await Instance.provide({
directory,
@@ -91,7 +91,7 @@ describe("tool.assertExternalDirectory", () => {
const directory = "/tmp/project"
const target = "/tmp/outside"
- const expected = path.join(target, "*")
+ const expected = path.join(target, "*").replaceAll("\\", "/")
await Instance.provide({
directory,
diff --git a/packages/opencode/test/tool/write.test.ts b/packages/opencode/test/tool/write.test.ts
index 4f1a7d28e..695d48ccb 100644
--- a/packages/opencode/test/tool/write.test.ts
+++ b/packages/opencode/test/tool/write.test.ts
@@ -293,19 +293,26 @@ describe("tool.write", () => {
})
describe("error handling", () => {
- test("throws error for paths outside project", async () => {
+ test("throws error when OS denies write access", async () => {
await using tmp = await tmpdir()
- const outsidePath = "/etc/passwd"
+ const readonlyPath = path.join(tmp.path, "readonly.txt")
+
+ // Create a read-only file
+ await fs.writeFile(readonlyPath, "test", "utf-8")
+ await fs.chmod(readonlyPath, 0o444)
await Instance.provide({
directory: tmp.path,
fn: async () => {
+ const { FileTime } = await import("../../src/file/time")
+ FileTime.read(ctx.sessionID, readonlyPath)
+
const write = await WriteTool.init()
await expect(
write.execute(
{
- filePath: outsidePath,
- content: "test",
+ filePath: readonlyPath,
+ content: "new content",
},
ctx,
),