internal/control/flags_test.go

f327db6192d9a0877606a40385b24c0cda29fd2d
gitbay/internal/control/flags_test.go history · blame · raw

33 lines · 1300 bytes

 1package control
 2
 3import (
 4	"strings"
 5	"testing"
 6)
 7
 8func TestParseFlags(t *testing.T) {
 9	spec := flagSpec{Values: []string{"--title", "--file"}, Multi: []string{"--add"}, Bools: []string{"--private"}, MaxPos: 1, Usage: "cmd <owner/name> [--title <t>]"}
10	f, err := parseFlags([]string{"a/b", "--title", "-x", "--add", "one", "--private", "--add", "two", "--file", "-"}, spec)
11	if err != nil {
12		t.Fatal(err)
13	}
14	if f.pos(0) != "a/b" || f.Value("--title") != "-x" || f.Value("--file") != "-" || !f.Has("--private") ||
15		strings.Join(f.List("--add"), ",") != "one,two" || f.Has("--nope") || f.pos(1) != "" {
16		t.Fatalf("parsed wrong: %+v", f)
17	}
18	for _, bad := range [][]string{
19		{"a/b", "--bogus"},        // unknown flag
20		{"a/b", "--title"},        // missing value
21		{"a/b", "c/d"},            // too many positionals
22		{"--private", "a/b", "x"}, // too many, flags first
23	} {
24		if _, err := parseFlags(bad, spec); err == nil || !strings.Contains(err.Error(), "usage: cmd") {
25			t.Errorf("%v: err=%v", bad, err)
26		}
27	}
28	// "--" ends flags; MaxPos -1 takes any number.
29	f, err = parseFlags([]string{"--", "--title", "x"}, flagSpec{Values: []string{"--title"}, MaxPos: -1})
30	if err != nil || strings.Join(f.Pos, " ") != "--title x" || f.Has("--title") {
31		t.Fatalf("-- handling: %v %+v", err, f)
32	}
33}