mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 09:23:48 +00:00
Fix unexported field support (for eventual future code)
This commit is contained in:
parent
6e646046c8
commit
2487e925b0
1 changed files with 10 additions and 4 deletions
|
|
@ -413,7 +413,9 @@ func allFieldsAreSet(t *testing.T, x any) {
|
||||||
fieldName := typ.Field(i).Name
|
fieldName := typ.Field(i).Name
|
||||||
fieldValue := field
|
fieldValue := field
|
||||||
if unicode.IsLower(rune(fieldName[0])) { // unexported
|
if unicode.IsLower(rune(fieldName[0])) { // unexported
|
||||||
require.Falsef(t, field.IsNil(), "field %q is nil", fieldName)
|
if field.Kind() == reflect.Ptr {
|
||||||
|
require.Falsef(t, field.IsNil(), "field %q is nil", fieldName)
|
||||||
|
}
|
||||||
field = reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())).Elem()
|
field = reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())).Elem()
|
||||||
fieldValue = field
|
fieldValue = field
|
||||||
}
|
}
|
||||||
|
|
@ -435,7 +437,8 @@ func fieldsAreDeepCopied(t *testing.T, original, cpy any) {
|
||||||
for i := 0; i < v.NumField(); i++ {
|
for i := 0; i < v.NumField(); i++ {
|
||||||
field := v.Field(i)
|
field := v.Field(i)
|
||||||
fieldName := v.Type().Field(i).Name
|
fieldName := v.Type().Field(i).Name
|
||||||
if unicode.IsLower(rune(fieldName[0])) {
|
isUnexported := unicode.IsLower(rune(fieldName[0]))
|
||||||
|
if isUnexported {
|
||||||
field = reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())).Elem()
|
field = reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())).Elem()
|
||||||
}
|
}
|
||||||
var originalField any
|
var originalField any
|
||||||
|
|
@ -466,7 +469,10 @@ func fieldsAreDeepCopied(t *testing.T, original, cpy any) {
|
||||||
t.Fatalf("unexpected field kind %v for %q", field.Kind(), fieldName)
|
t.Fatalf("unexpected field kind %v for %q", field.Kind(), fieldName)
|
||||||
}
|
}
|
||||||
|
|
||||||
cpyField := reflect.ValueOf(cpy).Elem().Field(i).Interface()
|
cpyField := reflect.ValueOf(cpy).Elem().Field(i)
|
||||||
assert.NotEqualf(t, originalField, cpyField, "field %q", fieldName)
|
if isUnexported {
|
||||||
|
cpyField = reflect.NewAt(cpyField.Type(), unsafe.Pointer(cpyField.UnsafeAddr())).Elem()
|
||||||
|
}
|
||||||
|
assert.NotEqualf(t, originalField, cpyField.Interface(), "field %q", fieldName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue