intake/web/shlex_test.go

61 lines
1.2 KiB
Go
Raw Normal View History

2025-02-12 18:04:58 +00:00
package web
import "testing"
func TestShlex(t *testing.T) {
shlex := func(t *testing.T, cmd string, expected ...string) {
t.Helper()
actual, err := Shlex(cmd)
if err != nil {
t.Fatalf("shlex failed: %v", err)
}
if len(actual) != len(expected) {
t.Fatalf("expected %d args, got %d\nexpect: %v\nactual: %v", len(expected), len(actual), expected, actual)
}
for i := range len(expected) {
if actual[i] != expected[i] {
t.Fatalf("arg %d incorrect: expected %s got %s", i, expected[i], actual[i])
}
}
}
quote := func(t *testing.T, argvAndExpected ...string) {
t.Helper()
argv := argvAndExpected[:len(argvAndExpected)-1]
expected := argvAndExpected[len(argvAndExpected)-1]
actual, err := Quote(argv)
if err != nil {
t.Fatalf("quote failed: %v", err)
}
if actual != expected {
t.Fatalf("expected %q, got %q", expected, actual)
}
}
shlex(t,
`Lord "have mercy"`,
"Lord", "have mercy",
)
shlex(t,
`jq -cR '{id: .}'`,
"jq", "-cR", `{id: .}`,
)
shlex(t,
`jq -cR '{id: "hello"}'`,
"jq", "-cR", `{id: "hello"}`,
)
quote(t,
"Lord", "have mercy",
`Lord 'have mercy'`,
)
quote(t,
"jq", "-cR", `{id: .}`,
`jq -cR '{id: .}'`,
)
quote(t,
"jq", "-cR", `{id: "hello"}`,
`jq -cR '{id: "hello"}'`,
)
}