• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2022 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package tradefed
16
17import (
18	"android/soong/android"
19	"android/soong/bazel"
20
21	"github.com/google/blueprint/proptools"
22)
23
24const (
25	InstrumentationTestConfigTemplate  = "build/make/core/instrumentation_test_config_template.xml"
26	JavaTestConfigTemplate             = "build/make/core/java_test_config_template.xml"
27	JavaHostTestConfigTemplate         = "build/make/core/java_host_test_config_template.xml"
28	JavaHostUnitTestConfigTemplate     = "build/make/core/java_host_unit_test_config_template.xml"
29	NativeBenchmarkTestConfigTemplate  = "build/make/core/native_benchmark_test_config_template.xml"
30	NativeHostTestConfigTemplate       = "build/make/core/native_host_test_config_template.xml"
31	NativeTestConfigTemplate           = "build/make/core/native_test_config_template.xml"
32	PythonBinaryHostTestConfigTemplate = "build/make/core/python_binary_host_test_config_template.xml"
33	RustDeviceTestConfigTemplate       = "build/make/core/rust_device_test_config_template.xml"
34	RustHostTestConfigTemplate         = "build/make/core/rust_host_test_config_template.xml"
35	RustDeviceBenchmarkConfigTemplate  = "build/make/core/rust_device_benchmark_config_template.xml"
36	RustHostBenchmarkConfigTemplate    = "build/make/core/rust_host_benchmark_config_template.xml"
37	RobolectricTestConfigTemplate      = "build/make/core/robolectric_test_config_template.xml"
38	ShellTestConfigTemplate            = "build/make/core/shell_test_config_template.xml"
39)
40
41type TestConfigAttributes struct {
42	Test_config *bazel.Label
43
44	Auto_generate_test_config *bool
45	Template_test_config      *bazel.Label
46	Template_configs          []string
47	Template_install_base     *string
48}
49
50func GetTestConfigAttributes(
51	ctx android.TopDownMutatorContext,
52	testConfig *string,
53	extraTestConfigs []string,
54	autoGenConfig *bool,
55	testSuites []string,
56	template *string,
57	templateConfigs []Config,
58	templateInstallBase *string) TestConfigAttributes {
59
60	attrs := TestConfigAttributes{}
61	attrs.Test_config = GetTestConfig(ctx, testConfig)
62	// do not generate a test config if
63	// 1) test config already found
64	// 2) autoGenConfig == false
65	// 3) CTS tests and no template specified.
66	// CTS Modules can be used for test data, so test config files must be explicitly specified.
67	if (attrs.Template_test_config != nil) ||
68		proptools.Bool(autoGenConfig) == false ||
69		(template == nil && !android.InList("cts", testSuites)) {
70
71		return attrs
72	}
73
74	// Add properties for the bazel rule to generate a test config
75	// since a test config was not specified.
76	templateLabel := android.BazelLabelForModuleSrcSingle(ctx, *template)
77	attrs.Template_test_config = &templateLabel
78	attrs.Auto_generate_test_config = autoGenConfig
79	var configStrings []string
80	for _, c := range templateConfigs {
81		configString := proptools.NinjaAndShellEscape(c.Config())
82		configStrings = append(configStrings, configString)
83	}
84	attrs.Template_configs = configStrings
85	attrs.Template_install_base = templateInstallBase
86	return attrs
87}
88
89func GetTestConfig(
90	ctx android.TopDownMutatorContext,
91	testConfig *string,
92) *bazel.Label {
93
94	if testConfig != nil {
95		c, _ := android.BazelStringOrLabelFromProp(ctx, testConfig)
96		if c.Value != nil {
97			return c.Value
98		}
99	}
100
101	// check for default AndroidTest.xml
102	defaultTestConfigPath := ctx.ModuleDir() + "/AndroidTest.xml"
103	c, _ := android.BazelStringOrLabelFromProp(ctx, &defaultTestConfigPath)
104	return c.Value
105}
106