mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
fix: add more test cases on reflect.Value.Set
This commit is contained in:
parent
aaa657dcc3
commit
b66bcb1f67
|
@ -63,8 +63,4 @@ func RegisterModifier(s interface{}) {
|
||||||
}
|
}
|
||||||
reply.Message(fmt.Sprintf("update to %v successfully", newVal))
|
reply.Message(fmt.Sprintf("update to %v successfully", newVal))
|
||||||
})
|
})
|
||||||
|
|
||||||
RegisterCommand("/save", "Save config", func(reply interact.Reply) {
|
|
||||||
reply.Message("")
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package dynamic
|
package dynamic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -9,23 +10,28 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Strategy struct {
|
type Strategy struct {
|
||||||
Field1 fixedpoint.Value `json:"field1" modifiable:"true"`
|
Field1 fixedpoint.Value `json:"field1" modifiable:"true"`
|
||||||
Field2 float64 `json:"field2"`
|
Field2 float64 `json:"field2"`
|
||||||
field3 float64 `json:"field3" modifiable:"true"`
|
field3 float64 `json:"field3" modifiable:"true"`
|
||||||
|
Field4 *fixedpoint.Value `json:"field4" modifiable:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetModifiableFields(t *testing.T) {
|
func TestGetModifiableFields(t *testing.T) {
|
||||||
s := Strategy{}
|
s := Strategy{}
|
||||||
val := reflect.ValueOf(s)
|
val := reflect.ValueOf(s)
|
||||||
GetModifiableFields(val, func(tagName, name string) {
|
GetModifiableFields(val, func(tagName, name string) {
|
||||||
assert.Equal(t, tagName, "field1")
|
assert.NotEqual(t, tagName, "field2")
|
||||||
assert.Equal(t, name, "Field1")
|
assert.NotEqual(t, name, "Field2")
|
||||||
|
assert.NotEqual(t, tagName, "field3")
|
||||||
|
assert.NotEqual(t, name, "Field3")
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetModifiableField(t *testing.T) {
|
func TestGetModifiableField(t *testing.T) {
|
||||||
s := Strategy{}
|
// val must be get from pointer.Elem(), otherwise the fields will be unaddressable
|
||||||
val := reflect.ValueOf(s)
|
s := &Strategy{Field1: fixedpoint.NewFromInt(1)}
|
||||||
|
val := reflect.ValueOf(s).Elem()
|
||||||
_, ok := GetModifiableField(val, "Field1")
|
_, ok := GetModifiableField(val, "Field1")
|
||||||
assert.True(t, ok)
|
assert.True(t, ok)
|
||||||
_, ok = GetModifiableField(val, "Field2")
|
_, ok = GetModifiableField(val, "Field2")
|
||||||
|
@ -34,4 +40,18 @@ func TestGetModifiableField(t *testing.T) {
|
||||||
assert.False(t, ok)
|
assert.False(t, ok)
|
||||||
_, ok = GetModifiableField(val, "Random")
|
_, ok = GetModifiableField(val, "Random")
|
||||||
assert.False(t, ok)
|
assert.False(t, ok)
|
||||||
|
field, ok := GetModifiableField(val, "Field1")
|
||||||
|
assert.True(t, ok)
|
||||||
|
x := reflect.New(field.Type())
|
||||||
|
xi := x.Interface()
|
||||||
|
assert.NoError(t, json.Unmarshal([]byte("\"3.1415%\""), &xi))
|
||||||
|
assert.True(t, field.CanAddr())
|
||||||
|
field.Set(x.Elem())
|
||||||
|
assert.Equal(t, s.Field1.String(), "0.031415")
|
||||||
|
field, _ = GetModifiableField(val, "Field4")
|
||||||
|
x = reflect.New(field.Type())
|
||||||
|
xi = x.Interface()
|
||||||
|
assert.NoError(t, json.Unmarshal([]byte("311"), &xi))
|
||||||
|
field.Set(x.Elem())
|
||||||
|
assert.Equal(t, s.Field4.String(), "311")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user