61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
|
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"}'`,
|
||
|
)
|
||
|
}
|