Add a new util to clear a property

proptools.Clear(ptr) clears a property with its zero value.

Bug: 313806237
Test: m blueprint_tests
Change-Id: Ib78f9f88a9b0a8b04e1ab6c5e545b55ba4269e5d
This commit is contained in:
Jooyung Han 2023-12-01 13:53:54 +09:00
parent 50fe8e79e5
commit 02d2b9e4cc
2 changed files with 51 additions and 1 deletions

View file

@ -53,6 +53,12 @@ func FieldNameForProperty(propertyName string) string {
return fieldName
}
// Clear takes a pointer to a field and clears the value pointed to by the pointer with zero value.
func Clear[T any](ptr *T) {
var zeroValue T
*ptr = zeroValue
}
// BoolPtr returns a pointer to a new bool containing the given value.
func BoolPtr(b bool) *bool {
return &b

View file

@ -14,7 +14,9 @@
package proptools
import "testing"
import (
"testing"
)
func TestPropertyNameForField(t *testing.T) {
tests := []struct {
@ -112,3 +114,45 @@ func TestFieldNameForProperty(t *testing.T) {
})
}
}
func TestClearField(t *testing.T) {
props := struct {
i int
s string
ps *string
ss []string
c struct {
n int
}
}{}
props.i = 42
Clear(&props.i)
if props.i != 0 {
t.Error("int field is not cleared to zero.")
}
props.s = "foo"
Clear(&props.s)
if props.s != "" {
t.Error("string field is not cleared to zero.")
}
props.ps = StringPtr("foo")
Clear(&props.ps)
if props.ps != nil {
t.Error("string pointer field is not cleared to zero.")
}
props.ss = []string{"foo"}
Clear(&props.ss)
if props.ss != nil {
t.Error("string array field is not cleared to zero.")
}
props.c.n = 42
Clear(&props.c)
if props.c.n != 0 {
t.Error("struct field is not cleared to zero.")
}
}