Add a new `test_options.tags` attribute to customize test execution
The `test_options.tags` attribute provides additional metadata to
customize test execution by downstream test runners. The tags have no
special meaning to Soong.
Bug: 240928948
Test: manually add `test_options.tags` attribute and run:
$ refreshmod && \
cat out/target/product/generic/module-info.json |\
grep <tags>
Change-Id: I35267f6608e48c6184e56530ef128d93b2f97522
diff --git a/android/module.go b/android/module.go
index bf62080..1cf5955 100644
--- a/android/module.go
+++ b/android/module.go
@@ -942,12 +942,19 @@
// If the test is a hostside (no device required) unittest that shall be run
// during presubmit check.
Unit_test *bool
+
+ // Tags provide additional metadata to customize test execution by downstream
+ // test runners. The tags have no special meaning to Soong.
+ Tags []string
}
// SetAndroidMkEntries sets AndroidMkEntries according to the value of base
// `test_options`.
func (t *CommonTestOptions) SetAndroidMkEntries(entries *AndroidMkEntries) {
entries.SetBoolIfTrue("LOCAL_IS_UNIT_TEST", Bool(t.Unit_test))
+ if len(t.Tags) > 0 {
+ entries.AddStrings("LOCAL_TEST_OPTIONS_TAGS", t.Tags...)
+ }
}
// The key to use in TaggedDistFiles when a Dist structure does not specify a
diff --git a/android/module_test.go b/android/module_test.go
index 835ab4c..0580bef 100644
--- a/android/module_test.go
+++ b/android/module_test.go
@@ -912,7 +912,7 @@
}
}
-func TestProcessCommonTestOptions(t *testing.T) {
+func TestSetAndroidMkEntriesWithTestOptions(t *testing.T) {
tests := []struct {
name string
testOptions CommonTestOptions
@@ -939,6 +939,31 @@
},
expected: map[string][]string{},
},
+ {
+ name: "empty tag",
+ testOptions: CommonTestOptions{
+ Tags: []string{},
+ },
+ expected: map[string][]string{},
+ },
+ {
+ name: "single tag",
+ testOptions: CommonTestOptions{
+ Tags: []string{"tag1"},
+ },
+ expected: map[string][]string{
+ "LOCAL_TEST_OPTIONS_TAGS": []string{"tag1"},
+ },
+ },
+ {
+ name: "multiple tag",
+ testOptions: CommonTestOptions{
+ Tags: []string{"tag1", "tag2", "tag3"},
+ },
+ expected: map[string][]string{
+ "LOCAL_TEST_OPTIONS_TAGS": []string{"tag1", "tag2", "tag3"},
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {