Gibheer
10fb89a017
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.
40 lines
955 B
Go
40 lines
955 B
Go
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
|
|
}
|