diff options
Diffstat (limited to 'java/java_test.go')
-rw-r--r-- | java/java_test.go | 89 |
1 files changed, 47 insertions, 42 deletions
diff --git a/java/java_test.go b/java/java_test.go index 2eb724185..d27a73d30 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -25,12 +25,12 @@ import ( "strings" "testing" - "android/soong/genrule" "github.com/google/blueprint/proptools" "android/soong/android" "android/soong/cc" "android/soong/dexpreopt" + "android/soong/genrule" "android/soong/python" ) @@ -48,24 +48,36 @@ func tearDown() { os.RemoveAll(buildDir) } -// Factory to use to create fixtures for tests in this package. +// Legacy factory to use to create fixtures for tests in this package. +// +// deprecated: See prepareForJavaTest var javaFixtureFactory = android.NewFixtureFactory( &buildDir, + prepareForJavaTest, +) + +// Legacy preparer used for running tests within the java package. +// +// This includes everything that was needed to run any test in the java package prior to the +// introduction of the test fixtures. Tests that are being converted to use fixtures directly +// rather than through the testJava...() methods should avoid using this and instead use the +// various preparers directly, using android.GroupFixturePreparers(...) to group them when +// necessary. +// +// deprecated +var prepareForJavaTest = android.GroupFixturePreparers( genrule.PrepareForTestWithGenRuleBuildComponents, // Get the CC build components but not default modules. cc.PrepareForTestWithCcBuildComponents, // Include all the default java modules. PrepareForTestWithJavaDefaultModules, + PrepareForTestWithOverlayBuildComponents, + python.PrepareForTestWithPythonBuildComponents, android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) { ctx.RegisterModuleType("java_plugin", PluginFactory) - ctx.RegisterModuleType("python_binary_host", python.PythonBinaryHostFactory) - ctx.PreDepsMutators(python.RegisterPythonPreDepsMutators) - ctx.RegisterPreSingletonType("overlay", OverlaySingletonFactory) ctx.RegisterPreSingletonType("sdk_versions", sdkPreSingletonFactory) }), - javaMockFS().AddToFixture(), - PrepareForTestWithJavaSdkLibraryFiles, dexpreopt.PrepareForTestWithDexpreopt, ) @@ -100,11 +112,9 @@ func testContext(config android.Config) *android.TestContext { RegisterRequiredBuildComponentsForTest(ctx) ctx.RegisterModuleType("java_plugin", PluginFactory) ctx.RegisterModuleType("filegroup", android.FileGroupFactory) - ctx.RegisterModuleType("python_binary_host", python.PythonBinaryHostFactory) ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators) ctx.PreArchMutators(android.RegisterComponentsMutator) - ctx.PreDepsMutators(python.RegisterPythonPreDepsMutators) ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators) ctx.RegisterPreSingletonType("overlay", OverlaySingletonFactory) ctx.RegisterPreSingletonType("sdk_versions", sdkPreSingletonFactory) @@ -116,10 +126,6 @@ func testContext(config android.Config) *android.TestContext { // Register module types and mutators from cc needed for JNI testing cc.RegisterRequiredBuildComponentsForTest(ctx) - ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) { - ctx.TopDown("propagate_rro_enforcement", propagateRROEnforcementMutator).Parallel() - }) - return ctx } @@ -247,7 +253,14 @@ func moduleToPath(name string) string { // defaultModuleToPath constructs a path to the turbine generate jar for a default test module that // is defined in PrepareForIntegrationTestWithJava func defaultModuleToPath(name string) string { - return filepath.Join(buildDir, ".intermediates", defaultJavaDir, name, "android_common", "turbine-combined", name+".jar") + switch { + case name == `""`: + return name + case strings.HasSuffix(name, ".jar"): + return name + default: + return filepath.Join(buildDir, ".intermediates", defaultJavaDir, name, "android_common", "turbine-combined", name+".jar") + } } func TestJavaLinkType(t *testing.T) { @@ -1298,9 +1311,9 @@ func TestJavaLint(t *testing.T) { }) foo := ctx.ModuleForTests("foo", "android_common") - rule := foo.Rule("lint") - if !strings.Contains(rule.RuleParams.Command, "--baseline lint-baseline.xml") { + sboxProto := android.RuleBuilderSboxProtoForTests(t, foo.Output("lint.sbox.textproto")) + if !strings.Contains(*sboxProto.Commands[0].Command, "--baseline lint-baseline.xml") { t.Error("did not pass --baseline flag") } } @@ -1320,9 +1333,9 @@ func TestJavaLintWithoutBaseline(t *testing.T) { `, map[string][]byte{}) foo := ctx.ModuleForTests("foo", "android_common") - rule := foo.Rule("lint") - if strings.Contains(rule.RuleParams.Command, "--baseline") { + sboxProto := android.RuleBuilderSboxProtoForTests(t, foo.Output("lint.sbox.textproto")) + if strings.Contains(*sboxProto.Commands[0].Command, "--baseline") { t.Error("passed --baseline flag for non existent file") } } @@ -1378,9 +1391,9 @@ func TestJavaLintUsesCorrectBpConfig(t *testing.T) { }) foo := ctx.ModuleForTests("foo", "android_common") - rule := foo.Rule("lint") - if !strings.Contains(rule.RuleParams.Command, "--baseline mybaseline.xml") { + sboxProto := android.RuleBuilderSboxProtoForTests(t, foo.Output("lint.sbox.textproto")) + if !strings.Contains(*sboxProto.Commands[0].Command, "--baseline mybaseline.xml") { t.Error("did not use the correct file for baseline") } } @@ -1422,7 +1435,9 @@ func TestGeneratedSources(t *testing.T) { } func TestTurbine(t *testing.T) { - ctx, _ := testJava(t, ` + result := javaFixtureFactory. + Extend(FixtureWithPrebuiltApis(map[string][]string{"14": {"foo"}})). + RunTestWithBp(t, ` java_library { name: "foo", srcs: ["a.java"], @@ -1444,30 +1459,20 @@ func TestTurbine(t *testing.T) { } `) - fooTurbine := ctx.ModuleForTests("foo", "android_common").Rule("turbine") - barTurbine := ctx.ModuleForTests("bar", "android_common").Rule("turbine") - barJavac := ctx.ModuleForTests("bar", "android_common").Rule("javac") - barTurbineCombined := ctx.ModuleForTests("bar", "android_common").Description("for turbine") - bazJavac := ctx.ModuleForTests("baz", "android_common").Rule("javac") + fooTurbine := result.ModuleForTests("foo", "android_common").Rule("turbine") + barTurbine := result.ModuleForTests("bar", "android_common").Rule("turbine") + barJavac := result.ModuleForTests("bar", "android_common").Rule("javac") + barTurbineCombined := result.ModuleForTests("bar", "android_common").Description("for turbine") + bazJavac := result.ModuleForTests("baz", "android_common").Rule("javac") - if len(fooTurbine.Inputs) != 1 || fooTurbine.Inputs[0].String() != "a.java" { - t.Errorf(`foo inputs %v != ["a.java"]`, fooTurbine.Inputs) - } + android.AssertArrayString(t, "foo inputs", []string{"a.java"}, fooTurbine.Inputs.Strings()) fooHeaderJar := filepath.Join(buildDir, ".intermediates", "foo", "android_common", "turbine-combined", "foo.jar") - if !strings.Contains(barTurbine.Args["classpath"], fooHeaderJar) { - t.Errorf("bar turbine classpath %v does not contain %q", barTurbine.Args["classpath"], fooHeaderJar) - } - if !strings.Contains(barJavac.Args["classpath"], fooHeaderJar) { - t.Errorf("bar javac classpath %v does not contain %q", barJavac.Args["classpath"], fooHeaderJar) - } - if len(barTurbineCombined.Inputs) != 2 || barTurbineCombined.Inputs[1].String() != fooHeaderJar { - t.Errorf("bar turbine combineJar inputs %v does not contain %q", barTurbineCombined.Inputs, fooHeaderJar) - } - if !strings.Contains(bazJavac.Args["classpath"], "prebuilts/sdk/14/public/android.jar") { - t.Errorf("baz javac classpath %v does not contain %q", bazJavac.Args["classpath"], - "prebuilts/sdk/14/public/android.jar") - } + barTurbineJar := filepath.Join(buildDir, ".intermediates", "bar", "android_common", "turbine", "bar.jar") + android.AssertStringDoesContain(t, "bar turbine classpath", barTurbine.Args["classpath"], fooHeaderJar) + android.AssertStringDoesContain(t, "bar javac classpath", barJavac.Args["classpath"], fooHeaderJar) + android.AssertArrayString(t, "bar turbine combineJar", []string{barTurbineJar, fooHeaderJar}, barTurbineCombined.Inputs.Strings()) + android.AssertStringDoesContain(t, "baz javac classpath", bazJavac.Args["classpath"], "prebuilts/sdk/14/public/android.jar") } func TestSharding(t *testing.T) { |