...

Source file src/github.com/spf13/viper/internal/encoding/decoder_test.go

Documentation: github.com/spf13/viper/internal/encoding

     1  package encoding
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  type decoder struct {
    11  	v map[string]any
    12  }
    13  
    14  func (d decoder) Decode(_ []byte, v map[string]any) error {
    15  	for key, value := range d.v {
    16  		v[key] = value
    17  	}
    18  
    19  	return nil
    20  }
    21  
    22  func TestDecoderRegistry_RegisterDecoder(t *testing.T) {
    23  	t.Run("OK", func(t *testing.T) {
    24  		registry := NewDecoderRegistry()
    25  
    26  		err := registry.RegisterDecoder("myformat", decoder{})
    27  		require.NoError(t, err)
    28  	})
    29  
    30  	t.Run("AlreadyRegistered", func(t *testing.T) {
    31  		registry := NewDecoderRegistry()
    32  
    33  		err := registry.RegisterDecoder("myformat", decoder{})
    34  		require.NoError(t, err)
    35  
    36  		err = registry.RegisterDecoder("myformat", decoder{})
    37  		assert.ErrorIs(t, err, ErrDecoderFormatAlreadyRegistered)
    38  	})
    39  }
    40  
    41  func TestDecoderRegistry_Decode(t *testing.T) {
    42  	t.Run("OK", func(t *testing.T) {
    43  		registry := NewDecoderRegistry()
    44  		decoder := decoder{
    45  			v: map[string]any{
    46  				"key": "value",
    47  			},
    48  		}
    49  
    50  		err := registry.RegisterDecoder("myformat", decoder)
    51  		require.NoError(t, err)
    52  
    53  		v := map[string]any{}
    54  
    55  		err = registry.Decode("myformat", []byte("key: value"), v)
    56  		require.NoError(t, err)
    57  
    58  		assert.Equal(t, decoder.v, v)
    59  	})
    60  
    61  	t.Run("DecoderNotFound", func(t *testing.T) {
    62  		registry := NewDecoderRegistry()
    63  
    64  		v := map[string]any{}
    65  
    66  		err := registry.Decode("myformat", nil, v)
    67  		assert.ErrorIs(t, err, ErrDecoderNotFound)
    68  	})
    69  }
    70  

View as plain text