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