diff options
Diffstat (limited to 'java')
| -rwxr-xr-x | java/app.go | 38 | ||||
| -rw-r--r-- | java/app_test.go | 81 |
2 files changed, 109 insertions, 10 deletions
diff --git a/java/app.go b/java/app.go index 7828a8045..e9941f2d2 100755 --- a/java/app.go +++ b/java/app.go @@ -644,20 +644,38 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { } a.generateAndroidBuildActions(ctx) - a.testConfig = tradefed.AutoGenInstrumentationTestConfig(ctx, a.testProperties.Test_config, + testConfig := tradefed.AutoGenInstrumentationTestConfig(ctx, a.testProperties.Test_config, a.testProperties.Test_config_template, a.manifestPath, a.testProperties.Test_suites, a.testProperties.Auto_gen_config) + a.testConfig = a.FixTestConfig(ctx, testConfig) + a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data) +} + +func (a *AndroidTest) FixTestConfig(ctx android.ModuleContext, testConfig android.Path) android.Path { + if testConfig == nil { + return nil + } + + fixedConfig := android.PathForModuleOut(ctx, "test_config_fixer", "AndroidTest.xml") + rule := android.NewRuleBuilder() + command := rule.Command().BuiltTool(ctx, "test_config_fixer").Input(testConfig).Output(fixedConfig) + fixNeeded := false + + if ctx.ModuleName() != a.installApkName { + fixNeeded = true + command.FlagWithArg("--test-file-name ", a.installApkName+".apk") + } + if a.overridableAppProperties.Package_name != nil { - fixedConfig := android.PathForModuleOut(ctx, "test_config_fixer", "AndroidTest.xml") - rule := android.NewRuleBuilder() - rule.Command().BuiltTool(ctx, "test_config_fixer"). - FlagWithInput("--manifest ", a.manifestPath). - FlagWithArg("--package-name ", *a.overridableAppProperties.Package_name). - Input(a.testConfig). - Output(fixedConfig) + fixNeeded = true + command.FlagWithInput("--manifest ", a.manifestPath). + FlagWithArg("--package-name ", *a.overridableAppProperties.Package_name) + } + + if fixNeeded { rule.Build(pctx, ctx, "fix_test_config", "fix test config") - a.testConfig = fixedConfig + return fixedConfig } - a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data) + return testConfig } func (a *AndroidTest) DepsMutator(ctx android.BottomUpMutatorContext) { diff --git a/java/app_test.go b/java/app_test.go index 862af774a..6f89da410 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -1305,6 +1305,87 @@ func TestOverrideAndroidTest(t *testing.T) { } } +func TestAndroidTest_FixTestConfig(t *testing.T) { + ctx, _ := testJava(t, ` + android_app { + name: "foo", + srcs: ["a.java"], + package_name: "com.android.foo", + sdk_version: "current", + } + + android_test { + name: "foo_test", + srcs: ["b.java"], + instrumentation_for: "foo", + } + + android_test { + name: "bar_test", + srcs: ["b.java"], + package_name: "com.android.bar.test", + instrumentation_for: "foo", + } + + override_android_test { + name: "baz_test", + base: "foo_test", + package_name: "com.android.baz.test", + } + `) + + testCases := []struct { + moduleName string + variantName string + expectedFlags []string + }{ + { + moduleName: "foo_test", + variantName: "android_common", + }, + { + moduleName: "bar_test", + variantName: "android_common", + expectedFlags: []string{ + "--manifest " + buildDir + "/.intermediates/bar_test/android_common/manifest_fixer/AndroidManifest.xml", + "--package-name com.android.bar.test", + }, + }, + { + moduleName: "foo_test", + variantName: "android_common_baz_test", + expectedFlags: []string{ + "--manifest " + buildDir + + "/.intermediates/foo_test/android_common_baz_test/manifest_fixer/AndroidManifest.xml", + "--package-name com.android.baz.test", + "--test-file-name baz_test.apk", + }, + }, + } + + for _, test := range testCases { + variant := ctx.ModuleForTests(test.moduleName, test.variantName) + params := variant.MaybeOutput("test_config_fixer/AndroidTest.xml") + + if len(test.expectedFlags) > 0 { + if params.Rule == nil { + t.Errorf("test_config_fixer was expected to run, but didn't") + } else { + for _, flag := range test.expectedFlags { + if !strings.Contains(params.RuleParams.Command, flag) { + t.Errorf("Flag %q was not found in command: %q", flag, params.RuleParams.Command) + } + } + } + } else { + if params.Rule != nil { + t.Errorf("test_config_fixer was not expected to run, but did: %q", params.RuleParams.Command) + } + } + + } +} + func TestAndroidAppImport(t *testing.T) { ctx, _ := testJava(t, ` android_app_import { |