1package agent
2
3import "testing"
4
5func TestParseArgsSubagentAndReasoning(t *testing.T) {
6 args, err := ParseArgs([]string{"--subagent-worker", "/tmp/in.sock", "--subagent", "reviewer", "--reasoning", "high", "task"})
7 if err != nil {
8 t.Fatal(err)
9 }
10 if args.Mode != ModeSubagentWorker || args.Subagent != "reviewer" || args.Reasoning != "high" || args.Prompt != "task" {
11 t.Fatalf("parsed args = mode=%q subagent=%q reasoning=%q prompt=%q", args.Mode, args.Subagent, args.Reasoning, args.Prompt)
12 }
13}
14
15func TestParseArgsNoLSP(t *testing.T) {
16 args, err := ParseArgs([]string{"--no-lsp"})
17 if err != nil {
18 t.Fatal(err)
19 }
20 if !args.NoLSP {
21 t.Fatal("--no-lsp did not disable LSP")
22 }
23}
24
25func TestParseArgsAllowsLeadingDashPromptAfterTerminator(t *testing.T) {
26 args, err := ParseArgs([]string{"--subagent-worker", "/tmp/in.sock", "--", "--inspect", "auth flow"})
27 if err != nil {
28 t.Fatal(err)
29 }
30 if args.Prompt != "--inspect auth flow" {
31 t.Fatalf("prompt = %q, want leading-dash task preserved", args.Prompt)
32 }
33}
34
35func TestParseArgsTemperatureAllowsZero(t *testing.T) {
36 args, err := ParseArgs([]string{"--temperature", "0"})
37 if err != nil {
38 t.Fatalf("ParseArgs returned %v", err)
39 }
40 if args.Temperature == nil || *args.Temperature != 0 {
41 t.Fatalf("Temperature = %v; want 0", args.Temperature)
42 }
43}
44
45func TestParseArgsTemperatureRejectsOutOfRange(t *testing.T) {
46 if _, err := ParseArgs([]string{"--temperature", "2.1"}); err == nil {
47 t.Fatal("ParseArgs accepted out-of-range temperature")
48 }
49}
50
51func TestParseArgsYes(t *testing.T) {
52 for _, flag := range []string{"-y", "--yes"} {
53 args, err := ParseArgs([]string{flag, "--print", "hi"})
54 if err != nil {
55 t.Fatalf("ParseArgs(%q): %v", flag, err)
56 }
57 if !args.Yes {
58 t.Fatalf("ParseArgs(%q): Yes = false", flag)
59 }
60 if args.Mode != ModePrint || args.Prompt != "hi" {
61 t.Fatalf("ParseArgs(%q): Mode=%q Prompt=%q", flag, args.Mode, args.Prompt)
62 }
63 }
64}
65
66func TestParseArgsStatsRequiresPrintMode(t *testing.T) {
67 args, err := ParseArgs([]string{"-p", "--stats", "stats.json", "hi"})
68 if err != nil {
69 t.Fatal(err)
70 }
71 if args.StatsPath != "stats.json" || args.Mode != ModePrint {
72 t.Fatalf("StatsPath=%q Mode=%q", args.StatsPath, args.Mode)
73 }
74
75 if _, err := ParseArgs([]string{"--stats", "stats.json", "hi"}); err == nil {
76 t.Fatal("ParseArgs accepted --stats without print mode")
77 }
78}
79
80func TestParseArgsStream(t *testing.T) {
81 args, err := ParseArgs([]string{"--stream", "hi"})
82 if err != nil {
83 t.Fatal(err)
84 }
85 if args.Mode != ModeStream || args.Prompt != "hi" {
86 t.Fatalf("Mode=%q Prompt=%q", args.Mode, args.Prompt)
87 }
88}