1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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)
- })
- }
|