|
1 | | -import std/[os, osproc, strutils, times, unittest] |
| 1 | +import std/[os, osproc, strutils, tables, times, unittest] |
2 | 2 | import threecode/session |
3 | 3 |
|
4 | 4 | const binName = when defined(windows): "3code.exe" else: "3code" |
@@ -47,16 +47,18 @@ suite "cli --list cap and short-flag stacking": |
47 | 47 |
|
48 | 48 | proc runIn(envCwd: string; flags: string): tuple[o: string, code: int] = |
49 | 49 | when defined(windows): |
50 | | - # cmd.exe can't inline VAR=VAL prefix; run through shell. |
51 | | - let cmd = "set XDG_DATA_HOME=" & tmp & " && " & |
52 | | - binPath().quoteShell & " " & flags |
53 | | - let (outp, code) = execCmdEx(cmd, options = {poEvalCommand, poStdErrToStdOut, poUsePath}, workingDir = envCwd) |
54 | | - result = (outp.strip(), code) |
| 50 | + # Use execCmdEx with env parameter (VAR=VAL prefix doesn't work in cmd.exe) |
| 51 | + var env = newStringTable() |
| 52 | + for k, v in envPairs(): |
| 53 | + env[k] = v |
| 54 | + env["XDG_DATA_HOME"] = tmp |
| 55 | + result = execCmdEx(binPath() & " " & flags, env = env, workingDir = envCwd) |
| 56 | + result[0] = result[0].strip() |
55 | 57 | else: |
56 | 58 | let cmd = "XDG_DATA_HOME=" & tmp.quoteShell & " " & |
57 | 59 | binPath().quoteShell & " " & flags |
58 | | - let (outp, code) = execCmdEx(cmd, workingDir = envCwd) |
59 | | - result = (outp.strip(), code) |
| 60 | + result = execCmdEx(cmd, workingDir = envCwd) |
| 61 | + result[0] = result[0].strip() |
60 | 62 |
|
61 | 63 | proc seedSession(stamp: string) = |
62 | 64 | # Minimal valid .3log under the isolated sessions dir, plus a cwd-index |
@@ -124,15 +126,17 @@ suite "cli syntax errors do no startup work": |
124 | 126 |
|
125 | 127 | proc runIn(envCwd: string; flags: string): tuple[o: string, code: int] = |
126 | 128 | when defined(windows): |
127 | | - let cmd = "set XDG_DATA_HOME=" & tmp & " && " & |
128 | | - binPath().quoteShell & " " & flags |
129 | | - let (outp, code) = execCmdEx(cmd, options = {poEvalCommand, poStdErrToStdOut, poUsePath}, workingDir = envCwd) |
130 | | - result = (outp.strip(), code) |
| 129 | + var env = newStringTable() |
| 130 | + for k, v in envPairs(): |
| 131 | + env[k] = v |
| 132 | + env["XDG_DATA_HOME"] = tmp |
| 133 | + result = execCmdEx(binPath() & " " & flags, env = env, workingDir = envCwd) |
| 134 | + result[0] = result[0].strip() |
131 | 135 | else: |
132 | 136 | let cmd = "XDG_DATA_HOME=" & tmp.quoteShell & " " & |
133 | 137 | binPath().quoteShell & " " & flags |
134 | | - let (outp, code) = execCmdEx(cmd, workingDir = envCwd) |
135 | | - result = (outp.strip(), code) |
| 138 | + result = execCmdEx(cmd, workingDir = envCwd) |
| 139 | + result[0] = result[0].strip() |
136 | 140 |
|
137 | 141 | proc skillsDirExists(): bool = dirExists(tmp / "3code" / "skills") |
138 | 142 |
|
|
0 commit comments