From 10fb89a017edb4fe35d87d22f1ff96d79e78c185 Mon Sep 17 00:00:00 2001 From: Gibheer Date: Fri, 14 Dec 2018 14:02:58 +0100 Subject: monwork - readd stringToShellFields This function was needed as bytes.Fields had some problems with the quoting. Now there are test cases too so that errors can be found more easily. --- cmd/monwork/shell_fields_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 cmd/monwork/shell_fields_test.go (limited to 'cmd/monwork/shell_fields_test.go') diff --git a/cmd/monwork/shell_fields_test.go b/cmd/monwork/shell_fields_test.go new file mode 100644 index 0000000..4ee55cc --- /dev/null +++ b/cmd/monwork/shell_fields_test.go @@ -0,0 +1,39 @@ +package main + +import ( + "bytes" + "fmt" + "testing" +) + +func TestStringToShellFields(t *testing.T) { + type S struct { + source string + target []string + } + for i, e := range []S{ + S{"foo", []string{"foo"}}, + S{"foo bar", []string{"foo", "bar"}}, + S{`foo "bar"`, []string{"foo", `bar`}}, + S{`foo "bar baz"`, []string{"foo", `bar baz`}}, + S{`foo "bar" "baz"`, []string{"foo", `bar`, `baz`}}, + S{`foo "bar" "baz"`, []string{"foo", `bar`, `baz`}}, + } { + result := stringToShellFields([]byte(e.source)) + if err := compare(e.target, result); err != nil { + t.Errorf("test %d did not match: %s", i, err) + } + } +} + +func compare(source []string, target [][]byte) error { + if len(source) != len(target) { + return fmt.Errorf("length mismatch %d vs %d", len(source), len(target)) + } + for i, e := range source { + if bytes.Compare([]byte(e), target[i]) != 0 { + return fmt.Errorf("mismatch in content field %d: %s vs %s", i, e, target[i]) + } + } + return nil +} -- cgit v1.2.3-70-g09d2