Add tests for the string splitting function.

This commit is contained in:
Oleksii Kliukin 2017-11-08 14:14:42 +01:00
parent e95f80e351
commit 2079d811b4
2 changed files with 38 additions and 7 deletions

View File

@ -0,0 +1,32 @@
package config
import (
"testing"
"reflect"
"fmt"
)
var getMapPairsFromStringTest = []struct {
in string
expected []string
err error
}{
{"log_statement:all, work_mem:'4GB'", []string{"log_statement:all", "work_mem:'4GB'"}, nil},
{`log_statement:none, search_path:'"$user", public'`, []string{"log_statement:none", `search_path:'"$user", public'`}, nil},
{`search_path:'"$user"`, nil, fmt.Errorf("unclosed quote starting at position 13")},
{"", []string{""}, nil},
{",,log_statement:all ,", []string{"","","log_statement:all", ""}, nil},
}
func TestGetMapPairsFromString(t *testing.T) {
for _, tt := range getMapPairsFromStringTest {
got, err := getMapPairsFromString(tt.in)
if err != tt.err && ((err == nil || tt.err == nil) || (err.Error() != tt.err.Error())) {
t.Errorf("TestGetMapPairsFromString with %s: expected error: %#v, got %#v", tt.in, tt.err, err)
}
if !reflect.DeepEqual(got, tt.expected) {
t.Errorf("TestGetMapPairsFromString with %s: expected %#v, got %#v", tt.in, tt.expected, got)
}
}
}

View File

@ -185,9 +185,6 @@ func getMapPairsFromString(value string) (pairs []string , err error) {
state := Plain
var start, quote int
if value == "" {
return
}
for i, ch := range(strings.Split(value, "")) {
if ch == `"` {
if state == Plain {
@ -208,14 +205,16 @@ func getMapPairsFromString(value string) (pairs []string , err error) {
}
}
if ch == "," && state == Plain {
pairs = append(pairs, value[start:i])
start = i
pairs = append(pairs, strings.Trim(value[start:i]," \t"))
start = i + 1
}
}
if state != Plain {
err = fmt.Errorf("unclosed quote starting at position %d", quote)
err = fmt.Errorf("unclosed quote starting at position %d", quote + 1)
pairs = nil
} else {
pairs = append(pairs, strings.Trim(value[start:], " \t"))
}
pairs = append(pairs, value[start:])
return
}