116 lines
2.2 KiB
Go
116 lines
2.2 KiB
Go
package dynamic
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type callTest struct {
|
|
ChildCall1 *childCall1
|
|
ChildCall2 *childCall2
|
|
}
|
|
|
|
type childCall1 struct{}
|
|
|
|
func (c *childCall1) Subscribe(a int) {}
|
|
|
|
type childCall2 struct{}
|
|
|
|
func (c *childCall2) Subscribe(a int) {}
|
|
|
|
func TestCallStructFieldsMethod(t *testing.T) {
|
|
c := &callTest{
|
|
ChildCall1: &childCall1{},
|
|
ChildCall2: &childCall2{},
|
|
}
|
|
err := CallStructFieldsMethod(c, "Subscribe", 10)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
type S struct {
|
|
ID string
|
|
}
|
|
|
|
func (s *S) String() string { return s.ID }
|
|
|
|
func TestCallMatch(t *testing.T) {
|
|
t.Run("simple", func(t *testing.T) {
|
|
f := func(a int, b int) {
|
|
assert.Equal(t, 1, a)
|
|
assert.Equal(t, 2, b)
|
|
}
|
|
_, err := CallMatch(f, 1, 2)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("interface", func(t *testing.T) {
|
|
type A interface {
|
|
String() string
|
|
}
|
|
f := func(foo int, a A) {
|
|
assert.Equal(t, "foo", a.String())
|
|
}
|
|
_, err := CallMatch(f, 10, &S{ID: "foo"})
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("nil interface", func(t *testing.T) {
|
|
type A interface {
|
|
String() string
|
|
}
|
|
f := func(foo int, a A) {
|
|
assert.Equal(t, 10, foo)
|
|
assert.Nil(t, a)
|
|
}
|
|
_, err := CallMatch(f, 10)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("struct pointer", func(t *testing.T) {
|
|
f := func(foo int, s *S) {
|
|
assert.Equal(t, 10, foo)
|
|
assert.NotNil(t, s)
|
|
}
|
|
_, err := CallMatch(f, 10, &S{})
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("struct pointer x 2", func(t *testing.T) {
|
|
f := func(foo int, s1, s2 *S) {
|
|
assert.Equal(t, 10, foo)
|
|
assert.Equal(t, "s1", s1.String())
|
|
assert.Equal(t, "s2", s2.String())
|
|
}
|
|
_, err := CallMatch(f, 10, &S{ID: "s1"}, &S{ID: "s2"})
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("func factory", func(t *testing.T) {
|
|
f := func(s *S) {
|
|
assert.Equal(t, "factory", s.String())
|
|
}
|
|
_, err := CallMatch(f, func() *S {
|
|
return &S{ID: "factory"}
|
|
})
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("nil", func(t *testing.T) {
|
|
f := func(s *S) {
|
|
assert.Nil(t, s)
|
|
}
|
|
_, err := CallMatch(f)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("zero struct", func(t *testing.T) {
|
|
f := func(s S) {
|
|
assert.Equal(t, S{}, s)
|
|
}
|
|
_, err := CallMatch(f)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
}
|