Add tests for the string splitting function.
This commit is contained in:
		
							parent
							
								
									e95f80e351
								
							
						
					
					
						commit
						2079d811b4
					
				|  | @ -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) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @ -185,9 +185,6 @@ func getMapPairsFromString(value string) (pairs []string , err error) { | ||||||
| 	state := Plain | 	state := Plain | ||||||
| 	var start, quote int | 	var start, quote int | ||||||
| 
 | 
 | ||||||
| 	if value == "" { |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	for i, ch := range(strings.Split(value, "")) { | 	for i, ch := range(strings.Split(value, "")) { | ||||||
| 		if ch == `"` { | 		if ch == `"` { | ||||||
| 			if state == Plain { | 			if state == Plain { | ||||||
|  | @ -208,14 +205,16 @@ func getMapPairsFromString(value string) (pairs []string , err error) { | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		if ch == "," && state == Plain { | 		if ch == "," && state == Plain { | ||||||
| 			pairs = append(pairs, value[start:i]) | 			pairs = append(pairs, strings.Trim(value[start:i]," \t")) | ||||||
| 			start = i | 			start = i + 1 | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if state != Plain { | 	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 | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue