From 2079d811b443448acf3e4cfe26da15554f83202b Mon Sep 17 00:00:00 2001 From: Oleksii Kliukin Date: Wed, 8 Nov 2017 14:14:42 +0100 Subject: [PATCH] Add tests for the string splitting function. --- pkg/util/config/config_test.go | 32 ++++++++++++++++++++++++++++++++ pkg/util/config/util.go | 13 ++++++------- 2 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 pkg/util/config/config_test.go diff --git a/pkg/util/config/config_test.go b/pkg/util/config/config_test.go new file mode 100644 index 000000000..f6e2c374c --- /dev/null +++ b/pkg/util/config/config_test.go @@ -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) + } + } +} + diff --git a/pkg/util/config/util.go b/pkg/util/config/util.go index 97fe3cfd4..e07001381 100644 --- a/pkg/util/config/util.go +++ b/pkg/util/config/util.go @@ -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 }