1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2021 The Android Open Source Project 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 "testing" 19*333d2b36SAndroid Build Coastguard Worker 20*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 21*333d2b36SAndroid Build Coastguard Worker) 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Worker// Contains some simple tests for platform_bootclasspath. 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithPlatformBootclasspath = android.GroupFixturePreparers( 26*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaDefaultModules, 27*333d2b36SAndroid Build Coastguard Worker) 28*333d2b36SAndroid Build Coastguard Worker 29*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath(t *testing.T) { 30*333d2b36SAndroid Build Coastguard Worker preparer := android.GroupFixturePreparers( 31*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 32*333d2b36SAndroid Build Coastguard Worker FixtureConfigureBootJars("platform:foo", "system_ext:bar"), 33*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 34*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 35*333d2b36SAndroid Build Coastguard Worker name: "platform-bootclasspath", 36*333d2b36SAndroid Build Coastguard Worker } 37*333d2b36SAndroid Build Coastguard Worker 38*333d2b36SAndroid Build Coastguard Worker java_library { 39*333d2b36SAndroid Build Coastguard Worker name: "bar", 40*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 41*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 42*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 43*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 44*333d2b36SAndroid Build Coastguard Worker system_ext_specific: true, 45*333d2b36SAndroid Build Coastguard Worker } 46*333d2b36SAndroid Build Coastguard Worker `), 47*333d2b36SAndroid Build Coastguard Worker ) 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Worker var addSourceBootclassPathModule = android.FixtureAddTextFile("source/Android.bp", ` 50*333d2b36SAndroid Build Coastguard Worker java_library { 51*333d2b36SAndroid Build Coastguard Worker name: "foo", 52*333d2b36SAndroid Build Coastguard Worker host_supported: true, // verify that b/232106778 is fixed 53*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 54*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 55*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 56*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 57*333d2b36SAndroid Build Coastguard Worker } 58*333d2b36SAndroid Build Coastguard Worker `) 59*333d2b36SAndroid Build Coastguard Worker 60*333d2b36SAndroid Build Coastguard Worker var addPrebuiltBootclassPathModule = android.FixtureAddTextFile("prebuilt/Android.bp", ` 61*333d2b36SAndroid Build Coastguard Worker java_import { 62*333d2b36SAndroid Build Coastguard Worker name: "foo", 63*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 64*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 65*333d2b36SAndroid Build Coastguard Worker prefer: false, 66*333d2b36SAndroid Build Coastguard Worker } 67*333d2b36SAndroid Build Coastguard Worker `) 68*333d2b36SAndroid Build Coastguard Worker 69*333d2b36SAndroid Build Coastguard Worker var addPrebuiltPreferredBootclassPathModule = android.FixtureAddTextFile("prebuilt/Android.bp", ` 70*333d2b36SAndroid Build Coastguard Worker java_import { 71*333d2b36SAndroid Build Coastguard Worker name: "foo", 72*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 73*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 74*333d2b36SAndroid Build Coastguard Worker prefer: true, 75*333d2b36SAndroid Build Coastguard Worker } 76*333d2b36SAndroid Build Coastguard Worker `) 77*333d2b36SAndroid Build Coastguard Worker 78*333d2b36SAndroid Build Coastguard Worker t.Run("missing", func(t *testing.T) { 79*333d2b36SAndroid Build Coastguard Worker preparer. 80*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`"platform-bootclasspath" depends on undefined module "foo"`)). 81*333d2b36SAndroid Build Coastguard Worker RunTest(t) 82*333d2b36SAndroid Build Coastguard Worker }) 83*333d2b36SAndroid Build Coastguard Worker 84*333d2b36SAndroid Build Coastguard Worker fooSourceSrc := "source/a.java" 85*333d2b36SAndroid Build Coastguard Worker barSrc := "a.java" 86*333d2b36SAndroid Build Coastguard Worker 87*333d2b36SAndroid Build Coastguard Worker checkSrcJarInputs := func(t *testing.T, result *android.TestResult, name string, expected []string) { 88*333d2b36SAndroid Build Coastguard Worker t.Helper() 89*333d2b36SAndroid Build Coastguard Worker srcjar := result.ModuleForTests(name, "android_common").Output(name + "-transitive.srcjar") 90*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "srcjar arg", srcjar.Args["jarArgs"], "-srcjar") 91*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "srcjar inputs", expected, srcjar.Implicits.Strings()) 92*333d2b36SAndroid Build Coastguard Worker } 93*333d2b36SAndroid Build Coastguard Worker t.Run("source", func(t *testing.T) { 94*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 95*333d2b36SAndroid Build Coastguard Worker preparer, 96*333d2b36SAndroid Build Coastguard Worker addSourceBootclassPathModule, 97*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 98*333d2b36SAndroid Build Coastguard Worker 99*333d2b36SAndroid Build Coastguard Worker CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{ 100*333d2b36SAndroid Build Coastguard Worker "platform:foo", 101*333d2b36SAndroid Build Coastguard Worker "platform:bar", 102*333d2b36SAndroid Build Coastguard Worker }) 103*333d2b36SAndroid Build Coastguard Worker checkSrcJarInputs(t, result, "platform-bootclasspath", []string{ 104*333d2b36SAndroid Build Coastguard Worker fooSourceSrc, 105*333d2b36SAndroid Build Coastguard Worker barSrc, 106*333d2b36SAndroid Build Coastguard Worker }) 107*333d2b36SAndroid Build Coastguard Worker }) 108*333d2b36SAndroid Build Coastguard Worker 109*333d2b36SAndroid Build Coastguard Worker t.Run("prebuilt", func(t *testing.T) { 110*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 111*333d2b36SAndroid Build Coastguard Worker preparer, 112*333d2b36SAndroid Build Coastguard Worker addPrebuiltBootclassPathModule, 113*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 114*333d2b36SAndroid Build Coastguard Worker 115*333d2b36SAndroid Build Coastguard Worker CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{ 116*333d2b36SAndroid Build Coastguard Worker "platform:prebuilt_foo", 117*333d2b36SAndroid Build Coastguard Worker "platform:bar", 118*333d2b36SAndroid Build Coastguard Worker }) 119*333d2b36SAndroid Build Coastguard Worker checkSrcJarInputs(t, result, "platform-bootclasspath", []string{ 120*333d2b36SAndroid Build Coastguard Worker // TODO(b/151360309): This should also have the srcs for prebuilt_foo 121*333d2b36SAndroid Build Coastguard Worker barSrc, 122*333d2b36SAndroid Build Coastguard Worker }) 123*333d2b36SAndroid Build Coastguard Worker }) 124*333d2b36SAndroid Build Coastguard Worker 125*333d2b36SAndroid Build Coastguard Worker t.Run("source+prebuilt - source preferred", func(t *testing.T) { 126*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 127*333d2b36SAndroid Build Coastguard Worker preparer, 128*333d2b36SAndroid Build Coastguard Worker addSourceBootclassPathModule, 129*333d2b36SAndroid Build Coastguard Worker addPrebuiltBootclassPathModule, 130*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 131*333d2b36SAndroid Build Coastguard Worker 132*333d2b36SAndroid Build Coastguard Worker CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{ 133*333d2b36SAndroid Build Coastguard Worker "platform:foo", 134*333d2b36SAndroid Build Coastguard Worker "platform:bar", 135*333d2b36SAndroid Build Coastguard Worker }) 136*333d2b36SAndroid Build Coastguard Worker checkSrcJarInputs(t, result, "platform-bootclasspath", []string{ 137*333d2b36SAndroid Build Coastguard Worker fooSourceSrc, 138*333d2b36SAndroid Build Coastguard Worker barSrc, 139*333d2b36SAndroid Build Coastguard Worker }) 140*333d2b36SAndroid Build Coastguard Worker }) 141*333d2b36SAndroid Build Coastguard Worker 142*333d2b36SAndroid Build Coastguard Worker t.Run("source+prebuilt - prebuilt preferred", func(t *testing.T) { 143*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 144*333d2b36SAndroid Build Coastguard Worker preparer, 145*333d2b36SAndroid Build Coastguard Worker addSourceBootclassPathModule, 146*333d2b36SAndroid Build Coastguard Worker addPrebuiltPreferredBootclassPathModule, 147*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 148*333d2b36SAndroid Build Coastguard Worker 149*333d2b36SAndroid Build Coastguard Worker CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{ 150*333d2b36SAndroid Build Coastguard Worker "platform:prebuilt_foo", 151*333d2b36SAndroid Build Coastguard Worker "platform:bar", 152*333d2b36SAndroid Build Coastguard Worker }) 153*333d2b36SAndroid Build Coastguard Worker checkSrcJarInputs(t, result, "platform-bootclasspath", []string{ 154*333d2b36SAndroid Build Coastguard Worker // TODO(b/151360309): This should also have the srcs for prebuilt_foo 155*333d2b36SAndroid Build Coastguard Worker barSrc, 156*333d2b36SAndroid Build Coastguard Worker }) 157*333d2b36SAndroid Build Coastguard Worker }) 158*333d2b36SAndroid Build Coastguard Worker 159*333d2b36SAndroid Build Coastguard Worker t.Run("dex import", func(t *testing.T) { 160*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 161*333d2b36SAndroid Build Coastguard Worker preparer, 162*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("deximport/Android.bp", ` 163*333d2b36SAndroid Build Coastguard Worker dex_import { 164*333d2b36SAndroid Build Coastguard Worker name: "foo", 165*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 166*333d2b36SAndroid Build Coastguard Worker } 167*333d2b36SAndroid Build Coastguard Worker `), 168*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 169*333d2b36SAndroid Build Coastguard Worker 170*333d2b36SAndroid Build Coastguard Worker CheckPlatformBootclasspathModules(t, result, "platform-bootclasspath", []string{ 171*333d2b36SAndroid Build Coastguard Worker "platform:prebuilt_foo", 172*333d2b36SAndroid Build Coastguard Worker "platform:bar", 173*333d2b36SAndroid Build Coastguard Worker }) 174*333d2b36SAndroid Build Coastguard Worker checkSrcJarInputs(t, result, "platform-bootclasspath", []string{ 175*333d2b36SAndroid Build Coastguard Worker // TODO(b/151360309): This should also have the srcs for prebuilt_foo 176*333d2b36SAndroid Build Coastguard Worker barSrc, 177*333d2b36SAndroid Build Coastguard Worker }) 178*333d2b36SAndroid Build Coastguard Worker }) 179*333d2b36SAndroid Build Coastguard Worker} 180*333d2b36SAndroid Build Coastguard Worker 181*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspathVariant(t *testing.T) { 182*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 183*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 184*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 185*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 186*333d2b36SAndroid Build Coastguard Worker name: "platform-bootclasspath", 187*333d2b36SAndroid Build Coastguard Worker } 188*333d2b36SAndroid Build Coastguard Worker `), 189*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 190*333d2b36SAndroid Build Coastguard Worker 191*333d2b36SAndroid Build Coastguard Worker variants := result.ModuleVariantsForTests("platform-bootclasspath") 192*333d2b36SAndroid Build Coastguard Worker android.AssertIntEquals(t, "expect 1 variant", 1, len(variants)) 193*333d2b36SAndroid Build Coastguard Worker} 194*333d2b36SAndroid Build Coastguard Worker 195*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath_ClasspathFragmentPaths(t *testing.T) { 196*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 197*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 198*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 199*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 200*333d2b36SAndroid Build Coastguard Worker name: "platform-bootclasspath", 201*333d2b36SAndroid Build Coastguard Worker } 202*333d2b36SAndroid Build Coastguard Worker `), 203*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 204*333d2b36SAndroid Build Coastguard Worker 205*333d2b36SAndroid Build Coastguard Worker p := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule) 206*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "output filepath", "bootclasspath.pb", p.ClasspathFragmentBase.outputFilepath.Base()) 207*333d2b36SAndroid Build Coastguard Worker android.AssertPathRelativeToTopEquals(t, "install filepath", "out/soong/target/product/test_device/system/etc/classpaths", p.ClasspathFragmentBase.installDirPath) 208*333d2b36SAndroid Build Coastguard Worker} 209*333d2b36SAndroid Build Coastguard Worker 210*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspathModule_AndroidMkEntries(t *testing.T) { 211*333d2b36SAndroid Build Coastguard Worker preparer := android.GroupFixturePreparers( 212*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 213*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 214*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 215*333d2b36SAndroid Build Coastguard Worker name: "platform-bootclasspath", 216*333d2b36SAndroid Build Coastguard Worker } 217*333d2b36SAndroid Build Coastguard Worker `), 218*333d2b36SAndroid Build Coastguard Worker ) 219*333d2b36SAndroid Build Coastguard Worker 220*333d2b36SAndroid Build Coastguard Worker t.Run("AndroidMkEntries", func(t *testing.T) { 221*333d2b36SAndroid Build Coastguard Worker result := preparer.RunTest(t) 222*333d2b36SAndroid Build Coastguard Worker 223*333d2b36SAndroid Build Coastguard Worker p := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule) 224*333d2b36SAndroid Build Coastguard Worker 225*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, result.TestContext, p) 226*333d2b36SAndroid Build Coastguard Worker android.AssertIntEquals(t, "AndroidMkEntries count", 2, len(entries)) 227*333d2b36SAndroid Build Coastguard Worker }) 228*333d2b36SAndroid Build Coastguard Worker 229*333d2b36SAndroid Build Coastguard Worker t.Run("hiddenapi-flags-entry", func(t *testing.T) { 230*333d2b36SAndroid Build Coastguard Worker result := preparer.RunTest(t) 231*333d2b36SAndroid Build Coastguard Worker 232*333d2b36SAndroid Build Coastguard Worker p := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule) 233*333d2b36SAndroid Build Coastguard Worker 234*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, result.TestContext, p) 235*333d2b36SAndroid Build Coastguard Worker got := entries[0].OutputFile 236*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals(t, "valid output path", true, got.Valid()) 237*333d2b36SAndroid Build Coastguard Worker android.AssertSame(t, "output filepath", p.hiddenAPIFlagsCSV, got.Path()) 238*333d2b36SAndroid Build Coastguard Worker }) 239*333d2b36SAndroid Build Coastguard Worker 240*333d2b36SAndroid Build Coastguard Worker t.Run("classpath-fragment-entry", func(t *testing.T) { 241*333d2b36SAndroid Build Coastguard Worker result := preparer.RunTest(t) 242*333d2b36SAndroid Build Coastguard Worker 243*333d2b36SAndroid Build Coastguard Worker want := map[string][]string{ 244*333d2b36SAndroid Build Coastguard Worker "LOCAL_MODULE": {"platform-bootclasspath"}, 245*333d2b36SAndroid Build Coastguard Worker "LOCAL_MODULE_CLASS": {"ETC"}, 246*333d2b36SAndroid Build Coastguard Worker "LOCAL_INSTALLED_MODULE_STEM": {"bootclasspath.pb"}, 247*333d2b36SAndroid Build Coastguard Worker // Output and Install paths are tested separately in TestPlatformBootclasspath_ClasspathFragmentPaths 248*333d2b36SAndroid Build Coastguard Worker } 249*333d2b36SAndroid Build Coastguard Worker 250*333d2b36SAndroid Build Coastguard Worker p := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule) 251*333d2b36SAndroid Build Coastguard Worker 252*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, result.TestContext, p) 253*333d2b36SAndroid Build Coastguard Worker got := entries[1] 254*333d2b36SAndroid Build Coastguard Worker for k, expectedValue := range want { 255*333d2b36SAndroid Build Coastguard Worker if value, ok := got.EntryMap[k]; ok { 256*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, k, expectedValue, value) 257*333d2b36SAndroid Build Coastguard Worker } else { 258*333d2b36SAndroid Build Coastguard Worker t.Errorf("No %s defined, saw %q", k, got.EntryMap) 259*333d2b36SAndroid Build Coastguard Worker } 260*333d2b36SAndroid Build Coastguard Worker } 261*333d2b36SAndroid Build Coastguard Worker }) 262*333d2b36SAndroid Build Coastguard Worker} 263*333d2b36SAndroid Build Coastguard Worker 264*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath_Dist(t *testing.T) { 265*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 266*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 267*333d2b36SAndroid Build Coastguard Worker FixtureConfigureBootJars("platform:foo", "platform:bar"), 268*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAndroidMk, 269*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 270*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 271*333d2b36SAndroid Build Coastguard Worker name: "platform-bootclasspath", 272*333d2b36SAndroid Build Coastguard Worker dists: [ 273*333d2b36SAndroid Build Coastguard Worker { 274*333d2b36SAndroid Build Coastguard Worker targets: ["droidcore"], 275*333d2b36SAndroid Build Coastguard Worker tag: "hiddenapi-flags.csv", 276*333d2b36SAndroid Build Coastguard Worker }, 277*333d2b36SAndroid Build Coastguard Worker ], 278*333d2b36SAndroid Build Coastguard Worker } 279*333d2b36SAndroid Build Coastguard Worker 280*333d2b36SAndroid Build Coastguard Worker java_library { 281*333d2b36SAndroid Build Coastguard Worker name: "bar", 282*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 283*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 284*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 285*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 286*333d2b36SAndroid Build Coastguard Worker } 287*333d2b36SAndroid Build Coastguard Worker 288*333d2b36SAndroid Build Coastguard Worker java_library { 289*333d2b36SAndroid Build Coastguard Worker name: "foo", 290*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 291*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 292*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 293*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 294*333d2b36SAndroid Build Coastguard Worker } 295*333d2b36SAndroid Build Coastguard Worker `), 296*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 297*333d2b36SAndroid Build Coastguard Worker 298*333d2b36SAndroid Build Coastguard Worker platformBootclasspath := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule) 299*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, result.TestContext, platformBootclasspath) 300*333d2b36SAndroid Build Coastguard Worker goals := entries[0].GetDistForGoals(platformBootclasspath) 301*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "platform dist goals phony", ".PHONY: droidcore", goals[0]) 302*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "platform dist goals meta check", goals[1], "$(if $(strip $(ALL_TARGETS.") 303*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "platform dist goals meta assign", goals[1], "),,$(eval ALL_TARGETS.") 304*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "platform dist goals call", "$(call dist-for-goals,droidcore,out/soong/hiddenapi/hiddenapi-flags.csv:hiddenapi-flags.csv)", android.StringRelativeToTop(result.Config, goals[2])) 305*333d2b36SAndroid Build Coastguard Worker} 306*333d2b36SAndroid Build Coastguard Worker 307*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath_HiddenAPIMonolithicFiles(t *testing.T) { 308*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 309*333d2b36SAndroid Build Coastguard Worker hiddenApiFixtureFactory, 310*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaSdkLibraryFiles, 311*333d2b36SAndroid Build Coastguard Worker FixtureWithLastReleaseApis("bar"), 312*333d2b36SAndroid Build Coastguard Worker FixtureConfigureBootJars("platform:foo", "platform:bar"), 313*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 314*333d2b36SAndroid Build Coastguard Worker java_library { 315*333d2b36SAndroid Build Coastguard Worker name: "foo", 316*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 317*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 318*333d2b36SAndroid Build Coastguard Worker 319*333d2b36SAndroid Build Coastguard Worker hiddenapi_additional_annotations: [ 320*333d2b36SAndroid Build Coastguard Worker "foo-hiddenapi-annotations", 321*333d2b36SAndroid Build Coastguard Worker ], 322*333d2b36SAndroid Build Coastguard Worker } 323*333d2b36SAndroid Build Coastguard Worker 324*333d2b36SAndroid Build Coastguard Worker java_library { 325*333d2b36SAndroid Build Coastguard Worker name: "foo-hiddenapi-annotations", 326*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 327*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 328*333d2b36SAndroid Build Coastguard Worker } 329*333d2b36SAndroid Build Coastguard Worker 330*333d2b36SAndroid Build Coastguard Worker java_import { 331*333d2b36SAndroid Build Coastguard Worker name: "foo", 332*333d2b36SAndroid Build Coastguard Worker jars: ["a.jar"], 333*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 334*333d2b36SAndroid Build Coastguard Worker prefer: false, 335*333d2b36SAndroid Build Coastguard Worker } 336*333d2b36SAndroid Build Coastguard Worker 337*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 338*333d2b36SAndroid Build Coastguard Worker name: "bar", 339*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 340*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 341*333d2b36SAndroid Build Coastguard Worker } 342*333d2b36SAndroid Build Coastguard Worker 343*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 344*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 345*333d2b36SAndroid Build Coastguard Worker } 346*333d2b36SAndroid Build Coastguard Worker `) 347*333d2b36SAndroid Build Coastguard Worker 348*333d2b36SAndroid Build Coastguard Worker // Make sure that the foo-hiddenapi-annotations.jar is included in the inputs to the rules that 349*333d2b36SAndroid Build Coastguard Worker // creates the index.csv file. 350*333d2b36SAndroid Build Coastguard Worker platformBootclasspath := result.ModuleForTests("myplatform-bootclasspath", "android_common") 351*333d2b36SAndroid Build Coastguard Worker 352*333d2b36SAndroid Build Coastguard Worker var rule android.TestingBuildParams 353*333d2b36SAndroid Build Coastguard Worker 354*333d2b36SAndroid Build Coastguard Worker // All the intermediate rules use the same inputs. 355*333d2b36SAndroid Build Coastguard Worker expectedIntermediateInputs := ` 356*333d2b36SAndroid Build Coastguard Worker out/soong/.intermediates/bar.impl/android_common/javac/bar.jar 357*333d2b36SAndroid Build Coastguard Worker out/soong/.intermediates/foo-hiddenapi-annotations/android_common/javac/foo-hiddenapi-annotations.jar 358*333d2b36SAndroid Build Coastguard Worker out/soong/.intermediates/foo/android_common/javac/foo.jar 359*333d2b36SAndroid Build Coastguard Worker ` 360*333d2b36SAndroid Build Coastguard Worker 361*333d2b36SAndroid Build Coastguard Worker // Check flags output. 362*333d2b36SAndroid Build Coastguard Worker rule = platformBootclasspath.Output("hiddenapi-monolithic/annotation-flags-from-classes.csv") 363*333d2b36SAndroid Build Coastguard Worker CheckHiddenAPIRuleInputs(t, "intermediate flags", expectedIntermediateInputs, rule) 364*333d2b36SAndroid Build Coastguard Worker 365*333d2b36SAndroid Build Coastguard Worker rule = platformBootclasspath.Output("out/soong/hiddenapi/hiddenapi-flags.csv") 366*333d2b36SAndroid Build Coastguard Worker CheckHiddenAPIRuleInputs(t, "monolithic flags", ` 367*333d2b36SAndroid Build Coastguard Worker out/soong/.intermediates/myplatform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv 368*333d2b36SAndroid Build Coastguard Worker out/soong/hiddenapi/hiddenapi-stub-flags.txt 369*333d2b36SAndroid Build Coastguard Worker `, rule) 370*333d2b36SAndroid Build Coastguard Worker 371*333d2b36SAndroid Build Coastguard Worker // Check metadata output. 372*333d2b36SAndroid Build Coastguard Worker rule = platformBootclasspath.Output("hiddenapi-monolithic/metadata-from-classes.csv") 373*333d2b36SAndroid Build Coastguard Worker CheckHiddenAPIRuleInputs(t, "intermediate metadata", expectedIntermediateInputs, rule) 374*333d2b36SAndroid Build Coastguard Worker 375*333d2b36SAndroid Build Coastguard Worker rule = platformBootclasspath.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv") 376*333d2b36SAndroid Build Coastguard Worker CheckHiddenAPIRuleInputs(t, "monolithic metadata", ` 377*333d2b36SAndroid Build Coastguard Worker out/soong/.intermediates/myplatform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv 378*333d2b36SAndroid Build Coastguard Worker `, rule) 379*333d2b36SAndroid Build Coastguard Worker 380*333d2b36SAndroid Build Coastguard Worker // Check index output. 381*333d2b36SAndroid Build Coastguard Worker rule = platformBootclasspath.Output("hiddenapi-monolithic/index-from-classes.csv") 382*333d2b36SAndroid Build Coastguard Worker CheckHiddenAPIRuleInputs(t, "intermediate index", expectedIntermediateInputs, rule) 383*333d2b36SAndroid Build Coastguard Worker 384*333d2b36SAndroid Build Coastguard Worker rule = platformBootclasspath.Output("out/soong/hiddenapi/hiddenapi-index.csv") 385*333d2b36SAndroid Build Coastguard Worker CheckHiddenAPIRuleInputs(t, "monolithic index", ` 386*333d2b36SAndroid Build Coastguard Worker out/soong/.intermediates/myplatform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv 387*333d2b36SAndroid Build Coastguard Worker `, rule) 388*333d2b36SAndroid Build Coastguard Worker} 389