Add test & documentation for PropertiesToApply

Document PropertiesToApply expectations about props, and suggest it
should generally be generated via CreateProperties.

Test: go soong tests
Test: m nothing
Change-Id: I7cc2590db96865382ad6e0da333d4a4e2c697f45
This commit is contained in:
Liz Kammer
2020-12-16 09:34:33 -08:00
parent 61f6eb6664
commit fe8853d2e6
2 changed files with 83 additions and 5 deletions

View File

@@ -17,6 +17,8 @@ package soongconfig
import (
"reflect"
"testing"
"github.com/google/blueprint/proptools"
)
func Test_CanonicalizeToProperty(t *testing.T) {
@@ -247,3 +249,72 @@ func Test_createAffectablePropertiesType(t *testing.T) {
})
}
}
type properties struct {
A *string
B bool
}
type soongConfigVariables struct {
Bool_var properties
Other_bool_var properties
}
type soongConfigProps struct {
Soong_config_variables soongConfigVariables
}
func Test_PropertiesToApply(t *testing.T) {
mt := &ModuleType{
BaseModuleType: "foo",
ConfigNamespace: "bar",
Variables: []soongConfigVariable{
newBoolVariable("bool_var"),
newBoolVariable("other_bool_var"),
},
affectableProperties: []string{
"a",
"b",
},
}
props := soongConfigProps{
Soong_config_variables: soongConfigVariables{
Bool_var: properties{
A: proptools.StringPtr("a"),
B: true,
},
Other_bool_var: properties{
A: proptools.StringPtr("other"),
B: false,
},
},
}
testCases := []struct {
config SoongConfig
wantProps []interface{}
}{
{
config: Config(map[string]string{}),
},
{
config: Config(map[string]string{"bool_var": "y"}),
wantProps: []interface{}{props.Soong_config_variables.Bool_var},
},
{
config: Config(map[string]string{"other_bool_var": "y"}),
wantProps: []interface{}{props.Soong_config_variables.Other_bool_var},
},
}
for _, tc := range testCases {
gotProps, err := PropertiesToApply(mt, reflect.ValueOf(&props), tc.config)
if err != nil {
t.Errorf("Unexpected error in PropertiesToApply: %s", err)
}
if !reflect.DeepEqual(gotProps, tc.wantProps) {
t.Errorf("Expected %s, got %s", tc.wantProps, gotProps)
}
}
}