diff --git a/Android.bp b/Android.bp index dd538185b..b15a875b5 100644 --- a/Android.bp +++ b/Android.bp @@ -45,6 +45,7 @@ bootstrap_go_package { "android/api_levels.go", "android/arch.go", "android/config.go", + "android/csuite_config.go", "android/defaults.go", "android/defs.go", "android/expand.go", @@ -85,6 +86,7 @@ bootstrap_go_package { "android/androidmk_test.go", "android/arch_test.go", "android/config_test.go", + "android/csuite_config_test.go", "android/expand_test.go", "android/module_test.go", "android/mutator_test.go", diff --git a/android/csuite_config.go b/android/csuite_config.go new file mode 100644 index 000000000..15c518a07 --- /dev/null +++ b/android/csuite_config.go @@ -0,0 +1,70 @@ +// 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 ( + "fmt" + "io" +) + +func init() { + RegisterModuleType("csuite_config", CSuiteConfigFactory) +} + +type csuiteConfigProperties struct { + // Override the default (AndroidTest.xml) test manifest file name. + Test_config *string +} + +type CSuiteConfig struct { + ModuleBase + properties csuiteConfigProperties + OutputFilePath OutputPath +} + +func (me *CSuiteConfig) GenerateAndroidBuildActions(ctx ModuleContext) { + me.OutputFilePath = PathForModuleOut(ctx, me.BaseModuleName()).OutputPath +} + +func (me *CSuiteConfig) AndroidMk() AndroidMkData { + androidMkData := AndroidMkData{ + Class: "FAKE", + Include: "$(BUILD_SYSTEM)/suite_host_config.mk", + OutputFile: OptionalPathForPath(me.OutputFilePath), + } + androidMkData.Extra = []AndroidMkExtraFunc{ + func(w io.Writer, outputFile Path) { + if me.properties.Test_config != nil { + fmt.Fprintf(w, "LOCAL_TEST_CONFIG := %s\n", + *me.properties.Test_config) + } + fmt.Fprintln(w, "LOCAL_COMPATIBILITY_SUITE := csuite") + }, + } + return androidMkData +} + +func InitCSuiteConfigModule(me *CSuiteConfig) { + me.AddProperties(&me.properties) +} + +// csuite_config generates an App Compatibility Test Suite (C-Suite) configuration file from the +// xml file and stores it in a subdirectory of $(HOST_OUT). +func CSuiteConfigFactory() Module { + module := &CSuiteConfig{} + InitCSuiteConfigModule(module) + InitAndroidArchModule(module, HostSupported, MultilibFirst) + return module +} diff --git a/android/csuite_config_test.go b/android/csuite_config_test.go new file mode 100644 index 000000000..e534bb71c --- /dev/null +++ b/android/csuite_config_test.go @@ -0,0 +1,53 @@ +// 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 ( + "testing" +) + +func testCSuiteConfig(test *testing.T, bpFileContents string) *TestContext { + config := TestArchConfig(buildDir, nil) + + ctx := NewTestArchContext() + ctx.RegisterModuleType("csuite_config", ModuleFactoryAdaptor(CSuiteConfigFactory)) + ctx.Register() + mockFiles := map[string][]byte{ + "Android.bp": []byte(bpFileContents), + } + ctx.MockFileSystem(mockFiles) + _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) + FailIfErrored(test, errs) + _, errs = ctx.PrepareBuildActions(config) + FailIfErrored(test, errs) + return ctx +} + +func TestCSuiteConfig(t *testing.T) { + ctx := testCSuiteConfig(t, ` +csuite_config { name: "plain"} +csuite_config { name: "with_manifest", test_config: "manifest.xml" } +`) + + variants := ctx.ModuleVariantsForTests("plain") + if len(variants) > 1 { + t.Errorf("expected 1, got %d", len(variants)) + } + expectedOutputFilename := ctx.ModuleForTests( + "plain", variants[0]).Module().(*CSuiteConfig).OutputFilePath.Base() + if expectedOutputFilename != "plain" { + t.Errorf("expected plain, got %q", expectedOutputFilename) + } +} diff --git a/android/vts_config.go b/android/vts_config.go index c44b3a32e..86f6e7281 100644 --- a/android/vts_config.go +++ b/android/vts_config.go @@ -41,16 +41,17 @@ func (me *VtsConfig) GenerateAndroidBuildActions(ctx ModuleContext) { func (me *VtsConfig) AndroidMk() AndroidMkData { androidMkData := AndroidMkData{ Class: "FAKE", - Include: "$(BUILD_SYSTEM)/android_vts_host_config.mk", + Include: "$(BUILD_SYSTEM)/suite_host_config.mk", OutputFile: OptionalPathForPath(me.OutputFilePath), } - if me.properties.Test_config != nil { - androidMkData.Extra = []AndroidMkExtraFunc{ - func(w io.Writer, outputFile Path) { + androidMkData.Extra = []AndroidMkExtraFunc{ + func(w io.Writer, outputFile Path) { + if me.properties.Test_config != nil { fmt.Fprintf(w, "LOCAL_TEST_CONFIG := %s\n", *me.properties.Test_config) - }, - } + } + fmt.Fprintln(w, "LOCAL_COMPATIBILITY_SUITE := vts") + }, } return androidMkData }