aboutsummaryrefslogtreecommitdiffstats
path: root/library/go/x/xreflect/assign_test.go
diff options
context:
space:
mode:
authoruzhas <uzhas@ydb.tech>2023-08-24 17:35:21 +0300
committeruzhas <uzhas@ydb.tech>2023-08-24 17:53:39 +0300
commitde6e39881d059d67cbcc978d076d9e3e5e9732fc (patch)
treecdf4e77c0156fe7f192d644883954f302fc56c01 /library/go/x/xreflect/assign_test.go
parentb890c9f4f00efbc099a862b70c1dbc4c7db3dd2f (diff)
downloadydb-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.go83
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)
+ })
+}