43 lines
1.1 KiB
Go
43 lines
1.1 KiB
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`}},
|
|
S{`foo "bar 'hello" baz`, []string{"foo", `bar 'hello`, `baz`}},
|
|
S{`foo "bar hello'" baz`, []string{"foo", `bar hello'`, `baz`}},
|
|
S{`foo "bar 'hello'" baz`, []string{"foo", `bar 'hello'`, `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
|
|
}
|