mirror of
https://github.com/cexll/myclaude.git
synced 2026-02-05 02:30:26 +08:00
- Use cmd.exe /c to execute .bat/.cmd on Windows - Set USERPROFILE alongside HOME for os.UserHomeDir() - Use setTempDirEnv to set TEMP/TMP on Windows - Replace chmod-based tests with cross-platform alternatives - Fix concurrent speedup benchmark with fair comparison - Add output/ to gitignore Generated with SWE-Agent.ai Co-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>
120 lines
2.8 KiB
Go
120 lines
2.8 KiB
Go
package wrapper
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRunSingleMode_UseStdin_TargetArgAndTaskText(t *testing.T) {
|
|
defer resetTestHooks()
|
|
|
|
setTempDirEnv(t, t.TempDir())
|
|
logger, err := NewLogger()
|
|
if err != nil {
|
|
t.Fatalf("NewLogger(): %v", err)
|
|
}
|
|
setLogger(logger)
|
|
t.Cleanup(func() { _ = closeLogger() })
|
|
|
|
type testCase struct {
|
|
name string
|
|
cfgTask string
|
|
explicit bool
|
|
stdinData string
|
|
isTerminal bool
|
|
|
|
wantUseStdin bool
|
|
wantTarget string
|
|
wantTaskText string
|
|
}
|
|
|
|
longTask := strings.Repeat("a", 801)
|
|
|
|
tests := []testCase{
|
|
{
|
|
name: "piped input forces stdin mode",
|
|
cfgTask: "cli-task",
|
|
stdinData: "piped task text",
|
|
isTerminal: false,
|
|
wantUseStdin: true,
|
|
wantTarget: "-",
|
|
wantTaskText: "piped task text",
|
|
},
|
|
{
|
|
name: "explicit dash forces stdin mode",
|
|
cfgTask: "-",
|
|
explicit: true,
|
|
stdinData: "explicit task text",
|
|
isTerminal: true,
|
|
wantUseStdin: true,
|
|
wantTarget: "-",
|
|
wantTaskText: "explicit task text",
|
|
},
|
|
{
|
|
name: "special char backslash forces stdin mode",
|
|
cfgTask: `C:\repo\file.go`,
|
|
isTerminal: true,
|
|
wantUseStdin: true,
|
|
wantTarget: "-",
|
|
wantTaskText: `C:\repo\file.go`,
|
|
},
|
|
{
|
|
name: "length>800 forces stdin mode",
|
|
cfgTask: longTask,
|
|
isTerminal: true,
|
|
wantUseStdin: true,
|
|
wantTarget: "-",
|
|
wantTaskText: longTask,
|
|
},
|
|
{
|
|
name: "simple task uses argv target",
|
|
cfgTask: "analyze code",
|
|
isTerminal: true,
|
|
wantUseStdin: false,
|
|
wantTarget: "analyze code",
|
|
wantTaskText: "analyze code",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
var gotTarget string
|
|
buildCodexArgsFn = func(cfg *Config, targetArg string) []string {
|
|
gotTarget = targetArg
|
|
return []string{targetArg}
|
|
}
|
|
|
|
var gotTask TaskSpec
|
|
runTaskFn = func(task TaskSpec, silent bool, timeout int) TaskResult {
|
|
gotTask = task
|
|
return TaskResult{ExitCode: 0, Message: "ok"}
|
|
}
|
|
|
|
stdinReader = strings.NewReader(tt.stdinData)
|
|
isTerminalFn = func() bool { return tt.isTerminal }
|
|
|
|
cfg := &Config{
|
|
Mode: "new",
|
|
Task: tt.cfgTask,
|
|
WorkDir: defaultWorkdir,
|
|
Backend: defaultBackendName,
|
|
ExplicitStdin: tt.explicit,
|
|
}
|
|
|
|
if code := runSingleMode(cfg, "codeagent-wrapper"); code != 0 {
|
|
t.Fatalf("runSingleMode() = %d, want 0", code)
|
|
}
|
|
|
|
if gotTarget != tt.wantTarget {
|
|
t.Fatalf("targetArg = %q, want %q", gotTarget, tt.wantTarget)
|
|
}
|
|
if gotTask.UseStdin != tt.wantUseStdin {
|
|
t.Fatalf("taskSpec.UseStdin = %v, want %v", gotTask.UseStdin, tt.wantUseStdin)
|
|
}
|
|
if gotTask.Task != tt.wantTaskText {
|
|
t.Fatalf("taskSpec.Task = %q, want %q", gotTask.Task, tt.wantTaskText)
|
|
}
|
|
})
|
|
}
|
|
}
|