diff options
| author | mosimchah <mosimchah@gmail.com> | 2025-12-02 09:27:38 -0500 |
|---|---|---|
| committer | mosimchah <mosimchah@gmail.com> | 2025-12-02 09:27:38 -0500 |
| commit | c7bade461dc55726f62997d13a48582f7c4b4655 (patch) | |
| tree | ea0588da76060a2038f54f67efd046ca77634b10 /java/app_test.go | |
| parent | 0f5414d19317805e8bbbe7c4db5f0fd78769bad5 (diff) | |
| parent | 89d78cff8b00d3b20a90074635c3fe5a2ee49474 (diff) | |
Merge branch 'lineage-23.1' of https://github.com/LineageOS/android_build_soong into HEADw16.1
* 'lineage-23.1' of https://github.com/LineageOS/android_build_soong: (528 commits)
Revert "install_symlink: Make symlink target configurable"
Reapply "Clear as much of cc.Module as possible after GenerateBuildActions"
Revert "rust: config: Fix missing CPU variant LD flags in Rust"
Rename build-flag in outdir
Revert^4 "cipd: Default CIPD proxy server to on, add opt-out"
Convert check-vintf-all to phony with actions
Create a partial implementation of check-vintf-all for soong-only
Configure RBE rust pool based on build variant
Revert^3 "Add sdk version check to arr"
Add jdk.internal.invoke to the allowlist
Make droid always depend on symbols zip
Import Device and Odm skus
Don't install gob_gen in Soong
Remove bazel reference from run_integration_tests.sh
Fix bootstrap_test.sh
Don't panic in aconfig libraries when AllowMissingDependencies is set
Avoid returning nil paths from PathForModuleSrc
Revert "Flag controled clang version"
Rework module target dependencies on required deps
Revert^2 "Add sdk version check to arr"
...
Change-Id: I6e9a63fa14fda917a42e426e5dcebbad7f67e1de
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) { |
