updated flags.go, flags_test.go

This commit is contained in:
Suleiman Dibirov 2024-06-24 21:09:30 +03:00
parent 97fd236911
commit c73a6761b1
2 changed files with 49 additions and 16 deletions

View File

@ -43,27 +43,42 @@ func parseArgs(argv []string) Op {
return ListOp{} return ListOp{}
} }
if n == 1 || n == 2 { if n == 1 {
v := argv[0] v := argv[0]
force := false switch v {
case "--help", "-h":
if n == 2 {
force = slices.Contains([]string{"-f", "--force"}, argv[1])
}
if v == "--help" || v == "-h" {
return HelpOp{} return HelpOp{}
} case "--version", "-V":
if v == "--version" || v == "-V" {
return VersionOp{} return VersionOp{}
} case "--current", "-c":
if v == "--current" || v == "-c" {
return CurrentOp{} return CurrentOp{}
default:
return getSwitchOp(v, false)
} }
if strings.HasPrefix(v, "-") && v != "-" { } else if n == 2 {
return UnsupportedOp{Err: fmt.Errorf("unsupported option '%s'", v)} // {namespace} -f|--force
name := argv[0]
force := slices.Contains([]string{"-f", "--force"}, argv[1])
if !force {
if !slices.Contains([]string{"-f", "--force"}, argv[0]) {
return UnsupportedOp{Err: fmt.Errorf("unsupported arguments %q", argv)}
} }
return SwitchOp{Target: argv[0], Force: force}
// -f|--force {namespace}
force = true
name = argv[1]
} }
return getSwitchOp(name, force)
}
return UnsupportedOp{Err: fmt.Errorf("too many arguments")} return UnsupportedOp{Err: fmt.Errorf("too many arguments")}
} }
func getSwitchOp(v string, force bool) Op {
if strings.HasPrefix(v, "-") && v != "-" {
return UnsupportedOp{Err: fmt.Errorf("unsupported option %q", v)}
}
return SwitchOp{Target: v, Force: force}
}

View File

@ -48,12 +48,30 @@ func Test_parseArgs_new(t *testing.T) {
{name: "switch by name", {name: "switch by name",
args: []string{"foo"}, args: []string{"foo"},
want: SwitchOp{Target: "foo"}}, want: SwitchOp{Target: "foo"}},
{name: "switch by name force short flag",
args: []string{"foo", "-f"},
want: SwitchOp{Target: "foo", Force: true}},
{name: "switch by name force long flag",
args: []string{"foo", "--force"},
want: SwitchOp{Target: "foo", Force: true}},
{name: "switch by name force short flag before name",
args: []string{"-f", "foo"},
want: SwitchOp{Target: "foo", Force: true}},
{name: "switch by name force long flag before name",
args: []string{"--force", "foo"},
want: SwitchOp{Target: "foo", Force: true}},
{name: "switch by name unknown arguments",
args: []string{"foo", "-x"},
want: UnsupportedOp{Err: fmt.Errorf("unsupported arguments %q", []string{"foo", "-x"})}},
{name: "switch by name unknown arguments",
args: []string{"-x", "foo"},
want: UnsupportedOp{Err: fmt.Errorf("unsupported arguments %q", []string{"-x", "foo"})}},
{name: "switch by swap", {name: "switch by swap",
args: []string{"-"}, args: []string{"-"},
want: SwitchOp{Target: "-"}}, want: SwitchOp{Target: "-"}},
{name: "unrecognized flag", {name: "unrecognized flag",
args: []string{"-x"}, args: []string{"-x"},
want: UnsupportedOp{Err: fmt.Errorf("unsupported option '-x'")}}, want: UnsupportedOp{Err: fmt.Errorf("unsupported option %q", "-x")}},
{name: "too many args", {name: "too many args",
args: []string{"a", "b", "c"}, args: []string{"a", "b", "c"},
want: UnsupportedOp{Err: fmt.Errorf("too many arguments")}}, want: UnsupportedOp{Err: fmt.Errorf("too many arguments")}},