Simplify vendor conditionals
Support vendor conditionals with no Go code.
Test: TestSoongConfigModule
Change-Id: I42546e7f17324921ada80f4d8e1cd399830f8dfc
diff --git a/android/soong_config_modules_test.go b/android/soong_config_modules_test.go
new file mode 100644
index 0000000..66feba8
--- /dev/null
+++ b/android/soong_config_modules_test.go
@@ -0,0 +1,141 @@
+// Copyright 2019 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package android
+
+import (
+ "reflect"
+ "testing"
+)
+
+type soongConfigTestModule struct {
+ ModuleBase
+ props soongConfigTestModuleProperties
+}
+
+type soongConfigTestModuleProperties struct {
+ Cflags []string
+}
+
+func soongConfigTestModuleFactory() Module {
+ m := &soongConfigTestModule{}
+ m.AddProperties(&m.props)
+ InitAndroidModule(m)
+ return m
+}
+
+func (t soongConfigTestModule) GenerateAndroidBuildActions(ModuleContext) {}
+
+func TestSoongConfigModule(t *testing.T) {
+ configBp := `
+ soong_config_module_type {
+ name: "acme_test_defaults",
+ module_type: "test_defaults",
+ config_namespace: "acme",
+ variables: ["board", "feature1", "feature2", "feature3"],
+ properties: ["cflags", "srcs"],
+ }
+
+ soong_config_string_variable {
+ name: "board",
+ values: ["soc_a", "soc_b"],
+ }
+
+ soong_config_bool_variable {
+ name: "feature1",
+ }
+
+ soong_config_bool_variable {
+ name: "feature2",
+ }
+
+ soong_config_bool_variable {
+ name: "feature3",
+ }
+ `
+
+ importBp := `
+ soong_config_module_type_import {
+ from: "SoongConfig.bp",
+ module_types: ["acme_test_defaults"],
+ }
+ `
+
+ bp := `
+ acme_test_defaults {
+ name: "foo",
+ cflags: ["-DGENERIC"],
+ soong_config_variables: {
+ board: {
+ soc_a: {
+ cflags: ["-DSOC_A"],
+ },
+ soc_b: {
+ cflags: ["-DSOC_B"],
+ },
+ },
+ feature1: {
+ cflags: ["-DFEATURE1"],
+ },
+ feature2: {
+ cflags: ["-DFEATURE2"],
+ },
+ feature3: {
+ cflags: ["-DFEATURE3"],
+ },
+ },
+ }
+ `
+
+ run := func(t *testing.T, bp string, fs map[string][]byte) {
+ config := TestConfig(buildDir, nil, bp, fs)
+
+ config.TestProductVariables.VendorVars = map[string]map[string]string{
+ "acme": map[string]string{
+ "board": "soc_a",
+ "feature1": "true",
+ "feature2": "false",
+ // FEATURE3 unset
+ },
+ }
+
+ ctx := NewTestContext()
+ ctx.RegisterModuleType("soong_config_module_type_import", soongConfigModuleTypeImportFactory)
+ ctx.RegisterModuleType("soong_config_module_type", soongConfigModuleTypeFactory)
+ ctx.RegisterModuleType("soong_config_string_variable", soongConfigStringVariableDummyFactory)
+ ctx.RegisterModuleType("soong_config_bool_variable", soongConfigBoolVariableDummyFactory)
+ ctx.RegisterModuleType("test_defaults", soongConfigTestModuleFactory)
+ ctx.Register(config)
+
+ _, errs := ctx.ParseBlueprintsFiles("Android.bp")
+ FailIfErrored(t, errs)
+ _, errs = ctx.PrepareBuildActions(config)
+ FailIfErrored(t, errs)
+
+ foo := ctx.ModuleForTests("foo", "").Module().(*soongConfigTestModule)
+ if g, w := foo.props.Cflags, []string{"-DGENERIC", "-DSOC_A", "-DFEATURE1"}; !reflect.DeepEqual(g, w) {
+ t.Errorf("wanted foo cflags %q, got %q", w, g)
+ }
+ }
+
+ t.Run("single file", func(t *testing.T) {
+ run(t, configBp+bp, nil)
+ })
+
+ t.Run("import", func(t *testing.T) {
+ run(t, importBp+bp, map[string][]byte{
+ "SoongConfig.bp": []byte(configBp),
+ })
+ })
+}