1package agent
2
3import "testing"
4
5func TestParseArgsExplicitEmptySystemPromptIsSet(t *testing.T) {
6 args, err := ParseArgs([]string{"--system-prompt", ""})
7 if err != nil {
8 t.Fatalf("ParseArgs returned %v", err)
9 }
10 if !args.SystemPromptSet {
11 t.Fatal("SystemPromptSet = false; want true for an explicitly empty flag value")
12 }
13 if args.SystemPrompt != "" {
14 t.Fatalf("SystemPrompt = %q; want empty", args.SystemPrompt)
15 }
16}
17
18func TestParseArgsTemperatureAllowsZero(t *testing.T) {
19 args, err := ParseArgs([]string{"--temperature", "0"})
20 if err != nil {
21 t.Fatalf("ParseArgs returned %v", err)
22 }
23 if args.Temperature == nil || *args.Temperature != 0 {
24 t.Fatalf("Temperature = %v; want 0", args.Temperature)
25 }
26}
27
28func TestParseArgsTemperatureRejectsOutOfRange(t *testing.T) {
29 if _, err := ParseArgs([]string{"--temperature", "2.1"}); err == nil {
30 t.Fatal("ParseArgs accepted out-of-range temperature")
31 }
32}
33
34func TestParseArgsYes(t *testing.T) {
35 for _, flag := range []string{"-y", "--yes"} {
36 args, err := ParseArgs([]string{flag, "--print", "hi"})
37 if err != nil {
38 t.Fatalf("ParseArgs(%q): %v", flag, err)
39 }
40 if !args.Yes {
41 t.Fatalf("ParseArgs(%q): Yes = false", flag)
42 }
43 if args.Mode != ModePrint || args.Prompt != "hi" {
44 t.Fatalf("ParseArgs(%q): Mode=%q Prompt=%q", flag, args.Mode, args.Prompt)
45 }
46 }
47}
48
49func TestParseArgsStatsRequiresPrintMode(t *testing.T) {
50 args, err := ParseArgs([]string{"-p", "--stats", "stats.json", "hi"})
51 if err != nil {
52 t.Fatal(err)
53 }
54 if args.StatsPath != "stats.json" || args.Mode != ModePrint {
55 t.Fatalf("StatsPath=%q Mode=%q", args.StatsPath, args.Mode)
56 }
57
58 if _, err := ParseArgs([]string{"--stats", "stats.json", "hi"}); err == nil {
59 t.Fatal("ParseArgs accepted --stats without print mode")
60 }
61}
62
63func TestParseArgsNoContextFiles(t *testing.T) {
64 for _, flag := range []string{"--no-context-files", "-nc"} {
65 args, err := ParseArgs([]string{flag})
66 if err != nil {
67 t.Fatalf("ParseArgs(%q): %v", flag, err)
68 }
69 if !args.NoContextFiles {
70 t.Fatalf("ParseArgs(%q): NoContextFiles = false", flag)
71 }
72 }
73}
74
75func TestParseArgsStream(t *testing.T) {
76 args, err := ParseArgs([]string{"--stream", "hi"})
77 if err != nil {
78 t.Fatal(err)
79 }
80 if args.Mode != ModeStream || args.Prompt != "hi" {
81 t.Fatalf("Mode=%q Prompt=%q", args.Mode, args.Prompt)
82 }
83}