blob: cc16176c8d095bc759f6847efe7bd86693bf1777 [file] [log] [blame]
// Copyright 2022 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 tradefed
import (
"android/soong/android"
"android/soong/bazel"
"github.com/google/blueprint/proptools"
)
const (
InstrumentationTestConfigTemplate = "build/make/core/instrumentation_test_config_template.xml"
JavaTestConfigTemplate = "build/make/core/java_test_config_template.xml"
JavaHostTestConfigTemplate = "build/make/core/java_host_test_config_template.xml"
JavaHostUnitTestConfigTemplate = "build/make/core/java_host_unit_test_config_template.xml"
NativeBenchmarkTestConfigTemplate = "build/make/core/native_benchmark_test_config_template.xml"
NativeHostTestConfigTemplate = "build/make/core/native_host_test_config_template.xml"
NativeTestConfigTemplate = "build/make/core/native_test_config_template.xml"
PythonBinaryHostTestConfigTemplate = "build/make/core/python_binary_host_test_config_template.xml"
RustDeviceTestConfigTemplate = "build/make/core/rust_device_test_config_template.xml"
RustHostTestConfigTemplate = "build/make/core/rust_host_test_config_template.xml"
RustDeviceBenchmarkConfigTemplate = "build/make/core/rust_device_benchmark_config_template.xml"
RustHostBenchmarkConfigTemplate = "build/make/core/rust_host_benchmark_config_template.xml"
RobolectricTestConfigTemplate = "build/make/core/robolectric_test_config_template.xml"
ShellTestConfigTemplate = "build/make/core/shell_test_config_template.xml"
)
type TestConfigAttributes struct {
Test_config *bazel.Label
Dynamic_config *bazel.Label
Auto_generate_test_config *bool
Template_test_config *bazel.Label
Template_configs []string
Template_install_base *string
}
func GetTestConfigAttributes(
ctx android.Bp2buildMutatorContext,
testConfig *string,
extraTestConfigs []string,
autoGenConfig *bool,
testSuites []string,
template *string,
templateConfigs []Config,
templateInstallBase *string) TestConfigAttributes {
attrs := TestConfigAttributes{}
dynamicConfig := "DynamicConfig.xml"
c, _ := android.BazelStringOrLabelFromProp(ctx, &dynamicConfig)
attrs.Dynamic_config = c.Value
attrs.Test_config = GetTestConfig(ctx, testConfig)
// do not generate a test config if
// 1) test config already found
// 2) autoGenConfig == false
// 3) CTS tests and no template specified.
// CTS Modules can be used for test data, so test config files must be explicitly specified.
if (attrs.Template_test_config != nil) ||
proptools.Bool(autoGenConfig) == false ||
(template == nil && !android.InList("cts", testSuites)) {
return attrs
}
// Add properties for the bazel rule to generate a test config
// since a test config was not specified.
templateLabel := android.BazelLabelForModuleSrcSingle(ctx, *template)
attrs.Template_test_config = &templateLabel
attrs.Auto_generate_test_config = autoGenConfig
var configStrings []string
for _, c := range templateConfigs {
configString := proptools.NinjaAndShellEscape(c.Config())
configStrings = append(configStrings, configString)
}
attrs.Template_configs = configStrings
attrs.Template_install_base = templateInstallBase
return attrs
}
func GetTestConfig(
ctx android.Bp2buildMutatorContext,
testConfig *string,
) *bazel.Label {
if testConfig != nil {
c, _ := android.BazelStringOrLabelFromProp(ctx, testConfig)
if c.Value != nil {
return c.Value
}
}
// check for default AndroidTest.xml
defaultTestConfigPath := "AndroidTest.xml"
c, _ := android.BazelStringOrLabelFromProp(ctx, &defaultTestConfigPath)
return c.Value
}