github.com/RevenueMonster/sqlike@v1.0.6/jsonb/registry_test.go (about)

     1  package jsonb
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestRegistry(t *testing.T) {
    11  	var (
    12  		rg  = buildDefaultRegistry()
    13  		err error
    14  	)
    15  
    16  	t.Run("SetKindCoder", func(t *testing.T) {
    17  		kind := reflect.String
    18  		require.Panics(t, func() {
    19  			rg.SetKindCoder(kind, textMarshalerEncoder(), nil)
    20  		})
    21  		require.Panics(t, func() {
    22  			rg.SetKindCoder(kind, nil, textUnmarshalerDecoder())
    23  		})
    24  	})
    25  
    26  	t.Run("SetTypeCoder", func(t *testing.T) {
    27  		rt := reflect.TypeOf("")
    28  		require.Panics(t, func() {
    29  			rg.SetTypeCoder(rt, textMarshalerEncoder(), nil)
    30  		})
    31  		require.Panics(t, func() {
    32  			rg.SetTypeCoder(rt, nil, textUnmarshalerDecoder())
    33  		})
    34  	})
    35  
    36  	t.Run("LookupDecoder", func(t *testing.T) {
    37  		t.Run("", func(t *testing.T) {
    38  			var str string
    39  			v := reflect.ValueOf(str)
    40  
    41  			dec, err := rg.LookupDecoder(v.Type())
    42  			require.NoError(t, err)
    43  			require.NotNil(t, dec)
    44  
    45  			enc, err := rg.LookupEncoder(v)
    46  			require.NoError(t, err)
    47  			require.NotNil(t, enc)
    48  		})
    49  
    50  		t.Run("on missing type", func(t *testing.T) {
    51  			ch := make(chan interface{})
    52  			v := reflect.ValueOf(ch)
    53  			_, err = rg.LookupDecoder(v.Type())
    54  			require.Error(t, err)
    55  			_, err = rg.LookupEncoder(v)
    56  			require.Error(t, err)
    57  		})
    58  	})
    59  }