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"}'`, ) }