From 2487e925b0b2dd3838833e59bc25874e759f28ad Mon Sep 17 00:00:00 2001 From: Quentin Mc Gaw Date: Wed, 12 Feb 2025 14:38:13 +0100 Subject: [PATCH] Fix unexported field support (for eventual future code) --- core/types/block_test.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/types/block_test.go b/core/types/block_test.go index 5048a1f88d..32baa3529f 100644 --- a/core/types/block_test.go +++ b/core/types/block_test.go @@ -413,7 +413,9 @@ func allFieldsAreSet(t *testing.T, x any) { fieldName := typ.Field(i).Name fieldValue := field 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() fieldValue = field } @@ -435,7 +437,8 @@ func fieldsAreDeepCopied(t *testing.T, original, cpy any) { for i := 0; i < v.NumField(); i++ { field := v.Field(i) 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() } 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) } - cpyField := reflect.ValueOf(cpy).Elem().Field(i).Interface() - assert.NotEqualf(t, originalField, cpyField, "field %q", fieldName) + cpyField := reflect.ValueOf(cpy).Elem().Field(i) + if isUnexported { + cpyField = reflect.NewAt(cpyField.Type(), unsafe.Pointer(cpyField.UnsafeAddr())).Elem() + } + assert.NotEqualf(t, originalField, cpyField.Interface(), "field %q", fieldName) } }