feat: 完善 normalizeInputValue 支持 valuex.Accessor 并优化代码
- 在 valuex.Accessor 接口中添加 Raw() 方法 - normalizeInputValue 支持 valuex.Accessor 和 []valuex.Accessor 类型 - 提取 normalizeAccessorSlice 泛型函数消除重复代码 - 使用 switch 语句替代 if-else 链提高可读性 - 添加相关测试用例确保功能正确性
This commit is contained in:
53
rfx_test.go
53
rfx_test.go
@@ -2,7 +2,10 @@ package reflux
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"git.fsdpf.net/go/reflux/valuex"
|
||||
)
|
||||
|
||||
// 测试用的结构体
|
||||
@@ -1422,3 +1425,53 @@ func TestSetValueChainWithCast(t *testing.T) {
|
||||
t.Errorf("Expected Score to be 95.5, got %f", user.Score)
|
||||
}
|
||||
}
|
||||
|
||||
// TestNormalizeValuexAccessor 测试 normalizeInputValue 对 valuex.Accessor 的支持
|
||||
func TestNormalizeValuexAccessor(t *testing.T) {
|
||||
// 创建一个 R 实例
|
||||
data := map[string]any{
|
||||
"name": "Alice",
|
||||
"age": 30,
|
||||
}
|
||||
r := New(data)
|
||||
|
||||
// 测试 valuex.Accessor 类型
|
||||
rv, isPtr, err := normalizeInputValue(r)
|
||||
if err != nil {
|
||||
t.Fatalf("normalizeInputValue failed: %v", err)
|
||||
}
|
||||
if !isPtr {
|
||||
t.Error("Expected isPtr to be true for valuex.Accessor")
|
||||
}
|
||||
if !rv.IsValid() {
|
||||
t.Error("Expected valid reflect.Value")
|
||||
}
|
||||
}
|
||||
|
||||
// TestNormalizeValuexAccessorSlice 测试 normalizeInputValue 对 []valuex.Accessor 的支持
|
||||
func TestNormalizeValuexAccessorSlice(t *testing.T) {
|
||||
// 创建多个 R 实例
|
||||
r1 := New(map[string]any{"id": 1, "name": "Alice"})
|
||||
r2 := New(map[string]any{"id": 2, "name": "Bob"})
|
||||
|
||||
// 创建 []valuex.Accessor
|
||||
slice := []valuex.Accessor{r1, r2}
|
||||
|
||||
// 测试 []valuex.Accessor 类型
|
||||
rv, isPtr, err := normalizeInputValue(slice)
|
||||
if err != nil {
|
||||
t.Fatalf("normalizeInputValue failed: %v", err)
|
||||
}
|
||||
if !isPtr {
|
||||
t.Error("Expected isPtr to be true for []valuex.Accessor")
|
||||
}
|
||||
if !rv.IsValid() {
|
||||
t.Error("Expected valid reflect.Value")
|
||||
}
|
||||
if rv.Kind() != reflect.Slice {
|
||||
t.Errorf("Expected Slice kind, got %v", rv.Kind())
|
||||
}
|
||||
if rv.Len() != 2 {
|
||||
t.Errorf("Expected slice length 2, got %d", rv.Len())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user