Fix TestCloneProperties for go 1.21

Go 1.21 does a better job using the same empty allocation for empty
structs, allow cloned properties to point to the original when it
is an empty struct.

Bug: 309895579
Test: TestCloneProperties
Change-Id: I064f2316a8a8017a109968671ac305dbbe3246af
This commit is contained in:
Colin Cross 2023-11-08 21:59:29 -08:00
parent 228915b2f1
commit 50fe8e79e5

View file

@ -296,6 +296,21 @@ type EmbeddedStruct struct {
}
type EmbeddedInterface interface{}
func isPointerToEmptyStruct(v any) bool {
t := reflect.TypeOf(v)
if t.Kind() != reflect.Ptr {
return false
}
t = t.Elem()
if t.Kind() != reflect.Struct {
return false
}
if t.NumField() > 0 {
return false
}
return true
}
func TestCloneProperties(t *testing.T) {
for _, testCase := range clonePropertiesTestCases {
testString := fmt.Sprintf("%s", testCase.in)
@ -308,7 +323,7 @@ func TestCloneProperties(t *testing.T) {
t.Errorf(" expected: %#v", testCase.out)
t.Errorf(" got: %#v", got)
}
if testCase.out == got {
if testCase.out == got && !isPointerToEmptyStruct(testCase.out) {
t.Errorf("test case %s", testString)
t.Errorf("items should be cloned, not the original")
t.Errorf(" expected: %s", testCase.out)