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:
parent
61f6eb6664
commit
fe8853d2e6
|
@ -158,11 +158,7 @@ func processModuleTypeDef(v *SoongConfigDefinition, def *parser.Module) (errs []
|
|||
return []error{fmt.Errorf("bool_variable name must not be blank")}
|
||||
}
|
||||
|
||||
mt.Variables = append(mt.Variables, &boolVariable{
|
||||
baseVariable: baseVariable{
|
||||
variable: name,
|
||||
},
|
||||
})
|
||||
mt.Variables = append(mt.Variables, newBoolVariable(name))
|
||||
}
|
||||
|
||||
for _, name := range props.Value_variables {
|
||||
|
@ -420,6 +416,9 @@ func typeForPropertyFromPropertyStruct(ps interface{}, property string) reflect.
|
|||
|
||||
// PropertiesToApply returns the applicable properties from a ModuleType that should be applied
|
||||
// based on SoongConfig values.
|
||||
// Expects that props contains a struct field with name soong_config_variables. The fields within
|
||||
// soong_config_variables are expected to be in the same order as moduleType.Variables. In general,
|
||||
// props should be generated via CreateProperties.
|
||||
func PropertiesToApply(moduleType *ModuleType, props reflect.Value, config SoongConfig) ([]interface{}, error) {
|
||||
var ret []interface{}
|
||||
props = props.Elem().FieldByName(soongConfigProperty)
|
||||
|
@ -505,6 +504,14 @@ type boolVariable struct {
|
|||
baseVariable
|
||||
}
|
||||
|
||||
func newBoolVariable(name string) *boolVariable {
|
||||
return &boolVariable{
|
||||
baseVariable{
|
||||
variable: name,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (b boolVariable) variableValuesType() reflect.Type {
|
||||
return emptyInterfaceType
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue