github.com/ShaleApps/viper@v1.15.1-concurrent/internal/encoding/toml/codec_test.go (about) 1 package toml 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 // original form of the data 9 const original = `# key-value pair 10 key = "value" 11 list = ["item1", "item2", "item3"] 12 13 [map] 14 key = "value" 15 16 # nested 17 # map 18 [nested_map] 19 [nested_map.map] 20 key = "value" 21 list = [ 22 "item1", 23 "item2", 24 "item3", 25 ] 26 ` 27 28 // encoded form of the data 29 const encoded = `key = 'value' 30 list = ['item1', 'item2', 'item3'] 31 32 [map] 33 key = 'value' 34 35 [nested_map] 36 [nested_map.map] 37 key = 'value' 38 list = ['item1', 'item2', 'item3'] 39 ` 40 41 // Viper's internal representation 42 var data = map[string]interface{}{ 43 "key": "value", 44 "list": []interface{}{ 45 "item1", 46 "item2", 47 "item3", 48 }, 49 "map": map[string]interface{}{ 50 "key": "value", 51 }, 52 "nested_map": map[string]interface{}{ 53 "map": map[string]interface{}{ 54 "key": "value", 55 "list": []interface{}{ 56 "item1", 57 "item2", 58 "item3", 59 }, 60 }, 61 }, 62 } 63 64 func TestCodec_Encode(t *testing.T) { 65 codec := Codec{} 66 67 b, err := codec.Encode(data) 68 if err != nil { 69 t.Fatal(err) 70 } 71 72 if encoded != string(b) { 73 t.Fatalf("decoded value does not match the expected one\nactual: %#v\nexpected: %#v", string(b), encoded) 74 } 75 } 76 77 func TestCodec_Decode(t *testing.T) { 78 t.Run("OK", func(t *testing.T) { 79 codec := Codec{} 80 81 v := map[string]interface{}{} 82 83 err := codec.Decode([]byte(original), v) 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 if !reflect.DeepEqual(data, v) { 89 t.Fatalf("decoded value does not match the expected one\nactual: %#v\nexpected: %#v", v, data) 90 } 91 }) 92 93 t.Run("InvalidData", func(t *testing.T) { 94 codec := Codec{} 95 96 v := map[string]interface{}{} 97 98 err := codec.Decode([]byte(`invalid data`), v) 99 if err == nil { 100 t.Fatal("expected decoding to fail") 101 } 102 103 t.Logf("decoding failed as expected: %s", err) 104 }) 105 }