diff options
Diffstat (limited to 'java/app_test.go')
| -rw-r--r-- | java/app_test.go | 192 |
1 files changed, 185 insertions, 7 deletions
diff --git a/java/app_test.go b/java/app_test.go index a8b39b7d1..a33c6b10c 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -15,6 +15,8 @@ package java import ( + "encoding/json" + "errors" "fmt" "path/filepath" "reflect" @@ -3475,9 +3477,6 @@ func TestUsesLibraries(t *testing.T) { prepareForJavaTest, PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("runtime-library", "foo", "quuz", "qux", "bar", "fred"), - android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { - variables.BuildWarningBadOptionalUsesLibsAllowlist = []string{"app", "prebuilt"} - }), ).RunTestWithBp(t, bp) app := result.ModuleForTests(t, "app", "android_common") @@ -3532,6 +3531,178 @@ func TestUsesLibraries(t *testing.T) { "--product-packages=out/soong/.intermediates/app/android_common/dexpreopt/app/product_packages.txt") } +func extractContextJson(cmd string) (map[string]interface{}, error) { + var clc map[string]interface{} + for _, flag := range strings.Split(cmd, " ") { + if value, match := strings.CutPrefix(flag, "--context-json='"); match { + value = strings.TrimSuffix(value, "'") + if err := json.Unmarshal([]byte(value), &clc); err != nil { + return nil, err + } + return clc, nil + } + } + return nil, errors.New("--context-json not found") +} + +func TestClassLoaderContext_SdkLibrary(t *testing.T) { + bp := ` + java_sdk_library { + name: "foo", + srcs: ["a.java"], + api_packages: ["foo"], + sdk_version: "current", + uses_libs: ["bar"], + } + + java_sdk_library { + name: "bar", + srcs: ["b.java"], + api_packages: ["bar"], + sdk_version: "current", + } + + android_app { + name: "app", + srcs: ["app.java"], + libs: ["foo.stubs"], + uses_libs: ["foo"], + sdk_version: "current", + } + + android_app { + name: "app2", + srcs: ["app.java"], + libs: ["foo.impl"], + uses_libs: ["foo"], + sdk_version: "current", + } + ` + + result := android.GroupFixturePreparers( + prepareForJavaTest, + PrepareForTestWithJavaSdkLibraryFiles, + FixtureWithLastReleaseApis("foo", "bar"), + ).RunTestWithBp(t, bp) + + { + fooXml := result.ModuleForTests(t, "foo.xml", "android_common").Output("foo.xml") + fooXmlContents := android.ContentFromFileRuleForTests(t, result.TestContext, fooXml) + android.AssertStringDoesContain(t, "", fooXmlContents, `dependency="bar"`) + } + + { + fooImpl := result.ModuleForTests(t, "foo.impl", "android_common") + cmd := fooImpl.Rule("dexpreopt").RuleParams.Command + + clc, err := extractContextJson(cmd) + if err != nil { + t.Error(err) + return + } + + deps := clc["any"].([]interface{}) + android.AssertIntEquals(t, "", 1, len(deps)) + bar := deps[0].(map[string]interface{}) + android.AssertStringEquals(t, "", "bar", bar["Name"].(string)) + } + + for _, name := range []string{"app", "app2"} { + app := result.ModuleForTests(t, name, "android_common") + cmd := app.Rule("dexpreopt").RuleParams.Command + + clc, err := extractContextJson(cmd) + if err != nil { + t.Error(err) + return + } + + deps := clc["any"].([]interface{}) + android.AssertIntEquals(t, "", 1, len(deps)) + foo := deps[0].(map[string]interface{}) + android.AssertStringEquals(t, "", "foo", foo["Name"].(string)) + fooDeps := foo["Subcontexts"].([]interface{}) + android.AssertIntEquals(t, "", 1, len(fooDeps)) + bar := fooDeps[0].(map[string]interface{}) + android.AssertStringEquals(t, "", "bar", bar["Name"].(string)) + } +} + +func TestClassLoaderContext_SdkLibrary2(t *testing.T) { + bp := ` + java_sdk_library { + name: "foo", + srcs: ["a.java"], + api_packages: ["foo"], + sdk_version: "current", + libs: ["bar.impl"], + } + + java_sdk_library { + name: "bar", + srcs: ["b.java"], + api_packages: ["bar"], + sdk_version: "current", + } + + android_app { + name: "app", + srcs: ["app.java"], + libs: ["foo.stubs"], + uses_libs: ["foo"], + sdk_version: "current", + } + ` + + result := android.GroupFixturePreparers( + prepareForJavaTest, + PrepareForTestWithJavaSdkLibraryFiles, + FixtureWithLastReleaseApis("foo", "bar"), + ).RunTestWithBp(t, bp) + + { + fooXml := result.ModuleForTests(t, "foo.xml", "android_common").Output("foo.xml") + fooXmlContents := android.ContentFromFileRuleForTests(t, result.TestContext, fooXml) + android.AssertStringDoesContain(t, "", fooXmlContents, `dependency="bar"`) + } + + { + fooImpl := result.ModuleForTests(t, "foo.impl", "android_common") + cmd := fooImpl.Rule("dexpreopt").RuleParams.Command + + clc, err := extractContextJson(cmd) + if err != nil { + t.Error(err) + return + } + + deps := clc["any"].([]interface{}) + android.AssertIntEquals(t, "", 1, len(deps)) + bar := deps[0].(map[string]interface{}) + android.AssertStringEquals(t, "", "bar", bar["Name"].(string)) + } + + { + app := result.ModuleForTests(t, "app", "android_common") + cmd := app.Rule("dexpreopt").RuleParams.Command + + clc, err := extractContextJson(cmd) + if err != nil { + t.Error(err) + return + } + + deps := clc["any"].([]interface{}) + android.AssertIntEquals(t, "", 1, len(deps)) + foo := deps[0].(map[string]interface{}) + android.AssertStringEquals(t, "", "foo", foo["Name"].(string)) + fooDeps := foo["Subcontexts"].([]interface{}) + android.AssertIntEquals(t, "", 1, len(fooDeps)) + bar := fooDeps[0].(map[string]interface{}) + android.AssertStringEquals(t, "", "bar", bar["Name"].(string)) + } +} + func TestDexpreoptBcp(t *testing.T) { t.Parallel() bp := ` @@ -4578,7 +4749,7 @@ func TestAppFlagsPackages(t *testing.T) { android.AssertStringDoesContain(t, "aapt2 link command expected to pass feature flags arguments", linkInFlags, - "--feature-flags @out/soong/.intermediates/bar/intermediate.txt --feature-flags @out/soong/.intermediates/baz/intermediate.txt", + "--feature-flags @out/soong/.intermediates/bar/aconfig-flags.txt --feature-flags @out/soong/.intermediates/baz/aconfig-flags.txt", ) aapt2CompileRule := foo.Rule("android/soong/java.aapt2Compile") @@ -4586,7 +4757,7 @@ func TestAppFlagsPackages(t *testing.T) { android.AssertStringDoesContain(t, "aapt2 compile command expected to pass feature flags arguments", compileFlags, - "--feature-flags @out/soong/.intermediates/bar/intermediate.txt --feature-flags @out/soong/.intermediates/baz/intermediate.txt", + "--feature-flags @out/soong/.intermediates/bar/aconfig-flags.txt --feature-flags @out/soong/.intermediates/baz/aconfig-flags.txt", ) } @@ -4658,12 +4829,12 @@ func TestAppFlagsPackagesPropagation(t *testing.T) { android.AssertStringDoesContain(t, "aapt2 link command expected to pass feature flags arguments of flags_packages and that of its static libs", linkInFlags, - "--feature-flags @out/soong/.intermediates/bar/intermediate.txt --feature-flags @out/soong/.intermediates/baz/intermediate.txt", + "--feature-flags @out/soong/.intermediates/bar/aconfig-flags.txt --feature-flags @out/soong/.intermediates/baz/aconfig-flags.txt", ) android.AssertStringDoesNotContain(t, "aapt2 link command expected to not pass feature flags arguments of flags_packages of its libs", linkInFlags, - "--feature-flags @out/soong/.intermediates/foo/intermediate.txt", + "--feature-flags @out/soong/.intermediates/foo/aconfig-flags.txt", ) } @@ -4902,6 +5073,7 @@ func TestResourcesWithFlagDirectories(t *testing.T) { "res/flag(!test.package.flag2)/values/bools.xml": nil, "res/flag(test.package.flag1)/values-config/strings_google_services.xml": nil, "res/flags(test.package.flag1)/values/strings.xml": nil, + "res/drawable/flag(test.package.flag1)/qs_flashlight_icon_off.xml": nil, }), ).RunTestWithBp(t, ` android_library { @@ -4940,6 +5112,12 @@ func TestResourcesWithFlagDirectories(t *testing.T) { compileOutputPaths, "out/soong/.intermediates/foo/android_common/aapt2/res/values_strings.(test.package.flag1).arsc.flat", ) + android.AssertStringListContains( + t, + "Expected to generate flag path when it is a subdirectory of resource type subdirectory", + compileOutputPaths, + "out/soong/.intermediates/foo/android_common/aapt2/res/drawable_qs_flashlight_icon_off.(test.package.flag1).xml.flat", + ) } func TestAutogeneratedStaticRro(t *testing.T) { |
