From 67a831f03f4ce15ec9b75b484fccbb4fd92cb8d1 Mon Sep 17 00:00:00 2001 From: Jacob Burch-Hill Date: Tue, 17 Feb 2026 21:20:58 -0600 Subject: [PATCH 1/2] Fix `rodney start --show` flag parsing bug The --show flag was documented in help.txt but rejected at runtime. Two sequential arg-parsing loops meant the first loop called fatal() on --show before the second loop (which handled it) could run. Extract parseStartFlags() with a single merged loop and add 6 tests. Fixes #23 Co-Authored-By: Claude Opus 4.6 --- main.go | 37 ++++++++++++++++---------- main_test.go | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 13 deletions(-) diff --git a/main.go b/main.go index 0b2531a..79bb8a6 100644 --- a/main.go +++ b/main.go @@ -318,16 +318,33 @@ func withPage() (*State, *rod.Browser, *rod.Page) { // --- Commands --- -func cmdStart(args []string) { - ignoreCertErrors := false - for i := 0; i < len(args); i++ { - switch args[i] { +type startFlags struct { + headless bool + ignoreCertErrors bool +} + +// parseStartFlags parses the arguments to "rodney start". +func parseStartFlags(args []string) (startFlags, error) { + f := startFlags{headless: true} + for _, arg := range args { + switch arg { + case "--show": + f.headless = false case "--insecure", "-k": - ignoreCertErrors = true + f.ignoreCertErrors = true default: - fatal("unknown flag: %s\nusage: rodney start [--insecure]", args[i]) + return f, fmt.Errorf("unknown flag: %s\nusage: rodney start [--show] [--insecure]", arg) } } + return f, nil +} + +func cmdStart(args []string) { + flags, err := parseStartFlags(args) + if err != nil { + fatal("%s", err) + } + ignoreCertErrors := flags.ignoreCertErrors // Check if already running if s, err := loadState(); err == nil { @@ -339,13 +356,7 @@ func cmdStart(args []string) { } } - // Parse flags - headless := true - for _, arg := range args { - if arg == "--show" { - headless = false - } - } + headless := flags.headless dataDir := filepath.Join(stateDir(), "chrome-data") os.MkdirAll(dataDir, 0755) diff --git a/main_test.go b/main_test.go index 79ee87c..1de1b12 100644 --- a/main_test.go +++ b/main_test.go @@ -1148,3 +1148,76 @@ func TestInsecureFlag_WithSelfSignedCert(t *testing.T) { } }) } + +// ===================== +// parseStartFlags tests +// ===================== + +func TestParseStartFlags_ShowFlag(t *testing.T) { + flags, err := parseStartFlags([]string{"--show"}) + if err != nil { + t.Fatalf("--show should be accepted, got error: %v", err) + } + if flags.headless { + t.Error("expected headless=false when --show is passed") + } +} + +func TestParseStartFlags_ShowAndInsecure(t *testing.T) { + flags, err := parseStartFlags([]string{"--show", "--insecure"}) + if err != nil { + t.Fatalf("--show --insecure should be accepted, got error: %v", err) + } + if flags.headless { + t.Error("expected headless=false when --show is passed") + } + if !flags.ignoreCertErrors { + t.Error("expected ignoreCertErrors=true when --insecure is passed") + } +} + +func TestParseStartFlags_InsecureOnly(t *testing.T) { + flags, err := parseStartFlags([]string{"--insecure"}) + if err != nil { + t.Fatalf("--insecure should be accepted, got error: %v", err) + } + if !flags.headless { + t.Error("expected headless=true (default) when --show is not passed") + } + if !flags.ignoreCertErrors { + t.Error("expected ignoreCertErrors=true when --insecure is passed") + } +} + +func TestParseStartFlags_KShorthand(t *testing.T) { + flags, err := parseStartFlags([]string{"-k"}) + if err != nil { + t.Fatalf("-k should be accepted, got error: %v", err) + } + if !flags.ignoreCertErrors { + t.Error("expected ignoreCertErrors=true when -k is passed") + } +} + +func TestParseStartFlags_NoArgs(t *testing.T) { + flags, err := parseStartFlags([]string{}) + if err != nil { + t.Fatalf("no args should be accepted, got error: %v", err) + } + if !flags.headless { + t.Error("expected headless=true by default") + } + if flags.ignoreCertErrors { + t.Error("expected ignoreCertErrors=false by default") + } +} + +func TestParseStartFlags_UnknownFlag(t *testing.T) { + _, err := parseStartFlags([]string{"--bogus"}) + if err == nil { + t.Fatal("expected error for unknown flag --bogus") + } + if !strings.Contains(err.Error(), "unknown flag: --bogus") { + t.Errorf("expected 'unknown flag: --bogus' in error, got: %v", err) + } +} From 76e1a060d3ba10ccb0a319be4d43f26916315f71 Mon Sep 17 00:00:00 2001 From: Jacob Burch-Hill Date: Thu, 19 Feb 2026 08:37:19 -0600 Subject: [PATCH 2/2] Fix usage string to show -k shorthand, matching help.txt Co-Authored-By: Claude Opus 4.6 --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 79bb8a6..fbb121e 100644 --- a/main.go +++ b/main.go @@ -333,7 +333,7 @@ func parseStartFlags(args []string) (startFlags, error) { case "--insecure", "-k": f.ignoreCertErrors = true default: - return f, fmt.Errorf("unknown flag: %s\nusage: rodney start [--show] [--insecure]", arg) + return f, fmt.Errorf("unknown flag: %s\nusage: rodney start [--show] [--insecure | -k]", arg) } } return f, nil