diff --git a/main.go b/main.go index 0b2531a..fbb121e 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 | -k]", 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) + } +}