rewrite android_app to android_test in mk2bp

1. When a converted android_app module has the `test_suites` property,
rewrite the module type to an android_test one;
2. Refactor the existing codes for rewriting cc_binary to cc_test.

Bug: 217650002
Test: add unit and end-to-end tests
Test: TreeHugger
Change-Id: I90d744a2ae93561f63ed8606f37ea4aa26fa6137
This commit is contained in:
Yuntao Xu
2022-04-05 15:34:38 -07:00
parent 4242115d59
commit b8e80350d2
3 changed files with 50 additions and 8 deletions

View File

@@ -1688,6 +1688,21 @@ android_app {
name: "foo",
privileged: true
}
`,
},
{
desc: "convert android_app to android_test when having test_suites",
in: `
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_COMPATIBILITY_SUITE := bar
include $(BUILD_PACKAGE)
`,
expected: `
android_test {
name: "foo",
test_suites: ["bar"],
}
`,
},
}

View File

@@ -449,6 +449,7 @@ func rewriteTestModuleTypes(f *Fixer) error {
}
hasInstrumentationFor := hasNonEmptyLiteralStringProperty(mod, "instrumentation_for")
hasTestSuites := hasNonEmptyLiteralListProperty(mod, "test_suites")
tags, _ := getLiteralListPropertyValue(mod, "tags")
var hasTestsTag bool
@@ -458,7 +459,7 @@ func rewriteTestModuleTypes(f *Fixer) error {
}
}
isTest := hasInstrumentationFor || hasTestsTag
isTest := hasInstrumentationFor || hasTestsTag || hasTestSuites
if isTest {
switch mod.Type {
@@ -470,13 +471,7 @@ func rewriteTestModuleTypes(f *Fixer) error {
mod.Type = "java_test"
case "java_library_host":
mod.Type = "java_test_host"
}
}
// when a cc_binary module has a nonempty test_suites field, modify the type to cc_test
if mod.Type == "cc_binary" {
hasTestSuites := hasNonEmptyLiteralListProperty(mod, "test_suites")
if hasTestSuites {
case "cc_binary":
mod.Type = "cc_test"
}
}

View File

@@ -1436,6 +1436,38 @@ func TestRewriteTestModuleTypes(t *testing.T) {
}
`,
},
{
name: "android_app with android_test",
in: `
android_app {
name: "foo",
srcs: ["srcs"],
test_suites: ["test_suite1"],
}
`,
out: `
android_test {
name: "foo",
srcs: ["srcs"],
test_suites: ["test_suite1"],
}
`,
},
{
name: "android_app without test_suites",
in: `
android_app {
name: "foo",
srcs: ["srcs"],
}
`,
out: `
android_app {
name: "foo",
srcs: ["srcs"],
}
`,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {