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 }