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

     1  package codec
     2  
     3  import (
     4  	"database/sql/driver"
     5  	"reflect"
     6  	"testing"
     7  
     8  	"github.com/RevenueMonster/sqlike/reflext"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  type num struct {
    13  }
    14  
    15  func (num) Value() (driver.Value, error) {
    16  	return int64(1000), nil
    17  }
    18  
    19  func TestRegistry(t *testing.T) {
    20  	rg := NewRegistry()
    21  
    22  	kind := reflect.String
    23  	rg.RegisterKindCodec(kind, nil, nil)
    24  	rg.RegisterKindEncoder(kind, nil)
    25  	rg.RegisterKindDecoder(kind, nil)
    26  
    27  	typeof := reflect.TypeOf([]byte{})
    28  	rg.RegisterTypeCodec(typeof, nil, nil)
    29  	rg.RegisterTypeEncoder(typeof, nil)
    30  	rg.RegisterTypeDecoder(typeof, nil)
    31  
    32  	tByte := reflect.TypeOf([]byte{})
    33  	byteEncoder := func(_ reflext.StructFielder, v reflect.Value) (interface{}, error) {
    34  		return v.Bytes(), nil
    35  	}
    36  	rg.RegisterTypeCodec(tByte, byteEncoder, nil)
    37  	// encoder, err := rg.LookupEncoder(reflect.ValueOf([]byte{}))
    38  	// require.NoError(t, err)
    39  
    40  	// require.Same(t, ValueEncoder(byteEncoder), encoder)
    41  }
    42  
    43  func TestEncodeValue(t *testing.T) {
    44  	{
    45  		it, err := encodeValue(nil, reflect.ValueOf(nil))
    46  		require.NoError(t, err)
    47  		require.Nil(t, it)
    48  	}
    49  
    50  	{
    51  		it, err := encodeValue(nil, reflect.ValueOf("hello world"))
    52  		require.Error(t, err)
    53  		require.Nil(t, it)
    54  	}
    55  
    56  	{
    57  		var it interface{}
    58  		it = num{}
    59  		x := it.(driver.Valuer)
    60  		it, err := encodeValue(nil, reflect.ValueOf(x))
    61  		require.NoError(t, err)
    62  		require.Equal(t, int64(1000), it)
    63  	}
    64  }
    65  
    66  func TestNilEncoder(t *testing.T) {
    67  	var (
    68  		v   reflect.Value
    69  		it  interface{}
    70  		err error
    71  	)
    72  
    73  	{
    74  		v = reflect.ValueOf(nil)
    75  		it, err = NilEncoder(nil, v)
    76  		require.NoError(t, err)
    77  		require.Nil(t, it)
    78  	}
    79  
    80  	{
    81  		str := "hello world"
    82  		v = reflect.ValueOf(str)
    83  		it, err = NilEncoder(nil, v)
    84  		require.NoError(t, err)
    85  		require.Nil(t, it)
    86  	}
    87  }