Kaynağa Gözat

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
Yuntao Xu 2 yıl önce
ebeveyn
işleme
b8e80350d2

+ 15 - 0
androidmk/androidmk/androidmk_test.go

@@ -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"],
+}
 `,
 	},
 }

+ 3 - 8
bpfix/bpfix/bpfix.go

@@ -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"
 			}
 		}

+ 32 - 0
bpfix/bpfix/bpfix_test.go

@@ -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) {