github.com/GoogleCloudPlatform/compute-image-tools/cli_tools@v0.0.0-20240516224744-de2dabc4ed1b/common/utils/param/key_value_parser_test.go (about) 1 // Copyright 2019 Google Inc. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package param 16 17 import ( 18 "testing" 19 20 "github.com/stretchr/testify/assert" 21 ) 22 23 func TestParseKeyValuesReturnsEmptyMap(t *testing.T) { 24 keyValueMap, err := ParseKeyValues("") 25 assert.Nil(t, err) 26 assert.NotNil(t, keyValueMap) 27 if len(keyValueMap) > 0 { 28 t.Errorf("key-values map %v should be empty, but it's size is %v.", keyValueMap, len(keyValueMap)) 29 } 30 } 31 32 func TestParseKeyValues(t *testing.T) { 33 doTestParseKeyValues("userkey1=uservalue1,userkey2=uservalue2", t) 34 } 35 36 func TestParseKeyValuesWithWhiteChars(t *testing.T) { 37 doTestParseKeyValues(" userkey1 = uservalue1 , userkey2 = uservalue2 ", t) 38 } 39 40 func doTestParseKeyValues(keyValueStr string, t *testing.T) { 41 keyValuesMap, err := ParseKeyValues(keyValueStr) 42 assert.Nil(t, err) 43 assert.NotNil(t, keyValuesMap) 44 if len(keyValuesMap) != 2 { 45 t.Errorf("key-value map %v should be have size 2, but it's %v.", keyValuesMap, len(keyValuesMap)) 46 } 47 assert.Equal(t, "uservalue1", (keyValuesMap)["userkey1"]) 48 assert.Equal(t, "uservalue2", (keyValuesMap)["userkey2"]) 49 } 50 51 func TestParseKeyValuesNoEqualsSignSingleValue(t *testing.T) { 52 doTestParseKeyValuesNoEqualsSign("userkey1", t) 53 } 54 55 func TestParseKeyValuesNoEqualsSignLast(t *testing.T) { 56 doTestParseKeyValuesNoEqualsSign("userkey2=uservalue2,userkey1", t) 57 } 58 59 func TestParseKeyValuesNoEqualsSignFirst(t *testing.T) { 60 doTestParseKeyValuesNoEqualsSign("userkey1,userkey2=uservalue2", t) 61 } 62 63 func TestParseKeyValuesNoEqualsSignMiddle(t *testing.T) { 64 doTestParseKeyValuesNoEqualsSign("userkey3=uservalue3,userkey1,userkey2=uservalue2", t) 65 } 66 67 func TestParseKeyValuesNoEqualsSignMultiple(t *testing.T) { 68 doTestParseKeyValuesNoEqualsSign("userkey1,userkey2", t) 69 } 70 71 func TestParseKeyValuesWhiteSpacesOnlyInKey(t *testing.T) { 72 doTestParseKeyValuesError(" =uservalue1", "key-values map %v should be nil for %v", t) 73 } 74 75 func TestParseKeyValuesWhiteSpacesOnlyInValue(t *testing.T) { 76 doTestParseKeyValuesError("userkey= ", "key-values map %v should be nil for %v", t) 77 } 78 79 func TestParseKeyValuesWhiteSpacesOnlyInKeyAndValue(t *testing.T) { 80 doTestParseKeyValuesError(" = ", "key-values map %v should be nil for %v", t) 81 } 82 83 func doTestParseKeyValuesNoEqualsSign(keyValueStr string, t *testing.T) { 84 doTestParseKeyValuesError(keyValueStr, "key-values map %v should be nil for v%", t) 85 } 86 87 func doTestParseKeyValuesError(keyValueStr string, errorMsg string, t *testing.T) { 88 valuesMap, err := ParseKeyValues(keyValueStr) 89 if valuesMap != nil { 90 t.Errorf(errorMsg, valuesMap, keyValueStr) 91 } 92 assert.NotNil(t, err) 93 }