github.com/ShaleApps/viper@v1.15.1-concurrent/internal/encoding/decoder_test.go (about) 1 package encoding 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 type decoder struct { 9 v map[string]interface{} 10 } 11 12 func (d decoder) Decode(_ []byte, v map[string]interface{}) error { 13 for key, value := range d.v { 14 v[key] = value 15 } 16 17 return nil 18 } 19 20 func TestDecoderRegistry_RegisterDecoder(t *testing.T) { 21 t.Run("OK", func(t *testing.T) { 22 registry := NewDecoderRegistry() 23 24 err := registry.RegisterDecoder("myformat", decoder{}) 25 if err != nil { 26 t.Fatal(err) 27 } 28 }) 29 30 t.Run("AlreadyRegistered", func(t *testing.T) { 31 registry := NewDecoderRegistry() 32 33 err := registry.RegisterDecoder("myformat", decoder{}) 34 if err != nil { 35 t.Fatal(err) 36 } 37 38 err = registry.RegisterDecoder("myformat", decoder{}) 39 if err != ErrDecoderFormatAlreadyRegistered { 40 t.Fatalf("expected ErrDecoderFormatAlreadyRegistered, got: %v", err) 41 } 42 }) 43 } 44 45 func TestDecoderRegistry_Decode(t *testing.T) { 46 t.Run("OK", func(t *testing.T) { 47 registry := NewDecoderRegistry() 48 decoder := decoder{ 49 v: map[string]interface{}{ 50 "key": "value", 51 }, 52 } 53 54 err := registry.RegisterDecoder("myformat", decoder) 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 v := map[string]interface{}{} 60 61 err = registry.Decode("myformat", []byte("key: value"), v) 62 if err != nil { 63 t.Fatal(err) 64 } 65 66 if !reflect.DeepEqual(decoder.v, v) { 67 t.Fatalf("decoded value does not match the expected one\nactual: %+v\nexpected: %+v", v, decoder.v) 68 } 69 }) 70 71 t.Run("DecoderNotFound", func(t *testing.T) { 72 registry := NewDecoderRegistry() 73 74 v := map[string]interface{}{} 75 76 err := registry.Decode("myformat", nil, v) 77 if err != ErrDecoderNotFound { 78 t.Fatalf("expected ErrDecoderNotFound, got: %v", err) 79 } 80 }) 81 }