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  }