56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
)
|
|
|
|
// flagsOf reads a command line's flags (and its first positional after --what-if) into a map.
|
|
func flagsOf(argv []string) map[string]string {
|
|
out := map[string]string{}
|
|
for i := 0; i < len(argv); i++ {
|
|
if !strings.HasPrefix(argv[i], "--") {
|
|
continue
|
|
}
|
|
name := strings.TrimPrefix(argv[i], "--")
|
|
if i+1 < len(argv) && !strings.HasPrefix(argv[i+1], "--") {
|
|
out[name] = argv[i+1]
|
|
i++
|
|
} else {
|
|
out[name] = "true"
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
// Without the data form the text answer is unchanged (AC2): no data flag, and the data-only arguments are not passed.
|
|
func TestPlansWhatIfWithoutDataIsUnchanged(t *testing.T) {
|
|
argv, err := argvFor("plans", map[string]any{"repository": "novox/x", "paths": "a,b"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := strings.Join(argv, " "); got != "plans --what-if novox/x --paths a,b" {
|
|
t.Errorf("the text what-if reads %q", got)
|
|
}
|
|
if _, err := argvFor("plans", map[string]any{"repository": "novox/x", "paths": "a", "head": "h"}); err == nil {
|
|
t.Error("a head without data was passed over, not refused")
|
|
}
|
|
argv, _ = argvFor("plans", map[string]any{"repository": "novox/x", "paths": "a", "data": "false"})
|
|
if got := strings.Join(argv, " "); got != "plans --what-if novox/x --paths a" {
|
|
t.Errorf("data false reads %q", got)
|
|
}
|
|
}
|
|
|
|
func catalogueVerb(name string) (catalogue.Verb, bool) { return controllerVerb(name) }
|
|
|
|
func slicesHas(s []string, v string) bool {
|
|
for _, x := range s {
|
|
if x == v {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|