1*333d2b36SAndroid Build Coastguard Worker// Copyright 2021 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage java 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "fmt" 19*333d2b36SAndroid Build Coastguard Worker "path/filepath" 20*333d2b36SAndroid Build Coastguard Worker "regexp" 21*333d2b36SAndroid Build Coastguard Worker "strings" 22*333d2b36SAndroid Build Coastguard Worker "testing" 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 25*333d2b36SAndroid Build Coastguard Worker) 26*333d2b36SAndroid Build Coastguard Worker 27*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary(t *testing.T) { 28*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 29*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 30*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 31*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 32*333d2b36SAndroid Build Coastguard Worker "28": {"foo"}, 33*333d2b36SAndroid Build Coastguard Worker "29": {"foo"}, 34*333d2b36SAndroid Build Coastguard Worker "30": {"bar", "barney", "baz", "betty", "foo", "fred", "quuz", "wilma"}, 35*333d2b36SAndroid Build Coastguard Worker }), 36*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 37*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 38*333d2b36SAndroid Build Coastguard Worker droiddoc_exported_dir { 39*333d2b36SAndroid Build Coastguard Worker name: "droiddoc-templates-sdk", 40*333d2b36SAndroid Build Coastguard Worker path: ".", 41*333d2b36SAndroid Build Coastguard Worker } 42*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 43*333d2b36SAndroid Build Coastguard Worker name: "foo", 44*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 45*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 46*333d2b36SAndroid Build Coastguard Worker } 47*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 48*333d2b36SAndroid Build Coastguard Worker name: "bar", 49*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 50*333d2b36SAndroid Build Coastguard Worker api_packages: ["bar"], 51*333d2b36SAndroid Build Coastguard Worker exclude_kotlinc_generated_files: true, 52*333d2b36SAndroid Build Coastguard Worker } 53*333d2b36SAndroid Build Coastguard Worker java_library { 54*333d2b36SAndroid Build Coastguard Worker name: "baz", 55*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 56*333d2b36SAndroid Build Coastguard Worker libs: ["foo.stubs.system", "bar.stubs"], 57*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_current", 58*333d2b36SAndroid Build Coastguard Worker } 59*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 60*333d2b36SAndroid Build Coastguard Worker name: "barney", 61*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 62*333d2b36SAndroid Build Coastguard Worker api_only: true, 63*333d2b36SAndroid Build Coastguard Worker } 64*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 65*333d2b36SAndroid Build Coastguard Worker name: "betty", 66*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 67*333d2b36SAndroid Build Coastguard Worker shared_library: false, 68*333d2b36SAndroid Build Coastguard Worker } 69*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 70*333d2b36SAndroid Build Coastguard Worker name: "quuz", 71*333d2b36SAndroid Build Coastguard Worker public: { 72*333d2b36SAndroid Build Coastguard Worker jars: ["c.jar"], 73*333d2b36SAndroid Build Coastguard Worker current_api: "api/current.txt", 74*333d2b36SAndroid Build Coastguard Worker removed_api: "api/removed.txt", 75*333d2b36SAndroid Build Coastguard Worker }, 76*333d2b36SAndroid Build Coastguard Worker } 77*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 78*333d2b36SAndroid Build Coastguard Worker name: "fred", 79*333d2b36SAndroid Build Coastguard Worker public: { 80*333d2b36SAndroid Build Coastguard Worker jars: ["b.jar"], 81*333d2b36SAndroid Build Coastguard Worker }, 82*333d2b36SAndroid Build Coastguard Worker } 83*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 84*333d2b36SAndroid Build Coastguard Worker name: "wilma", 85*333d2b36SAndroid Build Coastguard Worker public: { 86*333d2b36SAndroid Build Coastguard Worker jars: ["b.jar"], 87*333d2b36SAndroid Build Coastguard Worker }, 88*333d2b36SAndroid Build Coastguard Worker shared_library: false, 89*333d2b36SAndroid Build Coastguard Worker } 90*333d2b36SAndroid Build Coastguard Worker java_library { 91*333d2b36SAndroid Build Coastguard Worker name: "qux", 92*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 93*333d2b36SAndroid Build Coastguard Worker libs: ["baz", "fred.stubs", "quuz.stubs", "wilma.stubs", "barney.stubs.system", "betty.stubs.system"], 94*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_current", 95*333d2b36SAndroid Build Coastguard Worker } 96*333d2b36SAndroid Build Coastguard Worker java_library { 97*333d2b36SAndroid Build Coastguard Worker name: "baz-test", 98*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 99*333d2b36SAndroid Build Coastguard Worker libs: ["foo.stubs.test"], 100*333d2b36SAndroid Build Coastguard Worker sdk_version: "test_current", 101*333d2b36SAndroid Build Coastguard Worker } 102*333d2b36SAndroid Build Coastguard Worker java_library { 103*333d2b36SAndroid Build Coastguard Worker name: "baz-29", 104*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 105*333d2b36SAndroid Build Coastguard Worker libs: ["sdk_system_29_foo"], 106*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_29", 107*333d2b36SAndroid Build Coastguard Worker } 108*333d2b36SAndroid Build Coastguard Worker java_library { 109*333d2b36SAndroid Build Coastguard Worker name: "baz-module-30", 110*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 111*333d2b36SAndroid Build Coastguard Worker libs: ["sdk_module-lib_30_foo"], 112*333d2b36SAndroid Build Coastguard Worker sdk_version: "module_30", 113*333d2b36SAndroid Build Coastguard Worker } 114*333d2b36SAndroid Build Coastguard Worker `) 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Worker // check the existence of the internal modules 117*333d2b36SAndroid Build Coastguard Worker foo := result.ModuleForTests("foo", "android_common") 118*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopePublic.stubsLibraryModuleName("foo"), "android_common") 119*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopeSystem.stubsLibraryModuleName("foo"), "android_common") 120*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopeTest.stubsLibraryModuleName("foo"), "android_common") 121*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopePublic.stubsSourceModuleName("foo"), "android_common") 122*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopeSystem.stubsSourceModuleName("foo"), "android_common") 123*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopeTest.stubsSourceModuleName("foo"), "android_common") 124*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopePublic.stubsSourceModuleName("foo")+".api.contribution", "") 125*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopePublic.apiLibraryModuleName("foo"), "android_common") 126*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("foo"+sdkXmlFileSuffix, "android_common") 127*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("foo.api.public.28", "") 128*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("foo.api.system.28", "") 129*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("foo.api.test.28", "") 130*333d2b36SAndroid Build Coastguard Worker 131*333d2b36SAndroid Build Coastguard Worker exportedComponentsInfo, _ := android.OtherModuleProvider(result, foo.Module(), android.ExportedComponentsInfoProvider) 132*333d2b36SAndroid Build Coastguard Worker expectedFooExportedComponents := []string{ 133*333d2b36SAndroid Build Coastguard Worker "foo-removed.api.combined.public.latest", 134*333d2b36SAndroid Build Coastguard Worker "foo-removed.api.combined.system.latest", 135*333d2b36SAndroid Build Coastguard Worker "foo.api.combined.public.latest", 136*333d2b36SAndroid Build Coastguard Worker "foo.api.combined.system.latest", 137*333d2b36SAndroid Build Coastguard Worker "foo.stubs", 138*333d2b36SAndroid Build Coastguard Worker "foo.stubs.exportable", 139*333d2b36SAndroid Build Coastguard Worker "foo.stubs.exportable.system", 140*333d2b36SAndroid Build Coastguard Worker "foo.stubs.exportable.test", 141*333d2b36SAndroid Build Coastguard Worker "foo.stubs.source", 142*333d2b36SAndroid Build Coastguard Worker "foo.stubs.source.system", 143*333d2b36SAndroid Build Coastguard Worker "foo.stubs.source.test", 144*333d2b36SAndroid Build Coastguard Worker "foo.stubs.system", 145*333d2b36SAndroid Build Coastguard Worker "foo.stubs.test", 146*333d2b36SAndroid Build Coastguard Worker } 147*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "foo exported components", expectedFooExportedComponents, exportedComponentsInfo.Components) 148*333d2b36SAndroid Build Coastguard Worker 149*333d2b36SAndroid Build Coastguard Worker bazJavac := result.ModuleForTests("baz", "android_common").Rule("javac") 150*333d2b36SAndroid Build Coastguard Worker // tests if baz is actually linked to the stubs lib 151*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "baz javac classpath", bazJavac.Args["classpath"], "foo.stubs.system.jar") 152*333d2b36SAndroid Build Coastguard Worker // ... and not to the impl lib 153*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "baz javac classpath", bazJavac.Args["classpath"], "foo.jar") 154*333d2b36SAndroid Build Coastguard Worker // test if baz is not linked to the system variant of foo 155*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "baz javac classpath", bazJavac.Args["classpath"], "foo.stubs.jar") 156*333d2b36SAndroid Build Coastguard Worker 157*333d2b36SAndroid Build Coastguard Worker bazTestJavac := result.ModuleForTests("baz-test", "android_common").Rule("javac") 158*333d2b36SAndroid Build Coastguard Worker // tests if baz-test is actually linked to the test stubs lib 159*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "baz-test javac classpath", bazTestJavac.Args["classpath"], "foo.stubs.test.jar") 160*333d2b36SAndroid Build Coastguard Worker 161*333d2b36SAndroid Build Coastguard Worker baz29Javac := result.ModuleForTests("baz-29", "android_common").Rule("javac") 162*333d2b36SAndroid Build Coastguard Worker // tests if baz-29 is actually linked to the system 29 stubs lib 163*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "baz-29 javac classpath", baz29Javac.Args["classpath"], "prebuilts/sdk/sdk_system_29_foo/android_common/combined/sdk_system_29_foo.jar") 164*333d2b36SAndroid Build Coastguard Worker 165*333d2b36SAndroid Build Coastguard Worker bazModule30Javac := result.ModuleForTests("baz-module-30", "android_common").Rule("javac") 166*333d2b36SAndroid Build Coastguard Worker // tests if "baz-module-30" is actually linked to the module 30 stubs lib 167*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "baz-module-30 javac classpath", bazModule30Javac.Args["classpath"], "prebuilts/sdk/sdk_module-lib_30_foo/android_common/combined/sdk_module-lib_30_foo.jar") 168*333d2b36SAndroid Build Coastguard Worker 169*333d2b36SAndroid Build Coastguard Worker // test if baz has exported SDK lib names foo and bar to qux 170*333d2b36SAndroid Build Coastguard Worker qux := result.ModuleForTests("qux", "android_common") 171*333d2b36SAndroid Build Coastguard Worker if quxLib, ok := qux.Module().(*Library); ok { 172*333d2b36SAndroid Build Coastguard Worker requiredSdkLibs, optionalSdkLibs := quxLib.ClassLoaderContexts().UsesLibs() 173*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "qux exports (required)", []string{"fred", "quuz", "foo", "bar"}, requiredSdkLibs) 174*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "qux exports (optional)", []string{}, optionalSdkLibs) 175*333d2b36SAndroid Build Coastguard Worker } 176*333d2b36SAndroid Build Coastguard Worker 177*333d2b36SAndroid Build Coastguard Worker // test if quuz have created the api_contribution module 178*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(apiScopePublic.stubsSourceModuleName("quuz")+".api.contribution", "") 179*333d2b36SAndroid Build Coastguard Worker 180*333d2b36SAndroid Build Coastguard Worker fooImplDexJar := result.ModuleForTests("foo.impl", "android_common").Rule("d8") 181*333d2b36SAndroid Build Coastguard Worker // tests if kotlinc generated files are NOT excluded from output of foo.impl. 182*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "foo.impl dex", fooImplDexJar.BuildParams.Args["mergeZipsFlags"], "-stripFile META-INF/*.kotlin_module") 183*333d2b36SAndroid Build Coastguard Worker 184*333d2b36SAndroid Build Coastguard Worker barImplDexJar := result.ModuleForTests("bar.impl", "android_common").Rule("d8") 185*333d2b36SAndroid Build Coastguard Worker // tests if kotlinc generated files are excluded from output of bar.impl. 186*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "bar.impl dex", barImplDexJar.BuildParams.Args["mergeZipsFlags"], "-stripFile META-INF/*.kotlin_module") 187*333d2b36SAndroid Build Coastguard Worker} 188*333d2b36SAndroid Build Coastguard Worker 189*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_UpdatableLibrary(t *testing.T) { 190*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 191*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 192*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 193*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 194*333d2b36SAndroid Build Coastguard Worker "28": {"foo"}, 195*333d2b36SAndroid Build Coastguard Worker "29": {"foo"}, 196*333d2b36SAndroid Build Coastguard Worker "30": {"foo", "fooUpdatable", "fooUpdatableErr"}, 197*333d2b36SAndroid Build Coastguard Worker }), 198*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 199*333d2b36SAndroid Build Coastguard Worker variables.Platform_version_active_codenames = []string{"Tiramisu", "U", "V", "W", "X"} 200*333d2b36SAndroid Build Coastguard Worker }), 201*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, 202*333d2b36SAndroid Build Coastguard Worker ` 203*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 204*333d2b36SAndroid Build Coastguard Worker name: "fooUpdatable", 205*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 206*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 207*333d2b36SAndroid Build Coastguard Worker on_bootclasspath_since: "U", 208*333d2b36SAndroid Build Coastguard Worker on_bootclasspath_before: "V", 209*333d2b36SAndroid Build Coastguard Worker min_device_sdk: "W", 210*333d2b36SAndroid Build Coastguard Worker max_device_sdk: "X", 211*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "S", 212*333d2b36SAndroid Build Coastguard Worker } 213*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 214*333d2b36SAndroid Build Coastguard Worker name: "foo", 215*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 216*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 217*333d2b36SAndroid Build Coastguard Worker } 218*333d2b36SAndroid Build Coastguard Worker`) 219*333d2b36SAndroid Build Coastguard Worker 220*333d2b36SAndroid Build Coastguard Worker // test that updatability attributes are passed on correctly 221*333d2b36SAndroid Build Coastguard Worker fooUpdatable := result.ModuleForTests("fooUpdatable.xml", "android_common").Output("fooUpdatable.xml") 222*333d2b36SAndroid Build Coastguard Worker fooUpdatableContents := android.ContentFromFileRuleForTests(t, result.TestContext, fooUpdatable) 223*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "fooUpdatable.xml contents", fooUpdatableContents, `on-bootclasspath-since="U"`) 224*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "fooUpdatable.xml contents", fooUpdatableContents, `on-bootclasspath-before="V"`) 225*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "fooUpdatable.xml contents", fooUpdatableContents, `min-device-sdk="W"`) 226*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "fooUpdatable.xml contents", fooUpdatableContents, `max-device-sdk="X"`) 227*333d2b36SAndroid Build Coastguard Worker 228*333d2b36SAndroid Build Coastguard Worker // double check that updatability attributes are not written if they don't exist in the bp file 229*333d2b36SAndroid Build Coastguard Worker // the permissions file for the foo library defined above 230*333d2b36SAndroid Build Coastguard Worker fooPermissions := result.ModuleForTests("foo.xml", "android_common").Output("foo.xml") 231*333d2b36SAndroid Build Coastguard Worker fooPermissionsContents := android.ContentFromFileRuleForTests(t, result.TestContext, fooPermissions) 232*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "foo.xml contents", fooPermissionsContents, `on-bootclasspath-since`) 233*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "foo.xml contents", fooPermissionsContents, `on-bootclasspath-before`) 234*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "foo.xml contents", fooPermissionsContents, `min-device-sdk`) 235*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "foo.xml contents", fooPermissionsContents, `max-device-sdk`) 236*333d2b36SAndroid Build Coastguard Worker} 237*333d2b36SAndroid Build Coastguard Worker 238*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_UpdatableLibrary_Validation_ValidVersion(t *testing.T) { 239*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 240*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 241*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 242*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 243*333d2b36SAndroid Build Coastguard Worker "30": {"fooUpdatable", "fooUpdatableErr"}, 244*333d2b36SAndroid Build Coastguard Worker }), 245*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern( 246*333d2b36SAndroid Build Coastguard Worker []string{ 247*333d2b36SAndroid Build Coastguard Worker `on_bootclasspath_since: "aaa" could not be parsed as an integer and is not a recognized codename`, 248*333d2b36SAndroid Build Coastguard Worker `on_bootclasspath_before: "bbc" could not be parsed as an integer and is not a recognized codename`, 249*333d2b36SAndroid Build Coastguard Worker `min_device_sdk: "ccc" could not be parsed as an integer and is not a recognized codename`, 250*333d2b36SAndroid Build Coastguard Worker `max_device_sdk: "current" is not an allowed value for this attribute`, 251*333d2b36SAndroid Build Coastguard Worker })).RunTestWithBp(t, 252*333d2b36SAndroid Build Coastguard Worker ` 253*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 254*333d2b36SAndroid Build Coastguard Worker name: "fooUpdatableErr", 255*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 256*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 257*333d2b36SAndroid Build Coastguard Worker on_bootclasspath_since: "aaa", 258*333d2b36SAndroid Build Coastguard Worker on_bootclasspath_before: "bbc", 259*333d2b36SAndroid Build Coastguard Worker min_device_sdk: "ccc", 260*333d2b36SAndroid Build Coastguard Worker max_device_sdk: "current", 261*333d2b36SAndroid Build Coastguard Worker } 262*333d2b36SAndroid Build Coastguard Worker`) 263*333d2b36SAndroid Build Coastguard Worker} 264*333d2b36SAndroid Build Coastguard Worker 265*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_UpdatableLibrary_Validation_AtLeastTAttributes(t *testing.T) { 266*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 267*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 268*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 269*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 270*333d2b36SAndroid Build Coastguard Worker "28": {"foo"}, 271*333d2b36SAndroid Build Coastguard Worker }), 272*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern( 273*333d2b36SAndroid Build Coastguard Worker []string{ 274*333d2b36SAndroid Build Coastguard Worker "on_bootclasspath_since: Attribute value needs to be at least T", 275*333d2b36SAndroid Build Coastguard Worker "on_bootclasspath_before: Attribute value needs to be at least T", 276*333d2b36SAndroid Build Coastguard Worker "min_device_sdk: Attribute value needs to be at least T", 277*333d2b36SAndroid Build Coastguard Worker "max_device_sdk: Attribute value needs to be at least T", 278*333d2b36SAndroid Build Coastguard Worker }, 279*333d2b36SAndroid Build Coastguard Worker )).RunTestWithBp(t, 280*333d2b36SAndroid Build Coastguard Worker ` 281*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 282*333d2b36SAndroid Build Coastguard Worker name: "foo", 283*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 284*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 285*333d2b36SAndroid Build Coastguard Worker on_bootclasspath_since: "S", 286*333d2b36SAndroid Build Coastguard Worker on_bootclasspath_before: "S", 287*333d2b36SAndroid Build Coastguard Worker min_device_sdk: "S", 288*333d2b36SAndroid Build Coastguard Worker max_device_sdk: "S", 289*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "S", 290*333d2b36SAndroid Build Coastguard Worker } 291*333d2b36SAndroid Build Coastguard Worker`) 292*333d2b36SAndroid Build Coastguard Worker} 293*333d2b36SAndroid Build Coastguard Worker 294*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_UpdatableLibrary_Validation_MinAndMaxDeviceSdk(t *testing.T) { 295*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 296*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 297*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 298*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 299*333d2b36SAndroid Build Coastguard Worker "28": {"foo"}, 300*333d2b36SAndroid Build Coastguard Worker }), 301*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 302*333d2b36SAndroid Build Coastguard Worker variables.Platform_version_active_codenames = []string{"Tiramisu", "U", "V"} 303*333d2b36SAndroid Build Coastguard Worker }), 304*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern( 305*333d2b36SAndroid Build Coastguard Worker []string{ 306*333d2b36SAndroid Build Coastguard Worker "min_device_sdk can't be greater than max_device_sdk", 307*333d2b36SAndroid Build Coastguard Worker }, 308*333d2b36SAndroid Build Coastguard Worker )).RunTestWithBp(t, 309*333d2b36SAndroid Build Coastguard Worker ` 310*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 311*333d2b36SAndroid Build Coastguard Worker name: "foo", 312*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 313*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 314*333d2b36SAndroid Build Coastguard Worker min_device_sdk: "V", 315*333d2b36SAndroid Build Coastguard Worker max_device_sdk: "U", 316*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "S", 317*333d2b36SAndroid Build Coastguard Worker } 318*333d2b36SAndroid Build Coastguard Worker`) 319*333d2b36SAndroid Build Coastguard Worker} 320*333d2b36SAndroid Build Coastguard Worker 321*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_UpdatableLibrary_Validation_MinAndMaxDeviceSdkAndModuleMinSdk(t *testing.T) { 322*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 323*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 324*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 325*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 326*333d2b36SAndroid Build Coastguard Worker "28": {"foo"}, 327*333d2b36SAndroid Build Coastguard Worker }), 328*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 329*333d2b36SAndroid Build Coastguard Worker variables.Platform_version_active_codenames = []string{"Tiramisu", "U", "V"} 330*333d2b36SAndroid Build Coastguard Worker }), 331*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern( 332*333d2b36SAndroid Build Coastguard Worker []string{ 333*333d2b36SAndroid Build Coastguard Worker regexp.QuoteMeta("min_device_sdk: Can't be less than module's min sdk (V)"), 334*333d2b36SAndroid Build Coastguard Worker regexp.QuoteMeta("max_device_sdk: Can't be less than module's min sdk (V)"), 335*333d2b36SAndroid Build Coastguard Worker }, 336*333d2b36SAndroid Build Coastguard Worker )).RunTestWithBp(t, 337*333d2b36SAndroid Build Coastguard Worker ` 338*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 339*333d2b36SAndroid Build Coastguard Worker name: "foo", 340*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 341*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 342*333d2b36SAndroid Build Coastguard Worker min_device_sdk: "U", 343*333d2b36SAndroid Build Coastguard Worker max_device_sdk: "U", 344*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "V", 345*333d2b36SAndroid Build Coastguard Worker } 346*333d2b36SAndroid Build Coastguard Worker`) 347*333d2b36SAndroid Build Coastguard Worker} 348*333d2b36SAndroid Build Coastguard Worker 349*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_UpdatableLibrary_usesNewTag(t *testing.T) { 350*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 351*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 352*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 353*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 354*333d2b36SAndroid Build Coastguard Worker "30": {"foo"}, 355*333d2b36SAndroid Build Coastguard Worker }), 356*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, 357*333d2b36SAndroid Build Coastguard Worker ` 358*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 359*333d2b36SAndroid Build Coastguard Worker name: "foo", 360*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 361*333d2b36SAndroid Build Coastguard Worker min_device_sdk: "Tiramisu", 362*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "S", 363*333d2b36SAndroid Build Coastguard Worker } 364*333d2b36SAndroid Build Coastguard Worker`) 365*333d2b36SAndroid Build Coastguard Worker // test that updatability attributes are passed on correctly 366*333d2b36SAndroid Build Coastguard Worker fooUpdatable := result.ModuleForTests("foo.xml", "android_common").Output("foo.xml") 367*333d2b36SAndroid Build Coastguard Worker fooUpdatableContents := android.ContentFromFileRuleForTests(t, result.TestContext, fooUpdatable) 368*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "foo.xml contents", fooUpdatableContents, `<apex-library`) 369*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "foo.xml contents", fooUpdatableContents, `<library`) 370*333d2b36SAndroid Build Coastguard Worker} 371*333d2b36SAndroid Build Coastguard Worker 372*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_StubOrImplOnlyLibs(t *testing.T) { 373*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 374*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 375*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 376*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("sdklib"), 377*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 378*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 379*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 380*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 381*333d2b36SAndroid Build Coastguard Worker libs: ["lib"], 382*333d2b36SAndroid Build Coastguard Worker static_libs: ["static-lib"], 383*333d2b36SAndroid Build Coastguard Worker impl_only_libs: ["impl-only-lib"], 384*333d2b36SAndroid Build Coastguard Worker stub_only_libs: ["stub-only-lib"], 385*333d2b36SAndroid Build Coastguard Worker stub_only_static_libs: ["stub-only-static-lib"], 386*333d2b36SAndroid Build Coastguard Worker } 387*333d2b36SAndroid Build Coastguard Worker java_defaults { 388*333d2b36SAndroid Build Coastguard Worker name: "defaults", 389*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 390*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 391*333d2b36SAndroid Build Coastguard Worker } 392*333d2b36SAndroid Build Coastguard Worker java_library { name: "lib", defaults: ["defaults"] } 393*333d2b36SAndroid Build Coastguard Worker java_library { name: "static-lib", defaults: ["defaults"] } 394*333d2b36SAndroid Build Coastguard Worker java_library { name: "impl-only-lib", defaults: ["defaults"] } 395*333d2b36SAndroid Build Coastguard Worker java_library { name: "stub-only-lib", defaults: ["defaults"] } 396*333d2b36SAndroid Build Coastguard Worker java_library { name: "stub-only-static-lib", defaults: ["defaults"] } 397*333d2b36SAndroid Build Coastguard Worker `) 398*333d2b36SAndroid Build Coastguard Worker var expectations = []struct { 399*333d2b36SAndroid Build Coastguard Worker lib string 400*333d2b36SAndroid Build Coastguard Worker on_impl_classpath bool 401*333d2b36SAndroid Build Coastguard Worker on_stub_classpath bool 402*333d2b36SAndroid Build Coastguard Worker in_impl_combined bool 403*333d2b36SAndroid Build Coastguard Worker in_stub_combined bool 404*333d2b36SAndroid Build Coastguard Worker }{ 405*333d2b36SAndroid Build Coastguard Worker {lib: "lib", on_impl_classpath: true}, 406*333d2b36SAndroid Build Coastguard Worker {lib: "static-lib", in_impl_combined: true}, 407*333d2b36SAndroid Build Coastguard Worker {lib: "impl-only-lib", on_impl_classpath: true}, 408*333d2b36SAndroid Build Coastguard Worker {lib: "stub-only-lib", on_stub_classpath: true}, 409*333d2b36SAndroid Build Coastguard Worker {lib: "stub-only-static-lib", in_stub_combined: true}, 410*333d2b36SAndroid Build Coastguard Worker } 411*333d2b36SAndroid Build Coastguard Worker verify := func(sdklib, dep string, cp, combined bool) { 412*333d2b36SAndroid Build Coastguard Worker sdklibCp := result.ModuleForTests(sdklib, "android_common").Rule("javac").Args["classpath"] 413*333d2b36SAndroid Build Coastguard Worker expected := cp || combined // Every combined jar is also on the classpath. 414*333d2b36SAndroid Build Coastguard Worker android.AssertStringContainsEquals(t, "bad classpath for "+sdklib, sdklibCp, "/"+dep+".jar", expected) 415*333d2b36SAndroid Build Coastguard Worker 416*333d2b36SAndroid Build Coastguard Worker combineJarInputs := result.ModuleForTests(sdklib, "android_common").Rule("combineJar").Inputs.Strings() 417*333d2b36SAndroid Build Coastguard Worker depPath := filepath.Join("out", "soong", ".intermediates", dep, "android_common", "turbine-combined", dep+".jar") 418*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContainsEquals(t, "bad combined inputs for "+sdklib, combineJarInputs, depPath, combined) 419*333d2b36SAndroid Build Coastguard Worker } 420*333d2b36SAndroid Build Coastguard Worker for _, expectation := range expectations { 421*333d2b36SAndroid Build Coastguard Worker verify("sdklib.impl", expectation.lib, expectation.on_impl_classpath, expectation.in_impl_combined) 422*333d2b36SAndroid Build Coastguard Worker 423*333d2b36SAndroid Build Coastguard Worker stubName := apiScopePublic.sourceStubsLibraryModuleName("sdklib") 424*333d2b36SAndroid Build Coastguard Worker verify(stubName, expectation.lib, expectation.on_stub_classpath, expectation.in_stub_combined) 425*333d2b36SAndroid Build Coastguard Worker } 426*333d2b36SAndroid Build Coastguard Worker} 427*333d2b36SAndroid Build Coastguard Worker 428*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_DoNotAccessImplWhenItIsNotBuilt(t *testing.T) { 429*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 430*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 431*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 432*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 433*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 434*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 435*333d2b36SAndroid Build Coastguard Worker name: "foo", 436*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 437*333d2b36SAndroid Build Coastguard Worker api_only: true, 438*333d2b36SAndroid Build Coastguard Worker public: { 439*333d2b36SAndroid Build Coastguard Worker enabled: true, 440*333d2b36SAndroid Build Coastguard Worker }, 441*333d2b36SAndroid Build Coastguard Worker } 442*333d2b36SAndroid Build Coastguard Worker 443*333d2b36SAndroid Build Coastguard Worker java_library { 444*333d2b36SAndroid Build Coastguard Worker name: "bar", 445*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 446*333d2b36SAndroid Build Coastguard Worker libs: ["foo.stubs"], 447*333d2b36SAndroid Build Coastguard Worker } 448*333d2b36SAndroid Build Coastguard Worker `) 449*333d2b36SAndroid Build Coastguard Worker 450*333d2b36SAndroid Build Coastguard Worker // The bar library should depend on the stubs jar. 451*333d2b36SAndroid Build Coastguard Worker barLibrary := result.ModuleForTests("bar", "android_common").Rule("javac") 452*333d2b36SAndroid Build Coastguard Worker if expected, actual := `^-classpath .*:out/soong/[^:]*/turbine-combined/foo\.stubs\.jar$`, barLibrary.Args["classpath"]; !regexp.MustCompile(expected).MatchString(actual) { 453*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q, found %#q", expected, actual) 454*333d2b36SAndroid Build Coastguard Worker } 455*333d2b36SAndroid Build Coastguard Worker} 456*333d2b36SAndroid Build Coastguard Worker 457*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_AccessOutputFiles(t *testing.T) { 458*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 459*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 460*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 461*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 462*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 463*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 464*333d2b36SAndroid Build Coastguard Worker name: "foo", 465*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 466*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 467*333d2b36SAndroid Build Coastguard Worker annotations_enabled: true, 468*333d2b36SAndroid Build Coastguard Worker public: { 469*333d2b36SAndroid Build Coastguard Worker enabled: true, 470*333d2b36SAndroid Build Coastguard Worker }, 471*333d2b36SAndroid Build Coastguard Worker } 472*333d2b36SAndroid Build Coastguard Worker java_library { 473*333d2b36SAndroid Build Coastguard Worker name: "bar", 474*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java", ":foo{.public.stubs.source}"], 475*333d2b36SAndroid Build Coastguard Worker java_resources: [":foo{.public.annotations.zip}"], 476*333d2b36SAndroid Build Coastguard Worker } 477*333d2b36SAndroid Build Coastguard Worker `) 478*333d2b36SAndroid Build Coastguard Worker} 479*333d2b36SAndroid Build Coastguard Worker 480*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_AccessOutputFiles_NoAnnotations(t *testing.T) { 481*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 482*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 483*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 484*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 485*333d2b36SAndroid Build Coastguard Worker ). 486*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "bar" variant "android_common": unsupported module reference tag ".public.annotations.zip"`)). 487*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 488*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 489*333d2b36SAndroid Build Coastguard Worker name: "foo", 490*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 491*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 492*333d2b36SAndroid Build Coastguard Worker public: { 493*333d2b36SAndroid Build Coastguard Worker enabled: true, 494*333d2b36SAndroid Build Coastguard Worker }, 495*333d2b36SAndroid Build Coastguard Worker } 496*333d2b36SAndroid Build Coastguard Worker 497*333d2b36SAndroid Build Coastguard Worker java_library { 498*333d2b36SAndroid Build Coastguard Worker name: "bar", 499*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java", ":foo{.public.stubs.source}"], 500*333d2b36SAndroid Build Coastguard Worker java_resources: [":foo{.public.annotations.zip}"], 501*333d2b36SAndroid Build Coastguard Worker } 502*333d2b36SAndroid Build Coastguard Worker `) 503*333d2b36SAndroid Build Coastguard Worker} 504*333d2b36SAndroid Build Coastguard Worker 505*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_AccessOutputFiles_MissingScope(t *testing.T) { 506*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 507*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 508*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 509*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 510*333d2b36SAndroid Build Coastguard Worker ). 511*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "bar" variant "android_common": unsupported module reference tag ".system.stubs.source"`)). 512*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 513*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 514*333d2b36SAndroid Build Coastguard Worker name: "foo", 515*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 516*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 517*333d2b36SAndroid Build Coastguard Worker public: { 518*333d2b36SAndroid Build Coastguard Worker enabled: true, 519*333d2b36SAndroid Build Coastguard Worker }, 520*333d2b36SAndroid Build Coastguard Worker } 521*333d2b36SAndroid Build Coastguard Worker 522*333d2b36SAndroid Build Coastguard Worker java_library { 523*333d2b36SAndroid Build Coastguard Worker name: "bar", 524*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java", ":foo{.system.stubs.source}"], 525*333d2b36SAndroid Build Coastguard Worker } 526*333d2b36SAndroid Build Coastguard Worker `) 527*333d2b36SAndroid Build Coastguard Worker} 528*333d2b36SAndroid Build Coastguard Worker 529*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_Deps(t *testing.T) { 530*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 531*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 532*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 533*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("sdklib"), 534*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 535*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 536*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 537*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 538*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 539*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 540*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 541*333d2b36SAndroid Build Coastguard Worker public: { 542*333d2b36SAndroid Build Coastguard Worker enabled: true, 543*333d2b36SAndroid Build Coastguard Worker }, 544*333d2b36SAndroid Build Coastguard Worker } 545*333d2b36SAndroid Build Coastguard Worker `) 546*333d2b36SAndroid Build Coastguard Worker 547*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "sdklib", "android_common", []string{ 548*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 549*333d2b36SAndroid Build Coastguard Worker `sdklib-removed.api.combined.public.latest`, 550*333d2b36SAndroid Build Coastguard Worker `sdklib.api.combined.public.latest`, 551*333d2b36SAndroid Build Coastguard Worker `sdklib.impl`, 552*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs`, 553*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs.exportable`, 554*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs.source`, 555*333d2b36SAndroid Build Coastguard Worker `sdklib.xml`, 556*333d2b36SAndroid Build Coastguard Worker }) 557*333d2b36SAndroid Build Coastguard Worker} 558*333d2b36SAndroid Build Coastguard Worker 559*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibraryImport_AccessOutputFiles(t *testing.T) { 560*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest.RunTestWithBp(t, ` 561*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 562*333d2b36SAndroid Build Coastguard Worker name: "foo", 563*333d2b36SAndroid Build Coastguard Worker public: { 564*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 565*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 566*333d2b36SAndroid Build Coastguard Worker current_api: "api/current.txt", 567*333d2b36SAndroid Build Coastguard Worker removed_api: "api/removed.txt", 568*333d2b36SAndroid Build Coastguard Worker annotations: "x/annotations.zip", 569*333d2b36SAndroid Build Coastguard Worker }, 570*333d2b36SAndroid Build Coastguard Worker } 571*333d2b36SAndroid Build Coastguard Worker 572*333d2b36SAndroid Build Coastguard Worker java_library { 573*333d2b36SAndroid Build Coastguard Worker name: "bar", 574*333d2b36SAndroid Build Coastguard Worker srcs: [":foo{.public.stubs.source}"], 575*333d2b36SAndroid Build Coastguard Worker java_resources: [ 576*333d2b36SAndroid Build Coastguard Worker ":foo{.public.api.txt}", 577*333d2b36SAndroid Build Coastguard Worker ":foo{.public.removed-api.txt}", 578*333d2b36SAndroid Build Coastguard Worker ":foo{.public.annotations.zip}", 579*333d2b36SAndroid Build Coastguard Worker ], 580*333d2b36SAndroid Build Coastguard Worker } 581*333d2b36SAndroid Build Coastguard Worker `) 582*333d2b36SAndroid Build Coastguard Worker} 583*333d2b36SAndroid Build Coastguard Worker 584*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibraryImport_AccessOutputFiles_Invalid(t *testing.T) { 585*333d2b36SAndroid Build Coastguard Worker bp := ` 586*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 587*333d2b36SAndroid Build Coastguard Worker name: "foo", 588*333d2b36SAndroid Build Coastguard Worker public: { 589*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 590*333d2b36SAndroid Build Coastguard Worker }, 591*333d2b36SAndroid Build Coastguard Worker } 592*333d2b36SAndroid Build Coastguard Worker ` 593*333d2b36SAndroid Build Coastguard Worker 594*333d2b36SAndroid Build Coastguard Worker t.Run("stubs.source", func(t *testing.T) { 595*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest. 596*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "foo" is not a SourceFileProducer or having valid output file for tag ".public.stubs.source"`)). 597*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, bp+` 598*333d2b36SAndroid Build Coastguard Worker java_library { 599*333d2b36SAndroid Build Coastguard Worker name: "bar", 600*333d2b36SAndroid Build Coastguard Worker srcs: [":foo{.public.stubs.source}"], 601*333d2b36SAndroid Build Coastguard Worker java_resources: [ 602*333d2b36SAndroid Build Coastguard Worker ":foo{.public.api.txt}", 603*333d2b36SAndroid Build Coastguard Worker ":foo{.public.removed-api.txt}", 604*333d2b36SAndroid Build Coastguard Worker ], 605*333d2b36SAndroid Build Coastguard Worker } 606*333d2b36SAndroid Build Coastguard Worker `) 607*333d2b36SAndroid Build Coastguard Worker }) 608*333d2b36SAndroid Build Coastguard Worker 609*333d2b36SAndroid Build Coastguard Worker t.Run("api.txt", func(t *testing.T) { 610*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest. 611*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "foo" is not a SourceFileProducer or having valid output file for tag ".public.api.txt"`)). 612*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, bp+` 613*333d2b36SAndroid Build Coastguard Worker java_library { 614*333d2b36SAndroid Build Coastguard Worker name: "bar", 615*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 616*333d2b36SAndroid Build Coastguard Worker java_resources: [ 617*333d2b36SAndroid Build Coastguard Worker ":foo{.public.api.txt}", 618*333d2b36SAndroid Build Coastguard Worker ], 619*333d2b36SAndroid Build Coastguard Worker } 620*333d2b36SAndroid Build Coastguard Worker `) 621*333d2b36SAndroid Build Coastguard Worker }) 622*333d2b36SAndroid Build Coastguard Worker 623*333d2b36SAndroid Build Coastguard Worker t.Run("removed-api.txt", func(t *testing.T) { 624*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest. 625*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "foo" is not a SourceFileProducer or having valid output file for tag ".public.removed-api.txt"`)). 626*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, bp+` 627*333d2b36SAndroid Build Coastguard Worker java_library { 628*333d2b36SAndroid Build Coastguard Worker name: "bar", 629*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 630*333d2b36SAndroid Build Coastguard Worker java_resources: [ 631*333d2b36SAndroid Build Coastguard Worker ":foo{.public.removed-api.txt}", 632*333d2b36SAndroid Build Coastguard Worker ], 633*333d2b36SAndroid Build Coastguard Worker } 634*333d2b36SAndroid Build Coastguard Worker `) 635*333d2b36SAndroid Build Coastguard Worker }) 636*333d2b36SAndroid Build Coastguard Worker} 637*333d2b36SAndroid Build Coastguard Worker 638*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_InvalidScopes(t *testing.T) { 639*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest. 640*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "foo": enabled api scope "system" depends on disabled scope "public"`)). 641*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 642*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 643*333d2b36SAndroid Build Coastguard Worker name: "foo", 644*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 645*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 646*333d2b36SAndroid Build Coastguard Worker // Explicitly disable public to test the check that ensures the set of enabled 647*333d2b36SAndroid Build Coastguard Worker // scopes is consistent. 648*333d2b36SAndroid Build Coastguard Worker public: { 649*333d2b36SAndroid Build Coastguard Worker enabled: false, 650*333d2b36SAndroid Build Coastguard Worker }, 651*333d2b36SAndroid Build Coastguard Worker system: { 652*333d2b36SAndroid Build Coastguard Worker enabled: true, 653*333d2b36SAndroid Build Coastguard Worker }, 654*333d2b36SAndroid Build Coastguard Worker } 655*333d2b36SAndroid Build Coastguard Worker `) 656*333d2b36SAndroid Build Coastguard Worker} 657*333d2b36SAndroid Build Coastguard Worker 658*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_SdkVersion_ForScope(t *testing.T) { 659*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 660*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 661*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 662*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 663*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 664*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 665*333d2b36SAndroid Build Coastguard Worker name: "foo", 666*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 667*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 668*333d2b36SAndroid Build Coastguard Worker system: { 669*333d2b36SAndroid Build Coastguard Worker enabled: true, 670*333d2b36SAndroid Build Coastguard Worker sdk_version: "module_current", 671*333d2b36SAndroid Build Coastguard Worker }, 672*333d2b36SAndroid Build Coastguard Worker } 673*333d2b36SAndroid Build Coastguard Worker `) 674*333d2b36SAndroid Build Coastguard Worker} 675*333d2b36SAndroid Build Coastguard Worker 676*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_ModuleLib(t *testing.T) { 677*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 678*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 679*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 680*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 681*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 682*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 683*333d2b36SAndroid Build Coastguard Worker name: "foo", 684*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 685*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 686*333d2b36SAndroid Build Coastguard Worker system: { 687*333d2b36SAndroid Build Coastguard Worker enabled: true, 688*333d2b36SAndroid Build Coastguard Worker }, 689*333d2b36SAndroid Build Coastguard Worker module_lib: { 690*333d2b36SAndroid Build Coastguard Worker enabled: true, 691*333d2b36SAndroid Build Coastguard Worker }, 692*333d2b36SAndroid Build Coastguard Worker } 693*333d2b36SAndroid Build Coastguard Worker `) 694*333d2b36SAndroid Build Coastguard Worker} 695*333d2b36SAndroid Build Coastguard Worker 696*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_SystemServer(t *testing.T) { 697*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 698*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 699*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 700*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 701*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 702*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 703*333d2b36SAndroid Build Coastguard Worker name: "foo", 704*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 705*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 706*333d2b36SAndroid Build Coastguard Worker system: { 707*333d2b36SAndroid Build Coastguard Worker enabled: true, 708*333d2b36SAndroid Build Coastguard Worker }, 709*333d2b36SAndroid Build Coastguard Worker system_server: { 710*333d2b36SAndroid Build Coastguard Worker enabled: true, 711*333d2b36SAndroid Build Coastguard Worker }, 712*333d2b36SAndroid Build Coastguard Worker } 713*333d2b36SAndroid Build Coastguard Worker `) 714*333d2b36SAndroid Build Coastguard Worker} 715*333d2b36SAndroid Build Coastguard Worker 716*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_SystemServer_AccessToStubScopeLibs(t *testing.T) { 717*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 718*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 719*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 720*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo-public", "foo-system", "foo-module-lib", "foo-system-server"), 721*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 722*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 723*333d2b36SAndroid Build Coastguard Worker name: "foo-public", 724*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 725*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 726*333d2b36SAndroid Build Coastguard Worker public: { 727*333d2b36SAndroid Build Coastguard Worker enabled: true, 728*333d2b36SAndroid Build Coastguard Worker }, 729*333d2b36SAndroid Build Coastguard Worker } 730*333d2b36SAndroid Build Coastguard Worker 731*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 732*333d2b36SAndroid Build Coastguard Worker name: "foo-system", 733*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 734*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 735*333d2b36SAndroid Build Coastguard Worker system: { 736*333d2b36SAndroid Build Coastguard Worker enabled: true, 737*333d2b36SAndroid Build Coastguard Worker }, 738*333d2b36SAndroid Build Coastguard Worker } 739*333d2b36SAndroid Build Coastguard Worker 740*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 741*333d2b36SAndroid Build Coastguard Worker name: "foo-module-lib", 742*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 743*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 744*333d2b36SAndroid Build Coastguard Worker system: { 745*333d2b36SAndroid Build Coastguard Worker enabled: true, 746*333d2b36SAndroid Build Coastguard Worker }, 747*333d2b36SAndroid Build Coastguard Worker module_lib: { 748*333d2b36SAndroid Build Coastguard Worker enabled: true, 749*333d2b36SAndroid Build Coastguard Worker }, 750*333d2b36SAndroid Build Coastguard Worker } 751*333d2b36SAndroid Build Coastguard Worker 752*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 753*333d2b36SAndroid Build Coastguard Worker name: "foo-system-server", 754*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 755*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 756*333d2b36SAndroid Build Coastguard Worker system_server: { 757*333d2b36SAndroid Build Coastguard Worker enabled: true, 758*333d2b36SAndroid Build Coastguard Worker }, 759*333d2b36SAndroid Build Coastguard Worker } 760*333d2b36SAndroid Build Coastguard Worker 761*333d2b36SAndroid Build Coastguard Worker java_library { 762*333d2b36SAndroid Build Coastguard Worker name: "bar", 763*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 764*333d2b36SAndroid Build Coastguard Worker libs: ["foo-public.stubs", "foo-system.stubs.system", "foo-module-lib.stubs.module_lib", "foo-system-server.stubs.system_server"], 765*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_server_current", 766*333d2b36SAndroid Build Coastguard Worker } 767*333d2b36SAndroid Build Coastguard Worker `) 768*333d2b36SAndroid Build Coastguard Worker 769*333d2b36SAndroid Build Coastguard Worker stubsPath := func(name string, scope *apiScope) string { 770*333d2b36SAndroid Build Coastguard Worker name = scope.stubsLibraryModuleName(name) 771*333d2b36SAndroid Build Coastguard Worker return fmt.Sprintf("out/soong/.intermediates/%[1]s/android_common/turbine-combined/%[1]s.jar", name) 772*333d2b36SAndroid Build Coastguard Worker } 773*333d2b36SAndroid Build Coastguard Worker 774*333d2b36SAndroid Build Coastguard Worker // The bar library should depend on the highest (where system server is highest and public is 775*333d2b36SAndroid Build Coastguard Worker // lowest) API scopes provided by each of the foo-* modules. The highest API scope provided by the 776*333d2b36SAndroid Build Coastguard Worker // foo-<x> module is <x>. 777*333d2b36SAndroid Build Coastguard Worker barLibrary := result.ModuleForTests("bar", "android_common").Rule("javac") 778*333d2b36SAndroid Build Coastguard Worker stubLibraries := []string{ 779*333d2b36SAndroid Build Coastguard Worker stubsPath("foo-public", apiScopePublic), 780*333d2b36SAndroid Build Coastguard Worker stubsPath("foo-system", apiScopeSystem), 781*333d2b36SAndroid Build Coastguard Worker stubsPath("foo-module-lib", apiScopeModuleLib), 782*333d2b36SAndroid Build Coastguard Worker stubsPath("foo-system-server", apiScopeSystemServer), 783*333d2b36SAndroid Build Coastguard Worker } 784*333d2b36SAndroid Build Coastguard Worker expectedPattern := fmt.Sprintf(`^-classpath .*:\Q%s\E$`, strings.Join(stubLibraries, ":")) 785*333d2b36SAndroid Build Coastguard Worker if expected, actual := expectedPattern, barLibrary.Args["classpath"]; !regexp.MustCompile(expected).MatchString(actual) { 786*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected pattern %q to match %#q", expected, actual) 787*333d2b36SAndroid Build Coastguard Worker } 788*333d2b36SAndroid Build Coastguard Worker} 789*333d2b36SAndroid Build Coastguard Worker 790*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibraryImport(t *testing.T) { 791*333d2b36SAndroid Build Coastguard Worker result := prepareForJavaTest.RunTestWithBp(t, ` 792*333d2b36SAndroid Build Coastguard Worker java_library { 793*333d2b36SAndroid Build Coastguard Worker name: "foo", 794*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 795*333d2b36SAndroid Build Coastguard Worker libs: ["sdklib.stubs"], 796*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 797*333d2b36SAndroid Build Coastguard Worker } 798*333d2b36SAndroid Build Coastguard Worker 799*333d2b36SAndroid Build Coastguard Worker java_library { 800*333d2b36SAndroid Build Coastguard Worker name: "foo.system", 801*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 802*333d2b36SAndroid Build Coastguard Worker libs: ["sdklib.stubs.system"], 803*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_current", 804*333d2b36SAndroid Build Coastguard Worker } 805*333d2b36SAndroid Build Coastguard Worker 806*333d2b36SAndroid Build Coastguard Worker java_library { 807*333d2b36SAndroid Build Coastguard Worker name: "foo.test", 808*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 809*333d2b36SAndroid Build Coastguard Worker libs: ["sdklib.stubs.test"], 810*333d2b36SAndroid Build Coastguard Worker sdk_version: "test_current", 811*333d2b36SAndroid Build Coastguard Worker } 812*333d2b36SAndroid Build Coastguard Worker 813*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 814*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 815*333d2b36SAndroid Build Coastguard Worker public: { 816*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 817*333d2b36SAndroid Build Coastguard Worker }, 818*333d2b36SAndroid Build Coastguard Worker system: { 819*333d2b36SAndroid Build Coastguard Worker jars: ["b.jar"], 820*333d2b36SAndroid Build Coastguard Worker }, 821*333d2b36SAndroid Build Coastguard Worker test: { 822*333d2b36SAndroid Build Coastguard Worker jars: ["c.jar"], 823*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["c.java"], 824*333d2b36SAndroid Build Coastguard Worker }, 825*333d2b36SAndroid Build Coastguard Worker } 826*333d2b36SAndroid Build Coastguard Worker `) 827*333d2b36SAndroid Build Coastguard Worker 828*333d2b36SAndroid Build Coastguard Worker for _, scope := range []string{"", ".system", ".test"} { 829*333d2b36SAndroid Build Coastguard Worker fooModule := result.ModuleForTests("foo"+scope, "android_common") 830*333d2b36SAndroid Build Coastguard Worker javac := fooModule.Rule("javac") 831*333d2b36SAndroid Build Coastguard Worker 832*333d2b36SAndroid Build Coastguard Worker sdklibStubsJar := result.ModuleForTests("sdklib.stubs"+scope, "android_common").Output("combined/sdklib.stubs" + scope + ".jar").Output 833*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "foo classpath", javac.Args["classpath"], sdklibStubsJar.String()) 834*333d2b36SAndroid Build Coastguard Worker } 835*333d2b36SAndroid Build Coastguard Worker 836*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "sdklib", "android_common", []string{ 837*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 838*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 839*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs`, 840*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs.source.test`, 841*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs.system`, 842*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs.test`, 843*333d2b36SAndroid Build Coastguard Worker }) 844*333d2b36SAndroid Build Coastguard Worker} 845*333d2b36SAndroid Build Coastguard Worker 846*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibraryImport_WithSource(t *testing.T) { 847*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 848*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 849*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 850*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("sdklib"), 851*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 852*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 853*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 854*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 855*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 856*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 857*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 858*333d2b36SAndroid Build Coastguard Worker public: { 859*333d2b36SAndroid Build Coastguard Worker enabled: true, 860*333d2b36SAndroid Build Coastguard Worker }, 861*333d2b36SAndroid Build Coastguard Worker } 862*333d2b36SAndroid Build Coastguard Worker 863*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 864*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 865*333d2b36SAndroid Build Coastguard Worker public: { 866*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 867*333d2b36SAndroid Build Coastguard Worker }, 868*333d2b36SAndroid Build Coastguard Worker } 869*333d2b36SAndroid Build Coastguard Worker `) 870*333d2b36SAndroid Build Coastguard Worker 871*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "sdklib", "android_common", []string{ 872*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 873*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib`, 874*333d2b36SAndroid Build Coastguard Worker `sdklib-removed.api.combined.public.latest`, 875*333d2b36SAndroid Build Coastguard Worker `sdklib.api.combined.public.latest`, 876*333d2b36SAndroid Build Coastguard Worker `sdklib.impl`, 877*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs`, 878*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs.exportable`, 879*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs.source`, 880*333d2b36SAndroid Build Coastguard Worker `sdklib.xml`, 881*333d2b36SAndroid Build Coastguard Worker }) 882*333d2b36SAndroid Build Coastguard Worker 883*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "prebuilt_sdklib", "android_common", []string{ 884*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 885*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs`, 886*333d2b36SAndroid Build Coastguard Worker `sdklib.impl`, 887*333d2b36SAndroid Build Coastguard Worker // This should be prebuilt_sdklib.stubs but is set to sdklib.stubs because the 888*333d2b36SAndroid Build Coastguard Worker // dependency is added after prebuilts may have been renamed and so has to use 889*333d2b36SAndroid Build Coastguard Worker // the renamed name. 890*333d2b36SAndroid Build Coastguard Worker `sdklib.xml`, 891*333d2b36SAndroid Build Coastguard Worker }) 892*333d2b36SAndroid Build Coastguard Worker} 893*333d2b36SAndroid Build Coastguard Worker 894*333d2b36SAndroid Build Coastguard Workerfunc testJavaSdkLibraryImport_Preferred(t *testing.T, prefer string, preparer android.FixturePreparer) { 895*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 896*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 897*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 898*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("sdklib"), 899*333d2b36SAndroid Build Coastguard Worker preparer, 900*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 901*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 902*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 903*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 904*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 905*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 906*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 907*333d2b36SAndroid Build Coastguard Worker public: { 908*333d2b36SAndroid Build Coastguard Worker enabled: true, 909*333d2b36SAndroid Build Coastguard Worker }, 910*333d2b36SAndroid Build Coastguard Worker } 911*333d2b36SAndroid Build Coastguard Worker 912*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 913*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 914*333d2b36SAndroid Build Coastguard Worker `+prefer+` 915*333d2b36SAndroid Build Coastguard Worker public: { 916*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 917*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 918*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 919*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 920*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 921*333d2b36SAndroid Build Coastguard Worker }, 922*333d2b36SAndroid Build Coastguard Worker } 923*333d2b36SAndroid Build Coastguard Worker 924*333d2b36SAndroid Build Coastguard Worker java_library { 925*333d2b36SAndroid Build Coastguard Worker name: "combined", 926*333d2b36SAndroid Build Coastguard Worker static_libs: [ 927*333d2b36SAndroid Build Coastguard Worker "sdklib.stubs", 928*333d2b36SAndroid Build Coastguard Worker ], 929*333d2b36SAndroid Build Coastguard Worker java_resources: [ 930*333d2b36SAndroid Build Coastguard Worker ":sdklib.stubs.source", 931*333d2b36SAndroid Build Coastguard Worker ":sdklib{.public.api.txt}", 932*333d2b36SAndroid Build Coastguard Worker ":sdklib{.public.removed-api.txt}", 933*333d2b36SAndroid Build Coastguard Worker ":sdklib{.public.annotations.zip}", 934*333d2b36SAndroid Build Coastguard Worker ], 935*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 936*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 937*333d2b36SAndroid Build Coastguard Worker } 938*333d2b36SAndroid Build Coastguard Worker 939*333d2b36SAndroid Build Coastguard Worker java_library { 940*333d2b36SAndroid Build Coastguard Worker name: "public", 941*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 942*333d2b36SAndroid Build Coastguard Worker libs: ["sdklib.stubs"], 943*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 944*333d2b36SAndroid Build Coastguard Worker } 945*333d2b36SAndroid Build Coastguard Worker `) 946*333d2b36SAndroid Build Coastguard Worker 947*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "sdklib", "android_common", []string{ 948*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib`, 949*333d2b36SAndroid Build Coastguard Worker `sdklib-removed.api.combined.public.latest`, 950*333d2b36SAndroid Build Coastguard Worker `sdklib.api.combined.public.latest`, 951*333d2b36SAndroid Build Coastguard Worker `sdklib.impl`, 952*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs`, 953*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs.exportable`, 954*333d2b36SAndroid Build Coastguard Worker `sdklib.stubs.source`, 955*333d2b36SAndroid Build Coastguard Worker `sdklib.xml`, 956*333d2b36SAndroid Build Coastguard Worker }) 957*333d2b36SAndroid Build Coastguard Worker 958*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "prebuilt_sdklib", "android_common", []string{ 959*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 960*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 961*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs`, 962*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs.source`, 963*333d2b36SAndroid Build Coastguard Worker `sdklib.impl`, 964*333d2b36SAndroid Build Coastguard Worker `sdklib.xml`, 965*333d2b36SAndroid Build Coastguard Worker }) 966*333d2b36SAndroid Build Coastguard Worker 967*333d2b36SAndroid Build Coastguard Worker // Make sure that dependencies on child modules use the prebuilt when preferred. 968*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "combined", "android_common", []string{ 969*333d2b36SAndroid Build Coastguard Worker // Each use of :sdklib{...} adds a dependency onto prebuilt_sdklib. 970*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib`, 971*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib`, 972*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib`, 973*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs`, 974*333d2b36SAndroid Build Coastguard Worker `prebuilt_sdklib.stubs.source`, 975*333d2b36SAndroid Build Coastguard Worker }) 976*333d2b36SAndroid Build Coastguard Worker 977*333d2b36SAndroid Build Coastguard Worker // Make sure that dependencies on sdklib that resolve to one of the child libraries use the 978*333d2b36SAndroid Build Coastguard Worker // prebuilt library. 979*333d2b36SAndroid Build Coastguard Worker public := result.ModuleForTests("public", "android_common") 980*333d2b36SAndroid Build Coastguard Worker rule := public.Output("javac/public.jar") 981*333d2b36SAndroid Build Coastguard Worker inputs := rule.Implicits.Strings() 982*333d2b36SAndroid Build Coastguard Worker expected := "out/soong/.intermediates/prebuilt_sdklib.stubs/android_common/combined/sdklib.stubs.jar" 983*333d2b36SAndroid Build Coastguard Worker if !android.InList(expected, inputs) { 984*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q to contain %q", inputs, expected) 985*333d2b36SAndroid Build Coastguard Worker } 986*333d2b36SAndroid Build Coastguard Worker} 987*333d2b36SAndroid Build Coastguard Worker 988*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibraryImport_Preferred(t *testing.T) { 989*333d2b36SAndroid Build Coastguard Worker t.Run("prefer", func(t *testing.T) { 990*333d2b36SAndroid Build Coastguard Worker testJavaSdkLibraryImport_Preferred(t, "prefer: true,", android.NullFixturePreparer) 991*333d2b36SAndroid Build Coastguard Worker }) 992*333d2b36SAndroid Build Coastguard Worker} 993*333d2b36SAndroid Build Coastguard Worker 994*333d2b36SAndroid Build Coastguard Worker// If a module is listed in `mainline_module_contributions, it should be used 995*333d2b36SAndroid Build Coastguard Worker// It will supersede any other source vs prebuilt selection mechanism like `prefer` attribute 996*333d2b36SAndroid Build Coastguard Workerfunc TestSdkLibraryImport_MetadataModuleSupersedesPreferred(t *testing.T) { 997*333d2b36SAndroid Build Coastguard Worker bp := ` 998*333d2b36SAndroid Build Coastguard Worker apex_contributions { 999*333d2b36SAndroid Build Coastguard Worker name: "my_mainline_module_contributions", 1000*333d2b36SAndroid Build Coastguard Worker api_domain: "my_mainline_module", 1001*333d2b36SAndroid Build Coastguard Worker contents: [ 1002*333d2b36SAndroid Build Coastguard Worker // legacy mechanism prefers the prebuilt 1003*333d2b36SAndroid Build Coastguard Worker // mainline_module_contributions supersedes this since source is listed explicitly 1004*333d2b36SAndroid Build Coastguard Worker "sdklib.prebuilt_preferred_using_legacy_flags", 1005*333d2b36SAndroid Build Coastguard Worker 1006*333d2b36SAndroid Build Coastguard Worker // legacy mechanism prefers the source 1007*333d2b36SAndroid Build Coastguard Worker // mainline_module_contributions supersedes this since prebuilt is listed explicitly 1008*333d2b36SAndroid Build Coastguard Worker "prebuilt_sdklib.source_preferred_using_legacy_flags", 1009*333d2b36SAndroid Build Coastguard Worker ], 1010*333d2b36SAndroid Build Coastguard Worker } 1011*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1012*333d2b36SAndroid Build Coastguard Worker name: "sdklib.prebuilt_preferred_using_legacy_flags", 1013*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1014*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 1015*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 1016*333d2b36SAndroid Build Coastguard Worker public: { 1017*333d2b36SAndroid Build Coastguard Worker enabled: true, 1018*333d2b36SAndroid Build Coastguard Worker }, 1019*333d2b36SAndroid Build Coastguard Worker system: { 1020*333d2b36SAndroid Build Coastguard Worker enabled: true, 1021*333d2b36SAndroid Build Coastguard Worker } 1022*333d2b36SAndroid Build Coastguard Worker } 1023*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 1024*333d2b36SAndroid Build Coastguard Worker name: "sdklib.prebuilt_preferred_using_legacy_flags", 1025*333d2b36SAndroid Build Coastguard Worker prefer: true, // prebuilt is preferred using legacy mechanism 1026*333d2b36SAndroid Build Coastguard Worker public: { 1027*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1028*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1029*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1030*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1031*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1032*333d2b36SAndroid Build Coastguard Worker }, 1033*333d2b36SAndroid Build Coastguard Worker system: { 1034*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1035*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1036*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1037*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1038*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1039*333d2b36SAndroid Build Coastguard Worker }, 1040*333d2b36SAndroid Build Coastguard Worker } 1041*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1042*333d2b36SAndroid Build Coastguard Worker name: "sdklib.source_preferred_using_legacy_flags", 1043*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1044*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 1045*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 1046*333d2b36SAndroid Build Coastguard Worker public: { 1047*333d2b36SAndroid Build Coastguard Worker enabled: true, 1048*333d2b36SAndroid Build Coastguard Worker }, 1049*333d2b36SAndroid Build Coastguard Worker system: { 1050*333d2b36SAndroid Build Coastguard Worker enabled: true, 1051*333d2b36SAndroid Build Coastguard Worker } 1052*333d2b36SAndroid Build Coastguard Worker } 1053*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 1054*333d2b36SAndroid Build Coastguard Worker name: "sdklib.source_preferred_using_legacy_flags", 1055*333d2b36SAndroid Build Coastguard Worker prefer: false, // source is preferred using legacy mechanism 1056*333d2b36SAndroid Build Coastguard Worker public: { 1057*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1058*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1059*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1060*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1061*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1062*333d2b36SAndroid Build Coastguard Worker }, 1063*333d2b36SAndroid Build Coastguard Worker system: { 1064*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1065*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1066*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1067*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1068*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1069*333d2b36SAndroid Build Coastguard Worker }, 1070*333d2b36SAndroid Build Coastguard Worker } 1071*333d2b36SAndroid Build Coastguard Worker 1072*333d2b36SAndroid Build Coastguard Worker // rdeps 1073*333d2b36SAndroid Build Coastguard Worker java_library { 1074*333d2b36SAndroid Build Coastguard Worker name: "public", 1075*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1076*333d2b36SAndroid Build Coastguard Worker libs: [ 1077*333d2b36SAndroid Build Coastguard Worker // this should get source since source is listed in my_mainline_module_contributions 1078*333d2b36SAndroid Build Coastguard Worker "sdklib.prebuilt_preferred_using_legacy_flags.stubs", 1079*333d2b36SAndroid Build Coastguard Worker "sdklib.prebuilt_preferred_using_legacy_flags.stubs.system", 1080*333d2b36SAndroid Build Coastguard Worker 1081*333d2b36SAndroid Build Coastguard Worker // this should get prebuilt since source is listed in my_mainline_module_contributions 1082*333d2b36SAndroid Build Coastguard Worker "sdklib.source_preferred_using_legacy_flags.stubs", 1083*333d2b36SAndroid Build Coastguard Worker "sdklib.source_preferred_using_legacy_flags.stubs.system", 1084*333d2b36SAndroid Build Coastguard Worker 1085*333d2b36SAndroid Build Coastguard Worker ], 1086*333d2b36SAndroid Build Coastguard Worker } 1087*333d2b36SAndroid Build Coastguard Worker ` 1088*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1089*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1090*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1091*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("sdklib.source_preferred_using_legacy_flags", "sdklib.prebuilt_preferred_using_legacy_flags"), 1092*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ADSERVICES", "my_mainline_module_contributions"), 1093*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, bp) 1094*333d2b36SAndroid Build Coastguard Worker 1095*333d2b36SAndroid Build Coastguard Worker // Make sure that rdeps get the correct source vs prebuilt based on mainline_module_contributions 1096*333d2b36SAndroid Build Coastguard Worker public := result.ModuleForTests("public", "android_common") 1097*333d2b36SAndroid Build Coastguard Worker rule := public.Output("javac/public.jar") 1098*333d2b36SAndroid Build Coastguard Worker inputs := rule.Implicits.Strings() 1099*333d2b36SAndroid Build Coastguard Worker expectedInputs := []string{ 1100*333d2b36SAndroid Build Coastguard Worker // source 1101*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/sdklib.prebuilt_preferred_using_legacy_flags.stubs/android_common/turbine-combined/sdklib.prebuilt_preferred_using_legacy_flags.stubs.jar", 1102*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/sdklib.prebuilt_preferred_using_legacy_flags.stubs.system/android_common/turbine-combined/sdklib.prebuilt_preferred_using_legacy_flags.stubs.system.jar", 1103*333d2b36SAndroid Build Coastguard Worker 1104*333d2b36SAndroid Build Coastguard Worker // prebuilt 1105*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/prebuilt_sdklib.source_preferred_using_legacy_flags.stubs/android_common/combined/sdklib.source_preferred_using_legacy_flags.stubs.jar", 1106*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/prebuilt_sdklib.source_preferred_using_legacy_flags.stubs.system/android_common/combined/sdklib.source_preferred_using_legacy_flags.stubs.system.jar", 1107*333d2b36SAndroid Build Coastguard Worker } 1108*333d2b36SAndroid Build Coastguard Worker for _, expected := range expectedInputs { 1109*333d2b36SAndroid Build Coastguard Worker if !android.InList(expected, inputs) { 1110*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q to contain %q", inputs, expected) 1111*333d2b36SAndroid Build Coastguard Worker } 1112*333d2b36SAndroid Build Coastguard Worker } 1113*333d2b36SAndroid Build Coastguard Worker} 1114*333d2b36SAndroid Build Coastguard Worker 1115*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibraryDist(t *testing.T) { 1116*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1117*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaBuildComponents, 1118*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaDefaultModules, 1119*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1120*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis( 1121*333d2b36SAndroid Build Coastguard Worker "sdklib_no_group", 1122*333d2b36SAndroid Build Coastguard Worker "sdklib_group_foo", 1123*333d2b36SAndroid Build Coastguard Worker "sdklib_owner_foo", 1124*333d2b36SAndroid Build Coastguard Worker "foo"), 1125*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 1126*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1127*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1128*333d2b36SAndroid Build Coastguard Worker name: "sdklib_no_group", 1129*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.java"], 1130*333d2b36SAndroid Build Coastguard Worker } 1131*333d2b36SAndroid Build Coastguard Worker 1132*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1133*333d2b36SAndroid Build Coastguard Worker name: "sdklib_group_foo", 1134*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.java"], 1135*333d2b36SAndroid Build Coastguard Worker dist_group: "foo", 1136*333d2b36SAndroid Build Coastguard Worker } 1137*333d2b36SAndroid Build Coastguard Worker 1138*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1139*333d2b36SAndroid Build Coastguard Worker name: "sdklib_owner_foo", 1140*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.java"], 1141*333d2b36SAndroid Build Coastguard Worker owner: "foo", 1142*333d2b36SAndroid Build Coastguard Worker } 1143*333d2b36SAndroid Build Coastguard Worker 1144*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1145*333d2b36SAndroid Build Coastguard Worker name: "sdklib_stem_foo", 1146*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.java"], 1147*333d2b36SAndroid Build Coastguard Worker dist_stem: "foo", 1148*333d2b36SAndroid Build Coastguard Worker } 1149*333d2b36SAndroid Build Coastguard Worker `) 1150*333d2b36SAndroid Build Coastguard Worker 1151*333d2b36SAndroid Build Coastguard Worker type testCase struct { 1152*333d2b36SAndroid Build Coastguard Worker module string 1153*333d2b36SAndroid Build Coastguard Worker distDir string 1154*333d2b36SAndroid Build Coastguard Worker distStem string 1155*333d2b36SAndroid Build Coastguard Worker } 1156*333d2b36SAndroid Build Coastguard Worker testCases := []testCase{ 1157*333d2b36SAndroid Build Coastguard Worker { 1158*333d2b36SAndroid Build Coastguard Worker module: "sdklib_no_group", 1159*333d2b36SAndroid Build Coastguard Worker distDir: "apistubs/unknown/public", 1160*333d2b36SAndroid Build Coastguard Worker distStem: "sdklib_no_group.jar", 1161*333d2b36SAndroid Build Coastguard Worker }, 1162*333d2b36SAndroid Build Coastguard Worker { 1163*333d2b36SAndroid Build Coastguard Worker module: "sdklib_group_foo", 1164*333d2b36SAndroid Build Coastguard Worker distDir: "apistubs/foo/public", 1165*333d2b36SAndroid Build Coastguard Worker distStem: "sdklib_group_foo.jar", 1166*333d2b36SAndroid Build Coastguard Worker }, 1167*333d2b36SAndroid Build Coastguard Worker { 1168*333d2b36SAndroid Build Coastguard Worker // Owner doesn't affect distDir after b/186723288. 1169*333d2b36SAndroid Build Coastguard Worker module: "sdklib_owner_foo", 1170*333d2b36SAndroid Build Coastguard Worker distDir: "apistubs/unknown/public", 1171*333d2b36SAndroid Build Coastguard Worker distStem: "sdklib_owner_foo.jar", 1172*333d2b36SAndroid Build Coastguard Worker }, 1173*333d2b36SAndroid Build Coastguard Worker { 1174*333d2b36SAndroid Build Coastguard Worker module: "sdklib_stem_foo", 1175*333d2b36SAndroid Build Coastguard Worker distDir: "apistubs/unknown/public", 1176*333d2b36SAndroid Build Coastguard Worker distStem: "foo.jar", 1177*333d2b36SAndroid Build Coastguard Worker }, 1178*333d2b36SAndroid Build Coastguard Worker } 1179*333d2b36SAndroid Build Coastguard Worker 1180*333d2b36SAndroid Build Coastguard Worker for _, tt := range testCases { 1181*333d2b36SAndroid Build Coastguard Worker t.Run(tt.module, func(t *testing.T) { 1182*333d2b36SAndroid Build Coastguard Worker m := result.ModuleForTests(apiScopePublic.exportableStubsLibraryModuleName(tt.module), "android_common").Module().(*Library) 1183*333d2b36SAndroid Build Coastguard Worker dists := m.Dists() 1184*333d2b36SAndroid Build Coastguard Worker if len(dists) != 1 { 1185*333d2b36SAndroid Build Coastguard Worker t.Fatalf("expected exactly 1 dist entry, got %d", len(dists)) 1186*333d2b36SAndroid Build Coastguard Worker } 1187*333d2b36SAndroid Build Coastguard Worker if g, w := String(dists[0].Dir), tt.distDir; g != w { 1188*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected dist dir %q, got %q", w, g) 1189*333d2b36SAndroid Build Coastguard Worker } 1190*333d2b36SAndroid Build Coastguard Worker if g, w := String(dists[0].Dest), tt.distStem; g != w { 1191*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected dist stem %q, got %q", w, g) 1192*333d2b36SAndroid Build Coastguard Worker } 1193*333d2b36SAndroid Build Coastguard Worker }) 1194*333d2b36SAndroid Build Coastguard Worker } 1195*333d2b36SAndroid Build Coastguard Worker} 1196*333d2b36SAndroid Build Coastguard Worker 1197*333d2b36SAndroid Build Coastguard Workerfunc TestSdkLibrary_CheckMinSdkVersion(t *testing.T) { 1198*333d2b36SAndroid Build Coastguard Worker preparer := android.GroupFixturePreparers( 1199*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaBuildComponents, 1200*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaDefaultModules, 1201*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1202*333d2b36SAndroid Build Coastguard Worker ) 1203*333d2b36SAndroid Build Coastguard Worker 1204*333d2b36SAndroid Build Coastguard Worker preparer.RunTestWithBp(t, ` 1205*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1206*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 1207*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1208*333d2b36SAndroid Build Coastguard Worker static_libs: ["util"], 1209*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 1210*333d2b36SAndroid Build Coastguard Worker unsafe_ignore_missing_latest_api: true, 1211*333d2b36SAndroid Build Coastguard Worker } 1212*333d2b36SAndroid Build Coastguard Worker 1213*333d2b36SAndroid Build Coastguard Worker java_library { 1214*333d2b36SAndroid Build Coastguard Worker name: "util", 1215*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1216*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 1217*333d2b36SAndroid Build Coastguard Worker } 1218*333d2b36SAndroid Build Coastguard Worker `) 1219*333d2b36SAndroid Build Coastguard Worker 1220*333d2b36SAndroid Build Coastguard Worker preparer. 1221*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 1222*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1223*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 1224*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1225*333d2b36SAndroid Build Coastguard Worker libs: ["util"], 1226*333d2b36SAndroid Build Coastguard Worker impl_only_libs: ["util"], 1227*333d2b36SAndroid Build Coastguard Worker stub_only_libs: ["util"], 1228*333d2b36SAndroid Build Coastguard Worker stub_only_static_libs: ["util"], 1229*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 1230*333d2b36SAndroid Build Coastguard Worker unsafe_ignore_missing_latest_api: true, 1231*333d2b36SAndroid Build Coastguard Worker } 1232*333d2b36SAndroid Build Coastguard Worker 1233*333d2b36SAndroid Build Coastguard Worker java_library { 1234*333d2b36SAndroid Build Coastguard Worker name: "util", 1235*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1236*333d2b36SAndroid Build Coastguard Worker } 1237*333d2b36SAndroid Build Coastguard Worker `) 1238*333d2b36SAndroid Build Coastguard Worker 1239*333d2b36SAndroid Build Coastguard Worker preparer.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "util".*should support min_sdk_version\(30\)`)). 1240*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 1241*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1242*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 1243*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1244*333d2b36SAndroid Build Coastguard Worker static_libs: ["util"], 1245*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 1246*333d2b36SAndroid Build Coastguard Worker unsafe_ignore_missing_latest_api: true, 1247*333d2b36SAndroid Build Coastguard Worker } 1248*333d2b36SAndroid Build Coastguard Worker 1249*333d2b36SAndroid Build Coastguard Worker java_library { 1250*333d2b36SAndroid Build Coastguard Worker name: "util", 1251*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1252*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "31", 1253*333d2b36SAndroid Build Coastguard Worker } 1254*333d2b36SAndroid Build Coastguard Worker `) 1255*333d2b36SAndroid Build Coastguard Worker 1256*333d2b36SAndroid Build Coastguard Worker preparer.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "another_util".*should support min_sdk_version\(30\)`)). 1257*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 1258*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1259*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 1260*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1261*333d2b36SAndroid Build Coastguard Worker static_libs: ["util"], 1262*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 1263*333d2b36SAndroid Build Coastguard Worker unsafe_ignore_missing_latest_api: true, 1264*333d2b36SAndroid Build Coastguard Worker } 1265*333d2b36SAndroid Build Coastguard Worker 1266*333d2b36SAndroid Build Coastguard Worker java_library { 1267*333d2b36SAndroid Build Coastguard Worker name: "util", 1268*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1269*333d2b36SAndroid Build Coastguard Worker static_libs: ["another_util"], 1270*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 1271*333d2b36SAndroid Build Coastguard Worker } 1272*333d2b36SAndroid Build Coastguard Worker 1273*333d2b36SAndroid Build Coastguard Worker java_library { 1274*333d2b36SAndroid Build Coastguard Worker name: "another_util", 1275*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1276*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "31", 1277*333d2b36SAndroid Build Coastguard Worker } 1278*333d2b36SAndroid Build Coastguard Worker `) 1279*333d2b36SAndroid Build Coastguard Worker} 1280*333d2b36SAndroid Build Coastguard Worker 1281*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_StubOnlyLibs_PassedToDroidstubs(t *testing.T) { 1282*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1283*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1284*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1285*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 1286*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1287*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1288*333d2b36SAndroid Build Coastguard Worker name: "foo", 1289*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1290*333d2b36SAndroid Build Coastguard Worker public: { 1291*333d2b36SAndroid Build Coastguard Worker enabled: true, 1292*333d2b36SAndroid Build Coastguard Worker }, 1293*333d2b36SAndroid Build Coastguard Worker stub_only_libs: ["bar-lib"], 1294*333d2b36SAndroid Build Coastguard Worker } 1295*333d2b36SAndroid Build Coastguard Worker 1296*333d2b36SAndroid Build Coastguard Worker java_library { 1297*333d2b36SAndroid Build Coastguard Worker name: "bar-lib", 1298*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1299*333d2b36SAndroid Build Coastguard Worker } 1300*333d2b36SAndroid Build Coastguard Worker `) 1301*333d2b36SAndroid Build Coastguard Worker 1302*333d2b36SAndroid Build Coastguard Worker // The foo.stubs.source should depend on bar-lib 1303*333d2b36SAndroid Build Coastguard Worker fooStubsSources := result.ModuleForTests("foo.stubs.source", "android_common").Module().(*Droidstubs) 1304*333d2b36SAndroid Build Coastguard Worker eval := fooStubsSources.ConfigurableEvaluator(android.PanickingConfigAndErrorContext(result.TestContext)) 1305*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "foo stubs should depend on bar-lib", fooStubsSources.Javadoc.properties.Libs.GetOrDefault(eval, nil), "bar-lib") 1306*333d2b36SAndroid Build Coastguard Worker} 1307*333d2b36SAndroid Build Coastguard Worker 1308*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_Scope_Libs_PassedToDroidstubs(t *testing.T) { 1309*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1310*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1311*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1312*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 1313*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1314*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1315*333d2b36SAndroid Build Coastguard Worker name: "foo", 1316*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1317*333d2b36SAndroid Build Coastguard Worker public: { 1318*333d2b36SAndroid Build Coastguard Worker enabled: true, 1319*333d2b36SAndroid Build Coastguard Worker libs: ["bar-lib"], 1320*333d2b36SAndroid Build Coastguard Worker }, 1321*333d2b36SAndroid Build Coastguard Worker } 1322*333d2b36SAndroid Build Coastguard Worker 1323*333d2b36SAndroid Build Coastguard Worker java_library { 1324*333d2b36SAndroid Build Coastguard Worker name: "bar-lib", 1325*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1326*333d2b36SAndroid Build Coastguard Worker } 1327*333d2b36SAndroid Build Coastguard Worker `) 1328*333d2b36SAndroid Build Coastguard Worker 1329*333d2b36SAndroid Build Coastguard Worker // The foo.stubs.source should depend on bar-lib 1330*333d2b36SAndroid Build Coastguard Worker fooStubsSources := result.ModuleForTests("foo.stubs.source", "android_common").Module().(*Droidstubs) 1331*333d2b36SAndroid Build Coastguard Worker eval := fooStubsSources.ConfigurableEvaluator(android.PanickingConfigAndErrorContext(result.TestContext)) 1332*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "foo stubs should depend on bar-lib", fooStubsSources.Javadoc.properties.Libs.GetOrDefault(eval, nil), "bar-lib") 1333*333d2b36SAndroid Build Coastguard Worker} 1334*333d2b36SAndroid Build Coastguard Worker 1335*333d2b36SAndroid Build Coastguard Workerfunc TestJavaSdkLibrary_ApiLibrary(t *testing.T) { 1336*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1337*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1338*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1339*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 1340*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1341*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1342*333d2b36SAndroid Build Coastguard Worker name: "foo", 1343*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 1344*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 1345*333d2b36SAndroid Build Coastguard Worker system: { 1346*333d2b36SAndroid Build Coastguard Worker enabled: true, 1347*333d2b36SAndroid Build Coastguard Worker }, 1348*333d2b36SAndroid Build Coastguard Worker module_lib: { 1349*333d2b36SAndroid Build Coastguard Worker enabled: true, 1350*333d2b36SAndroid Build Coastguard Worker }, 1351*333d2b36SAndroid Build Coastguard Worker test: { 1352*333d2b36SAndroid Build Coastguard Worker enabled: true, 1353*333d2b36SAndroid Build Coastguard Worker }, 1354*333d2b36SAndroid Build Coastguard Worker } 1355*333d2b36SAndroid Build Coastguard Worker `) 1356*333d2b36SAndroid Build Coastguard Worker 1357*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 1358*333d2b36SAndroid Build Coastguard Worker scope *apiScope 1359*333d2b36SAndroid Build Coastguard Worker apiContributions []string 1360*333d2b36SAndroid Build Coastguard Worker }{ 1361*333d2b36SAndroid Build Coastguard Worker { 1362*333d2b36SAndroid Build Coastguard Worker scope: apiScopePublic, 1363*333d2b36SAndroid Build Coastguard Worker apiContributions: []string{"foo.stubs.source.api.contribution"}, 1364*333d2b36SAndroid Build Coastguard Worker }, 1365*333d2b36SAndroid Build Coastguard Worker { 1366*333d2b36SAndroid Build Coastguard Worker scope: apiScopeSystem, 1367*333d2b36SAndroid Build Coastguard Worker apiContributions: []string{"foo.stubs.source.system.api.contribution", "foo.stubs.source.api.contribution"}, 1368*333d2b36SAndroid Build Coastguard Worker }, 1369*333d2b36SAndroid Build Coastguard Worker { 1370*333d2b36SAndroid Build Coastguard Worker scope: apiScopeTest, 1371*333d2b36SAndroid Build Coastguard Worker apiContributions: []string{"foo.stubs.source.test.api.contribution", "foo.stubs.source.system.api.contribution", "foo.stubs.source.api.contribution"}, 1372*333d2b36SAndroid Build Coastguard Worker }, 1373*333d2b36SAndroid Build Coastguard Worker { 1374*333d2b36SAndroid Build Coastguard Worker scope: apiScopeModuleLib, 1375*333d2b36SAndroid Build Coastguard Worker apiContributions: []string{"foo.stubs.source.module_lib.api.contribution", "foo.stubs.source.system.api.contribution", "foo.stubs.source.api.contribution"}, 1376*333d2b36SAndroid Build Coastguard Worker }, 1377*333d2b36SAndroid Build Coastguard Worker } 1378*333d2b36SAndroid Build Coastguard Worker 1379*333d2b36SAndroid Build Coastguard Worker for _, c := range testCases { 1380*333d2b36SAndroid Build Coastguard Worker m := result.ModuleForTests(c.scope.apiLibraryModuleName("foo"), "android_common").Module().(*ApiLibrary) 1381*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "Module expected to contain api contributions", c.apiContributions, m.properties.Api_contributions) 1382*333d2b36SAndroid Build Coastguard Worker } 1383*333d2b36SAndroid Build Coastguard Worker} 1384*333d2b36SAndroid Build Coastguard Worker 1385*333d2b36SAndroid Build Coastguard Workerfunc TestStaticDepStubLibrariesVisibility(t *testing.T) { 1386*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 1387*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1388*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1389*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 1390*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs( 1391*333d2b36SAndroid Build Coastguard Worker map[string][]byte{ 1392*333d2b36SAndroid Build Coastguard Worker "A.java": nil, 1393*333d2b36SAndroid Build Coastguard Worker "dir/Android.bp": []byte( 1394*333d2b36SAndroid Build Coastguard Worker ` 1395*333d2b36SAndroid Build Coastguard Worker java_library { 1396*333d2b36SAndroid Build Coastguard Worker name: "bar", 1397*333d2b36SAndroid Build Coastguard Worker srcs: ["A.java"], 1398*333d2b36SAndroid Build Coastguard Worker libs: ["foo.stubs.from-source"], 1399*333d2b36SAndroid Build Coastguard Worker } 1400*333d2b36SAndroid Build Coastguard Worker `), 1401*333d2b36SAndroid Build Coastguard Worker "dir/A.java": nil, 1402*333d2b36SAndroid Build Coastguard Worker }, 1403*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler( 1404*333d2b36SAndroid Build Coastguard Worker android.FixtureExpectsAtLeastOneErrorMatchingPattern( 1405*333d2b36SAndroid Build Coastguard Worker `module "bar" variant "android_common": depends on //.:foo.stubs.from-source which is not visible to this module`)), 1406*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1407*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1408*333d2b36SAndroid Build Coastguard Worker name: "foo", 1409*333d2b36SAndroid Build Coastguard Worker srcs: ["A.java"], 1410*333d2b36SAndroid Build Coastguard Worker } 1411*333d2b36SAndroid Build Coastguard Worker `) 1412*333d2b36SAndroid Build Coastguard Worker} 1413*333d2b36SAndroid Build Coastguard Worker 1414*333d2b36SAndroid Build Coastguard Workerfunc TestSdkLibraryDependency(t *testing.T) { 1415*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1416*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1417*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1418*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 1419*333d2b36SAndroid Build Coastguard Worker "30": {"bar", "foo"}, 1420*333d2b36SAndroid Build Coastguard Worker }), 1421*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, 1422*333d2b36SAndroid Build Coastguard Worker ` 1423*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1424*333d2b36SAndroid Build Coastguard Worker name: "foo", 1425*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 1426*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 1427*333d2b36SAndroid Build Coastguard Worker } 1428*333d2b36SAndroid Build Coastguard Worker 1429*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1430*333d2b36SAndroid Build Coastguard Worker name: "bar", 1431*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java", "b.java"], 1432*333d2b36SAndroid Build Coastguard Worker libs: [ 1433*333d2b36SAndroid Build Coastguard Worker "foo.stubs", 1434*333d2b36SAndroid Build Coastguard Worker ], 1435*333d2b36SAndroid Build Coastguard Worker uses_libs: [ 1436*333d2b36SAndroid Build Coastguard Worker "foo", 1437*333d2b36SAndroid Build Coastguard Worker ], 1438*333d2b36SAndroid Build Coastguard Worker } 1439*333d2b36SAndroid Build Coastguard Worker`) 1440*333d2b36SAndroid Build Coastguard Worker 1441*333d2b36SAndroid Build Coastguard Worker barPermissions := result.ModuleForTests("bar.xml", "android_common").Output("bar.xml") 1442*333d2b36SAndroid Build Coastguard Worker barContents := android.ContentFromFileRuleForTests(t, result.TestContext, barPermissions) 1443*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "bar.xml java_sdk_xml command", barContents, `dependency="foo"`) 1444*333d2b36SAndroid Build Coastguard Worker} 1445*333d2b36SAndroid Build Coastguard Worker 1446*333d2b36SAndroid Build Coastguard Workerfunc TestSdkLibraryExportableStubsLibrary(t *testing.T) { 1447*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1448*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1449*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1450*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 1451*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1452*333d2b36SAndroid Build Coastguard Worker aconfig_declarations { 1453*333d2b36SAndroid Build Coastguard Worker name: "bar", 1454*333d2b36SAndroid Build Coastguard Worker package: "com.example.package", 1455*333d2b36SAndroid Build Coastguard Worker container: "com.android.foo", 1456*333d2b36SAndroid Build Coastguard Worker srcs: [ 1457*333d2b36SAndroid Build Coastguard Worker "bar.aconfig", 1458*333d2b36SAndroid Build Coastguard Worker ], 1459*333d2b36SAndroid Build Coastguard Worker } 1460*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1461*333d2b36SAndroid Build Coastguard Worker name: "foo", 1462*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.java"], 1463*333d2b36SAndroid Build Coastguard Worker api_packages: ["foo"], 1464*333d2b36SAndroid Build Coastguard Worker system: { 1465*333d2b36SAndroid Build Coastguard Worker enabled: true, 1466*333d2b36SAndroid Build Coastguard Worker }, 1467*333d2b36SAndroid Build Coastguard Worker module_lib: { 1468*333d2b36SAndroid Build Coastguard Worker enabled: true, 1469*333d2b36SAndroid Build Coastguard Worker }, 1470*333d2b36SAndroid Build Coastguard Worker test: { 1471*333d2b36SAndroid Build Coastguard Worker enabled: true, 1472*333d2b36SAndroid Build Coastguard Worker }, 1473*333d2b36SAndroid Build Coastguard Worker aconfig_declarations: [ 1474*333d2b36SAndroid Build Coastguard Worker "bar", 1475*333d2b36SAndroid Build Coastguard Worker ], 1476*333d2b36SAndroid Build Coastguard Worker } 1477*333d2b36SAndroid Build Coastguard Worker `) 1478*333d2b36SAndroid Build Coastguard Worker 1479*333d2b36SAndroid Build Coastguard Worker exportableStubsLibraryModuleName := apiScopePublic.exportableStubsLibraryModuleName("foo") 1480*333d2b36SAndroid Build Coastguard Worker exportableSourceStubsLibraryModuleName := apiScopePublic.exportableSourceStubsLibraryModuleName("foo") 1481*333d2b36SAndroid Build Coastguard Worker 1482*333d2b36SAndroid Build Coastguard Worker // Check modules generation 1483*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(exportableStubsLibraryModuleName, "android_common") 1484*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests(exportableSourceStubsLibraryModuleName, "android_common") 1485*333d2b36SAndroid Build Coastguard Worker 1486*333d2b36SAndroid Build Coastguard Worker // Check static lib dependency 1487*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals(t, "exportable top level stubs library module depends on the"+ 1488*333d2b36SAndroid Build Coastguard Worker "exportable source stubs library module", true, 1489*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependencyWithTag(t, result.TestContext, exportableStubsLibraryModuleName, 1490*333d2b36SAndroid Build Coastguard Worker "android_common", staticLibTag, exportableSourceStubsLibraryModuleName), 1491*333d2b36SAndroid Build Coastguard Worker ) 1492*333d2b36SAndroid Build Coastguard Worker} 1493*333d2b36SAndroid Build Coastguard Worker 1494*333d2b36SAndroid Build Coastguard Worker// For java libraries depending on java_sdk_library(_import) via libs, assert that 1495*333d2b36SAndroid Build Coastguard Worker// rdep gets stubs of source if source is listed in apex_contributions and prebuilt has prefer (legacy mechanism) 1496*333d2b36SAndroid Build Coastguard Workerfunc TestStubResolutionOfJavaSdkLibraryInLibs(t *testing.T) { 1497*333d2b36SAndroid Build Coastguard Worker bp := ` 1498*333d2b36SAndroid Build Coastguard Worker apex_contributions { 1499*333d2b36SAndroid Build Coastguard Worker name: "my_mainline_module_contributions", 1500*333d2b36SAndroid Build Coastguard Worker api_domain: "my_mainline_module", 1501*333d2b36SAndroid Build Coastguard Worker contents: ["sdklib"], // source is selected using apex_contributions, but prebuilt is selected using prefer 1502*333d2b36SAndroid Build Coastguard Worker } 1503*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1504*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 1505*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1506*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 1507*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 1508*333d2b36SAndroid Build Coastguard Worker public: { 1509*333d2b36SAndroid Build Coastguard Worker enabled: true, 1510*333d2b36SAndroid Build Coastguard Worker }, 1511*333d2b36SAndroid Build Coastguard Worker } 1512*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 1513*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 1514*333d2b36SAndroid Build Coastguard Worker public: { 1515*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1516*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1517*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1518*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1519*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1520*333d2b36SAndroid Build Coastguard Worker }, 1521*333d2b36SAndroid Build Coastguard Worker prefer: true, // Set prefer explicitly on the prebuilt. We will assert that rdep gets source in a test case. 1522*333d2b36SAndroid Build Coastguard Worker } 1523*333d2b36SAndroid Build Coastguard Worker // rdeps 1524*333d2b36SAndroid Build Coastguard Worker java_library { 1525*333d2b36SAndroid Build Coastguard Worker name: "mymodule", 1526*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1527*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 1528*333d2b36SAndroid Build Coastguard Worker libs: ["sdklib.stubs",], // this should be dynamically resolved to sdklib.stubs (source) or prebuilt_sdklib.stubs (prebuilt) 1529*333d2b36SAndroid Build Coastguard Worker } 1530*333d2b36SAndroid Build Coastguard Worker ` 1531*333d2b36SAndroid Build Coastguard Worker 1532*333d2b36SAndroid Build Coastguard Worker fixture := android.GroupFixturePreparers( 1533*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1534*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1535*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("sdklib"), 1536*333d2b36SAndroid Build Coastguard Worker // We can use any of the apex contribution build flags from build/soong/android/config.go#mainlineApexContributionBuildFlags here 1537*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ADSERVICES", "my_mainline_module_contributions"), 1538*333d2b36SAndroid Build Coastguard Worker ) 1539*333d2b36SAndroid Build Coastguard Worker 1540*333d2b36SAndroid Build Coastguard Worker result := fixture.RunTestWithBp(t, bp) 1541*333d2b36SAndroid Build Coastguard Worker // Make sure that rdeps get the correct source vs prebuilt based on mainline_module_contributions 1542*333d2b36SAndroid Build Coastguard Worker public := result.ModuleForTests("mymodule", "android_common") 1543*333d2b36SAndroid Build Coastguard Worker rule := public.Output("javac/mymodule.jar") 1544*333d2b36SAndroid Build Coastguard Worker inputs := rule.Implicits.Strings() 1545*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "Could not find the expected stub on classpath", inputs, "out/soong/.intermediates/sdklib.stubs/android_common/turbine-combined/sdklib.stubs.jar") 1546*333d2b36SAndroid Build Coastguard Worker} 1547*333d2b36SAndroid Build Coastguard Worker 1548*333d2b36SAndroid Build Coastguard Worker// test that rdep gets resolved to the correct version of a java_sdk_library (source or a specific prebuilt) 1549*333d2b36SAndroid Build Coastguard Workerfunc TestMultipleSdkLibraryPrebuilts(t *testing.T) { 1550*333d2b36SAndroid Build Coastguard Worker bp := ` 1551*333d2b36SAndroid Build Coastguard Worker apex_contributions { 1552*333d2b36SAndroid Build Coastguard Worker name: "my_mainline_module_contributions", 1553*333d2b36SAndroid Build Coastguard Worker api_domain: "my_mainline_module", 1554*333d2b36SAndroid Build Coastguard Worker contents: ["%s"], 1555*333d2b36SAndroid Build Coastguard Worker } 1556*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1557*333d2b36SAndroid Build Coastguard Worker name: "sdklib", 1558*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1559*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 1560*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 1561*333d2b36SAndroid Build Coastguard Worker public: { 1562*333d2b36SAndroid Build Coastguard Worker enabled: true, 1563*333d2b36SAndroid Build Coastguard Worker }, 1564*333d2b36SAndroid Build Coastguard Worker } 1565*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 1566*333d2b36SAndroid Build Coastguard Worker name: "sdklib.v1", //prebuilt 1567*333d2b36SAndroid Build Coastguard Worker source_module_name: "sdklib", 1568*333d2b36SAndroid Build Coastguard Worker public: { 1569*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1570*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1571*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1572*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1573*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1574*333d2b36SAndroid Build Coastguard Worker }, 1575*333d2b36SAndroid Build Coastguard Worker } 1576*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 1577*333d2b36SAndroid Build Coastguard Worker name: "sdklib.v2", //prebuilt 1578*333d2b36SAndroid Build Coastguard Worker source_module_name: "sdklib", 1579*333d2b36SAndroid Build Coastguard Worker public: { 1580*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1581*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1582*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1583*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1584*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1585*333d2b36SAndroid Build Coastguard Worker }, 1586*333d2b36SAndroid Build Coastguard Worker } 1587*333d2b36SAndroid Build Coastguard Worker // rdeps 1588*333d2b36SAndroid Build Coastguard Worker java_library { 1589*333d2b36SAndroid Build Coastguard Worker name: "mymodule", 1590*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1591*333d2b36SAndroid Build Coastguard Worker libs: ["sdklib.stubs",], 1592*333d2b36SAndroid Build Coastguard Worker } 1593*333d2b36SAndroid Build Coastguard Worker ` 1594*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 1595*333d2b36SAndroid Build Coastguard Worker desc string 1596*333d2b36SAndroid Build Coastguard Worker selectedDependencyName string 1597*333d2b36SAndroid Build Coastguard Worker expectedStubPath string 1598*333d2b36SAndroid Build Coastguard Worker }{ 1599*333d2b36SAndroid Build Coastguard Worker { 1600*333d2b36SAndroid Build Coastguard Worker desc: "Source library is selected using apex_contributions", 1601*333d2b36SAndroid Build Coastguard Worker selectedDependencyName: "sdklib", 1602*333d2b36SAndroid Build Coastguard Worker expectedStubPath: "out/soong/.intermediates/sdklib.stubs/android_common/turbine-combined/sdklib.stubs.jar", 1603*333d2b36SAndroid Build Coastguard Worker }, 1604*333d2b36SAndroid Build Coastguard Worker { 1605*333d2b36SAndroid Build Coastguard Worker desc: "Prebuilt library v1 is selected using apex_contributions", 1606*333d2b36SAndroid Build Coastguard Worker selectedDependencyName: "prebuilt_sdklib.v1", 1607*333d2b36SAndroid Build Coastguard Worker expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v1.stubs/android_common/combined/sdklib.stubs.jar", 1608*333d2b36SAndroid Build Coastguard Worker }, 1609*333d2b36SAndroid Build Coastguard Worker { 1610*333d2b36SAndroid Build Coastguard Worker desc: "Prebuilt library v2 is selected using apex_contributions", 1611*333d2b36SAndroid Build Coastguard Worker selectedDependencyName: "prebuilt_sdklib.v2", 1612*333d2b36SAndroid Build Coastguard Worker expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v2.stubs/android_common/combined/sdklib.stubs.jar", 1613*333d2b36SAndroid Build Coastguard Worker }, 1614*333d2b36SAndroid Build Coastguard Worker } 1615*333d2b36SAndroid Build Coastguard Worker 1616*333d2b36SAndroid Build Coastguard Worker fixture := android.GroupFixturePreparers( 1617*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1618*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1619*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("sdklib", "sdklib.v1", "sdklib.v2"), 1620*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ADSERVICES", "my_mainline_module_contributions"), 1621*333d2b36SAndroid Build Coastguard Worker ) 1622*333d2b36SAndroid Build Coastguard Worker 1623*333d2b36SAndroid Build Coastguard Worker for _, tc := range testCases { 1624*333d2b36SAndroid Build Coastguard Worker result := fixture.RunTestWithBp(t, fmt.Sprintf(bp, tc.selectedDependencyName)) 1625*333d2b36SAndroid Build Coastguard Worker 1626*333d2b36SAndroid Build Coastguard Worker // Make sure that rdeps get the correct source vs prebuilt based on mainline_module_contributions 1627*333d2b36SAndroid Build Coastguard Worker public := result.ModuleForTests("mymodule", "android_common") 1628*333d2b36SAndroid Build Coastguard Worker rule := public.Output("javac/mymodule.jar") 1629*333d2b36SAndroid Build Coastguard Worker inputs := rule.Implicits.Strings() 1630*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "Could not find the expected stub on classpath", inputs, tc.expectedStubPath) 1631*333d2b36SAndroid Build Coastguard Worker } 1632*333d2b36SAndroid Build Coastguard Worker} 1633*333d2b36SAndroid Build Coastguard Worker 1634*333d2b36SAndroid Build Coastguard Workerfunc TestStubLinkType(t *testing.T) { 1635*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 1636*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1637*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1638*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo"), 1639*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern( 1640*333d2b36SAndroid Build Coastguard Worker `module "baz" variant "android_common": compiles against system API, but dependency `+ 1641*333d2b36SAndroid Build Coastguard Worker `"bar.stubs.system" is compiling against module API. In order to fix this, `+ 1642*333d2b36SAndroid Build Coastguard Worker `consider adjusting sdk_version: OR platform_apis: property of the source or `+ 1643*333d2b36SAndroid Build Coastguard Worker `target module so that target module is built with the same or smaller API set `+ 1644*333d2b36SAndroid Build Coastguard Worker `when compared to the source.`), 1645*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1646*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1647*333d2b36SAndroid Build Coastguard Worker name: "foo", 1648*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1649*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 1650*333d2b36SAndroid Build Coastguard Worker } 1651*333d2b36SAndroid Build Coastguard Worker java_library { 1652*333d2b36SAndroid Build Coastguard Worker name: "bar.stubs.system", 1653*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1654*333d2b36SAndroid Build Coastguard Worker sdk_version: "module_current", 1655*333d2b36SAndroid Build Coastguard Worker is_stubs_module: false, 1656*333d2b36SAndroid Build Coastguard Worker } 1657*333d2b36SAndroid Build Coastguard Worker 1658*333d2b36SAndroid Build Coastguard Worker java_library { 1659*333d2b36SAndroid Build Coastguard Worker name: "baz", 1660*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1661*333d2b36SAndroid Build Coastguard Worker libs: [ 1662*333d2b36SAndroid Build Coastguard Worker "foo.stubs.system", 1663*333d2b36SAndroid Build Coastguard Worker "bar.stubs.system", 1664*333d2b36SAndroid Build Coastguard Worker ], 1665*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_current", 1666*333d2b36SAndroid Build Coastguard Worker } 1667*333d2b36SAndroid Build Coastguard Worker `) 1668*333d2b36SAndroid Build Coastguard Worker} 1669*333d2b36SAndroid Build Coastguard Worker 1670*333d2b36SAndroid Build Coastguard Workerfunc TestSdkLibDirectDependency(t *testing.T) { 1671*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 1672*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1673*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1674*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("foo", "bar"), 1675*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern([]string{ 1676*333d2b36SAndroid Build Coastguard Worker `module "baz" variant "android_common": cannot depend directly on java_sdk_library ` + 1677*333d2b36SAndroid Build Coastguard Worker `"foo"; try depending on "foo.stubs", or "foo.impl" instead`, 1678*333d2b36SAndroid Build Coastguard Worker `module "baz" variant "android_common": cannot depend directly on java_sdk_library ` + 1679*333d2b36SAndroid Build Coastguard Worker `"prebuilt_bar"; try depending on "bar.stubs", or "bar.impl" instead`, 1680*333d2b36SAndroid Build Coastguard Worker }), 1681*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1682*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1683*333d2b36SAndroid Build Coastguard Worker name: "foo", 1684*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1685*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 1686*333d2b36SAndroid Build Coastguard Worker public: { 1687*333d2b36SAndroid Build Coastguard Worker enabled: true, 1688*333d2b36SAndroid Build Coastguard Worker }, 1689*333d2b36SAndroid Build Coastguard Worker } 1690*333d2b36SAndroid Build Coastguard Worker 1691*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 1692*333d2b36SAndroid Build Coastguard Worker name: "foo", 1693*333d2b36SAndroid Build Coastguard Worker public: { 1694*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1695*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1696*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1697*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1698*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1699*333d2b36SAndroid Build Coastguard Worker }, 1700*333d2b36SAndroid Build Coastguard Worker } 1701*333d2b36SAndroid Build Coastguard Worker 1702*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1703*333d2b36SAndroid Build Coastguard Worker name: "bar", 1704*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1705*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 1706*333d2b36SAndroid Build Coastguard Worker public: { 1707*333d2b36SAndroid Build Coastguard Worker enabled: true, 1708*333d2b36SAndroid Build Coastguard Worker }, 1709*333d2b36SAndroid Build Coastguard Worker } 1710*333d2b36SAndroid Build Coastguard Worker 1711*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 1712*333d2b36SAndroid Build Coastguard Worker name: "bar", 1713*333d2b36SAndroid Build Coastguard Worker prefer: true, 1714*333d2b36SAndroid Build Coastguard Worker public: { 1715*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 1716*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["a.java"], 1717*333d2b36SAndroid Build Coastguard Worker current_api: "current.txt", 1718*333d2b36SAndroid Build Coastguard Worker removed_api: "removed.txt", 1719*333d2b36SAndroid Build Coastguard Worker annotations: "annotations.zip", 1720*333d2b36SAndroid Build Coastguard Worker }, 1721*333d2b36SAndroid Build Coastguard Worker } 1722*333d2b36SAndroid Build Coastguard Worker 1723*333d2b36SAndroid Build Coastguard Worker java_library { 1724*333d2b36SAndroid Build Coastguard Worker name: "baz", 1725*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1726*333d2b36SAndroid Build Coastguard Worker libs: [ 1727*333d2b36SAndroid Build Coastguard Worker "foo", 1728*333d2b36SAndroid Build Coastguard Worker "bar", 1729*333d2b36SAndroid Build Coastguard Worker ], 1730*333d2b36SAndroid Build Coastguard Worker } 1731*333d2b36SAndroid Build Coastguard Worker `) 1732*333d2b36SAndroid Build Coastguard Worker} 1733*333d2b36SAndroid Build Coastguard Worker 1734*333d2b36SAndroid Build Coastguard Workerfunc TestSdkLibDirectDependencyWithPrebuiltSdk(t *testing.T) { 1735*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 1736*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 1737*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 1738*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 1739*333d2b36SAndroid Build Coastguard Worker variables.Platform_sdk_version = intPtr(34) 1740*333d2b36SAndroid Build Coastguard Worker variables.Platform_sdk_codename = stringPtr("VanillaIceCream") 1741*333d2b36SAndroid Build Coastguard Worker variables.Platform_version_active_codenames = []string{"VanillaIceCream"} 1742*333d2b36SAndroid Build Coastguard Worker variables.Platform_systemsdk_versions = []string{"33", "34", "VanillaIceCream"} 1743*333d2b36SAndroid Build Coastguard Worker variables.DeviceSystemSdkVersions = []string{"VanillaIceCream"} 1744*333d2b36SAndroid Build Coastguard Worker }), 1745*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 1746*333d2b36SAndroid Build Coastguard Worker "33": {"foo"}, 1747*333d2b36SAndroid Build Coastguard Worker "34": {"foo"}, 1748*333d2b36SAndroid Build Coastguard Worker "35": {"foo"}, 1749*333d2b36SAndroid Build Coastguard Worker }), 1750*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern( 1751*333d2b36SAndroid Build Coastguard Worker `module "baz" variant "android_common": cannot depend directly on java_sdk_library "foo"; `+ 1752*333d2b36SAndroid Build Coastguard Worker `try depending on "sdk_public_33_foo", "sdk_system_33_foo", "sdk_test_33_foo", `+ 1753*333d2b36SAndroid Build Coastguard Worker `"sdk_module-lib_33_foo", or "sdk_system-server_33_foo" instead`), 1754*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1755*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1756*333d2b36SAndroid Build Coastguard Worker name: "foo", 1757*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 1758*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 1759*333d2b36SAndroid Build Coastguard Worker public: { 1760*333d2b36SAndroid Build Coastguard Worker enabled: true, 1761*333d2b36SAndroid Build Coastguard Worker }, 1762*333d2b36SAndroid Build Coastguard Worker system: { 1763*333d2b36SAndroid Build Coastguard Worker enabled: true, 1764*333d2b36SAndroid Build Coastguard Worker }, 1765*333d2b36SAndroid Build Coastguard Worker } 1766*333d2b36SAndroid Build Coastguard Worker 1767*333d2b36SAndroid Build Coastguard Worker java_library { 1768*333d2b36SAndroid Build Coastguard Worker name: "baz", 1769*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1770*333d2b36SAndroid Build Coastguard Worker libs: [ 1771*333d2b36SAndroid Build Coastguard Worker "foo", 1772*333d2b36SAndroid Build Coastguard Worker ], 1773*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_33", 1774*333d2b36SAndroid Build Coastguard Worker } 1775*333d2b36SAndroid Build Coastguard Worker `) 1776*333d2b36SAndroid Build Coastguard Worker} 1777