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