1*333d2b36SAndroid Build Coastguard Worker// Copyright 2018 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 "reflect" 19*333d2b36SAndroid Build Coastguard Worker "testing" 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 22*333d2b36SAndroid Build Coastguard Worker) 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddLibsDeps(t *testing.T) { 25*333d2b36SAndroid Build Coastguard Worker ctx, _ := testJava(t, 26*333d2b36SAndroid Build Coastguard Worker ` 27*333d2b36SAndroid Build Coastguard Worker java_library {name: "Foo"} 28*333d2b36SAndroid Build Coastguard Worker java_library {name: "Bar"} 29*333d2b36SAndroid Build Coastguard Worker java_library { 30*333d2b36SAndroid Build Coastguard Worker name: "javalib", 31*333d2b36SAndroid Build Coastguard Worker libs: ["Foo", "Bar"], 32*333d2b36SAndroid Build Coastguard Worker } 33*333d2b36SAndroid Build Coastguard Worker `) 34*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) 35*333d2b36SAndroid Build Coastguard Worker dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey) 36*333d2b36SAndroid Build Coastguard Worker 37*333d2b36SAndroid Build Coastguard Worker for _, expected := range []string{"Foo", "Bar"} { 38*333d2b36SAndroid Build Coastguard Worker if !android.InList(expected, dpInfo.Deps) { 39*333d2b36SAndroid Build Coastguard Worker t.Errorf("Library.IDEInfo() Deps = %v, %v not found", dpInfo.Deps, expected) 40*333d2b36SAndroid Build Coastguard Worker } 41*333d2b36SAndroid Build Coastguard Worker } 42*333d2b36SAndroid Build Coastguard Worker} 43*333d2b36SAndroid Build Coastguard Worker 44*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddStaticLibsDeps(t *testing.T) { 45*333d2b36SAndroid Build Coastguard Worker ctx, _ := testJava(t, 46*333d2b36SAndroid Build Coastguard Worker ` 47*333d2b36SAndroid Build Coastguard Worker java_library {name: "Foo"} 48*333d2b36SAndroid Build Coastguard Worker java_library {name: "Bar"} 49*333d2b36SAndroid Build Coastguard Worker java_library { 50*333d2b36SAndroid Build Coastguard Worker name: "javalib", 51*333d2b36SAndroid Build Coastguard Worker static_libs: ["Foo", "Bar"], 52*333d2b36SAndroid Build Coastguard Worker } 53*333d2b36SAndroid Build Coastguard Worker `) 54*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) 55*333d2b36SAndroid Build Coastguard Worker dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey) 56*333d2b36SAndroid Build Coastguard Worker 57*333d2b36SAndroid Build Coastguard Worker for _, expected := range []string{"Foo", "Bar"} { 58*333d2b36SAndroid Build Coastguard Worker if !android.InList(expected, dpInfo.Deps) { 59*333d2b36SAndroid Build Coastguard Worker t.Errorf("Library.IDEInfo() Deps = %v, %v not found", dpInfo.Deps, expected) 60*333d2b36SAndroid Build Coastguard Worker } 61*333d2b36SAndroid Build Coastguard Worker } 62*333d2b36SAndroid Build Coastguard Worker} 63*333d2b36SAndroid Build Coastguard Worker 64*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddScrs(t *testing.T) { 65*333d2b36SAndroid Build Coastguard Worker ctx, _ := testJava(t, 66*333d2b36SAndroid Build Coastguard Worker ` 67*333d2b36SAndroid Build Coastguard Worker java_library { 68*333d2b36SAndroid Build Coastguard Worker name: "javalib", 69*333d2b36SAndroid Build Coastguard Worker srcs: ["Foo.java", "Bar.java"], 70*333d2b36SAndroid Build Coastguard Worker } 71*333d2b36SAndroid Build Coastguard Worker `) 72*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) 73*333d2b36SAndroid Build Coastguard Worker dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey) 74*333d2b36SAndroid Build Coastguard Worker 75*333d2b36SAndroid Build Coastguard Worker expected := []string{"Foo.java", "Bar.java"} 76*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(dpInfo.Srcs, expected) { 77*333d2b36SAndroid Build Coastguard Worker t.Errorf("Library.IDEInfo() Srcs = %v, want %v", dpInfo.Srcs, expected) 78*333d2b36SAndroid Build Coastguard Worker } 79*333d2b36SAndroid Build Coastguard Worker} 80*333d2b36SAndroid Build Coastguard Worker 81*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddAidlIncludeDirs(t *testing.T) { 82*333d2b36SAndroid Build Coastguard Worker ctx, _ := testJava(t, 83*333d2b36SAndroid Build Coastguard Worker ` 84*333d2b36SAndroid Build Coastguard Worker java_library { 85*333d2b36SAndroid Build Coastguard Worker name: "javalib", 86*333d2b36SAndroid Build Coastguard Worker aidl: { 87*333d2b36SAndroid Build Coastguard Worker include_dirs: ["Foo", "Bar"], 88*333d2b36SAndroid Build Coastguard Worker }, 89*333d2b36SAndroid Build Coastguard Worker } 90*333d2b36SAndroid Build Coastguard Worker `) 91*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) 92*333d2b36SAndroid Build Coastguard Worker dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey) 93*333d2b36SAndroid Build Coastguard Worker 94*333d2b36SAndroid Build Coastguard Worker expected := []string{"Foo", "Bar"} 95*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(dpInfo.Aidl_include_dirs, expected) { 96*333d2b36SAndroid Build Coastguard Worker t.Errorf("Library.IDEInfo() Aidl_include_dirs = %v, want %v", dpInfo.Aidl_include_dirs, expected) 97*333d2b36SAndroid Build Coastguard Worker } 98*333d2b36SAndroid Build Coastguard Worker} 99*333d2b36SAndroid Build Coastguard Worker 100*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryWithJarJarRules(t *testing.T) { 101*333d2b36SAndroid Build Coastguard Worker ctx, _ := testJava(t, 102*333d2b36SAndroid Build Coastguard Worker ` 103*333d2b36SAndroid Build Coastguard Worker java_library { 104*333d2b36SAndroid Build Coastguard Worker name: "javalib", 105*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.java"], 106*333d2b36SAndroid Build Coastguard Worker jarjar_rules: "jarjar_rules.txt", 107*333d2b36SAndroid Build Coastguard Worker } 108*333d2b36SAndroid Build Coastguard Worker `) 109*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) 110*333d2b36SAndroid Build Coastguard Worker dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey) 111*333d2b36SAndroid Build Coastguard Worker 112*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "IdeInfo.Srcs of repackaged library should not be empty", "foo.java", dpInfo.Srcs[0]) 113*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "IdeInfo.Jar_rules of repackaged library should not be empty", "jarjar_rules.txt", dpInfo.Jarjar_rules[0]) 114*333d2b36SAndroid Build Coastguard Worker if !android.SubstringInList(dpInfo.Jars, "soong/.intermediates/javalib/android_common/jarjar/turbine/javalib.jar") { 115*333d2b36SAndroid Build Coastguard Worker t.Errorf("IdeInfo.Jars of repackaged library should contain the output of jarjar-ing. All outputs: %v\n", dpInfo.Jars) 116*333d2b36SAndroid Build Coastguard Worker } 117*333d2b36SAndroid Build Coastguard Worker} 118*333d2b36SAndroid Build Coastguard Worker 119*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryLinkingAgainstVersionedSdk(t *testing.T) { 120*333d2b36SAndroid Build Coastguard Worker ctx := android.GroupFixturePreparers( 121*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 122*333d2b36SAndroid Build Coastguard Worker FixtureWithPrebuiltApis(map[string][]string{ 123*333d2b36SAndroid Build Coastguard Worker "29": {}, 124*333d2b36SAndroid Build Coastguard Worker })).RunTestWithBp(t, 125*333d2b36SAndroid Build Coastguard Worker ` 126*333d2b36SAndroid Build Coastguard Worker java_library { 127*333d2b36SAndroid Build Coastguard Worker name: "javalib", 128*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.java"], 129*333d2b36SAndroid Build Coastguard Worker sdk_version: "29", 130*333d2b36SAndroid Build Coastguard Worker } 131*333d2b36SAndroid Build Coastguard Worker `) 132*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) 133*333d2b36SAndroid Build Coastguard Worker dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey) 134*333d2b36SAndroid Build Coastguard Worker 135*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "IdeInfo.Deps should contain versioned sdk module", dpInfo.Deps, "sdk_public_29_android") 136*333d2b36SAndroid Build Coastguard Worker} 137*333d2b36SAndroid Build Coastguard Worker 138*333d2b36SAndroid Build Coastguard Workerfunc TestDoNotAddNoneSystemModulesToDeps(t *testing.T) { 139*333d2b36SAndroid Build Coastguard Worker ctx := android.GroupFixturePreparers( 140*333d2b36SAndroid Build Coastguard Worker prepareForJavaTest, 141*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeEnv( 142*333d2b36SAndroid Build Coastguard Worker map[string]string{ 143*333d2b36SAndroid Build Coastguard Worker "DISABLE_STUB_VALIDATION": "true", 144*333d2b36SAndroid Build Coastguard Worker }, 145*333d2b36SAndroid Build Coastguard Worker ), 146*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, 147*333d2b36SAndroid Build Coastguard Worker ` 148*333d2b36SAndroid Build Coastguard Worker java_library { 149*333d2b36SAndroid Build Coastguard Worker name: "javalib", 150*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.java"], 151*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 152*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 153*333d2b36SAndroid Build Coastguard Worker } 154*333d2b36SAndroid Build Coastguard Worker 155*333d2b36SAndroid Build Coastguard Worker java_api_library { 156*333d2b36SAndroid Build Coastguard Worker name: "javalib.stubs", 157*333d2b36SAndroid Build Coastguard Worker stubs_type: "everything", 158*333d2b36SAndroid Build Coastguard Worker api_contributions: ["javalib-current.txt"], 159*333d2b36SAndroid Build Coastguard Worker api_surface: "public", 160*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 161*333d2b36SAndroid Build Coastguard Worker } 162*333d2b36SAndroid Build Coastguard Worker java_api_contribution { 163*333d2b36SAndroid Build Coastguard Worker name: "javalib-current.txt", 164*333d2b36SAndroid Build Coastguard Worker api_file: "javalib-current.txt", 165*333d2b36SAndroid Build Coastguard Worker api_surface: "public", 166*333d2b36SAndroid Build Coastguard Worker } 167*333d2b36SAndroid Build Coastguard Worker `) 168*333d2b36SAndroid Build Coastguard Worker javalib := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) 169*333d2b36SAndroid Build Coastguard Worker dpInfo, _ := android.OtherModuleProvider(ctx, javalib, android.IdeInfoProviderKey) 170*333d2b36SAndroid Build Coastguard Worker android.AssertStringListDoesNotContain(t, "IdeInfo.Deps should contain not contain `none`", dpInfo.Deps, "none") 171*333d2b36SAndroid Build Coastguard Worker 172*333d2b36SAndroid Build Coastguard Worker javalib_stubs := ctx.ModuleForTests("javalib.stubs", "android_common").Module().(*ApiLibrary) 173*333d2b36SAndroid Build Coastguard Worker dpInfo, _ = android.OtherModuleProvider(ctx, javalib_stubs, android.IdeInfoProviderKey) 174*333d2b36SAndroid Build Coastguard Worker android.AssertStringListDoesNotContain(t, "IdeInfo.Deps should contain not contain `none`", dpInfo.Deps, "none") 175*333d2b36SAndroid Build Coastguard Worker} 176