diff options
author | uzhas <uzhas@ydb.tech> | 2023-08-24 17:35:21 +0300 |
---|---|---|
committer | uzhas <uzhas@ydb.tech> | 2023-08-24 17:53:39 +0300 |
commit | de6e39881d059d67cbcc978d076d9e3e5e9732fc (patch) | |
tree | cdf4e77c0156fe7f192d644883954f302fc56c01 /library/go/x/xreflect/assign_test.go | |
parent | b890c9f4f00efbc099a862b70c1dbc4c7db3dd2f (diff) | |
download | ydb-de6e39881d059d67cbcc978d076d9e3e5e9732fc.tar.gz |
move yql connector to ydb
move code
Diffstat (limited to 'library/go/x/xreflect/assign_test.go')
-rw-r--r-- | library/go/x/xreflect/assign_test.go | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/library/go/x/xreflect/assign_test.go b/library/go/x/xreflect/assign_test.go new file mode 100644 index 0000000000..45fd7186a7 --- /dev/null +++ b/library/go/x/xreflect/assign_test.go @@ -0,0 +1,83 @@ +package xreflect_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/ydb-platform/ydb/library/go/x/xreflect" +) + +type Foo struct { + S string +} + +var _ InterfaceFoo = &Foo{} + +func (f *Foo) FuncFoo() {} + +type InterfaceFoo interface { + FuncFoo() +} + +type Bar struct { + I int +} + +var _ InterfaceBar = &Bar{} + +func (f *Bar) FuncBar() {} + +type InterfaceBar interface { + FuncBar() +} + +func TestAssign(t *testing.T) { + t.Run("ValueToValue", func(t *testing.T) { + src := Foo{S: "S"} + var dst Foo + require.True(t, xreflect.Assign(src, &dst)) + require.Equal(t, src, dst) + }) + + t.Run("ValueToValueInvalid", func(t *testing.T) { + src := Foo{S: "S"} + var dst Bar + require.False(t, xreflect.Assign(src, &dst)) + require.Equal(t, Bar{}, dst) + }) + + t.Run("ValueToInterface", func(t *testing.T) { + src := Foo{S: "S"} + var dst InterfaceFoo + require.True(t, xreflect.Assign(&src, &dst)) + require.NotNil(t, dst) + v, ok := dst.(*Foo) + require.True(t, ok) + require.Equal(t, &src, v) + }) + + t.Run("ValueToInterfaceInvalid", func(t *testing.T) { + src := Bar{I: 42} + var dst InterfaceFoo + require.False(t, xreflect.Assign(&src, &dst)) + require.Nil(t, dst) + }) + + t.Run("InterfaceToInterface", func(t *testing.T) { + src := InterfaceFoo(&Foo{S: "S"}) + var dst InterfaceFoo + require.True(t, xreflect.Assign(src, &dst)) + require.NotNil(t, dst) + require.Equal(t, src, dst) + v, ok := dst.(*Foo) + require.True(t, ok) + require.Equal(t, src, v) + }) + + t.Run("InterfaceToInterfaceInvalid", func(t *testing.T) { + src := InterfaceFoo(&Foo{S: "S"}) + var dst InterfaceBar + require.False(t, xreflect.Assign(src, &dst)) + require.Nil(t, dst) + }) +} |