Add new implementation of HasCommand

This commit is contained in:
Ryan Cavicchioni 2022-09-05 13:03:02 -05:00
parent 579921a975
commit 043738668b
Signed by: ryanc
GPG Key ID: 877EEDAF9245103D
2 changed files with 54 additions and 0 deletions

View File

@ -50,6 +50,33 @@ func BuildURI(rawuri, rawpath string) string {
return u.String()
}
func HasCommand(s, prefix string) bool {
s = strings.TrimSpace(s)
if len(s) == 0 || len(prefix) == 0 {
return false
}
if !strings.HasPrefix(s, prefix) {
return false
}
// remove the command prefix
s = s[len(prefix):]
// multiple assignment trick
cmd, _ := func() (string, string) {
x := strings.SplitN(s, " ", 2)
if len(x) > 1 {
return x[0], x[1]
}
return x[0], ""
}()
return len(cmd) > 0
}
func ContainsCommand(s, prefix, cmd string) bool {
s = strings.TrimSpace(s)

View File

@ -26,3 +26,30 @@ func TestContainsCommand(t *testing.T) {
}
}
}
func TestHasCommandCommand(t *testing.T) {
tables := []struct {
s string
prefix string
want bool
}{
{"!command", "!", true},
{"!command x y", "!", true},
{"!c x y", "!", true},
{"! x y", "!", false},
{"hey guy", "!", false},
{"hey", "!", false},
{"hey", "", false},
{"", "!", false},
{"", "", false},
}
for _, table := range tables {
if got, want := HasCommand(table.s, table.prefix), table.want; got != want {
t.Errorf(
"s: %s, prefix: %s, got: %t, want: %t",
table.s, table.prefix, got, want,
)
}
}
}