1*333d2b36SAndroid Build Coastguard Worker// Copyright 2017 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 "slices" 19*333d2b36SAndroid Build Coastguard Worker "strconv" 20*333d2b36SAndroid Build Coastguard Worker "strings" 21*333d2b36SAndroid Build Coastguard Worker "testing" 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 24*333d2b36SAndroid Build Coastguard Worker) 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Workerfunc TestKotlin(t *testing.T) { 27*333d2b36SAndroid Build Coastguard Worker bp := ` 28*333d2b36SAndroid Build Coastguard Worker java_library { 29*333d2b36SAndroid Build Coastguard Worker name: "foo", 30*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.kt"], 31*333d2b36SAndroid Build Coastguard Worker static_libs: ["quz"], 32*333d2b36SAndroid Build Coastguard Worker } 33*333d2b36SAndroid Build Coastguard Worker 34*333d2b36SAndroid Build Coastguard Worker java_library { 35*333d2b36SAndroid Build Coastguard Worker name: "bar", 36*333d2b36SAndroid Build Coastguard Worker srcs: ["b.kt"], 37*333d2b36SAndroid Build Coastguard Worker libs: ["foo"], 38*333d2b36SAndroid Build Coastguard Worker static_libs: ["baz"], 39*333d2b36SAndroid Build Coastguard Worker } 40*333d2b36SAndroid Build Coastguard Worker 41*333d2b36SAndroid Build Coastguard Worker java_library { 42*333d2b36SAndroid Build Coastguard Worker name: "baz", 43*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 44*333d2b36SAndroid Build Coastguard Worker static_libs: ["quz"], 45*333d2b36SAndroid Build Coastguard Worker } 46*333d2b36SAndroid Build Coastguard Worker 47*333d2b36SAndroid Build Coastguard Worker java_library { 48*333d2b36SAndroid Build Coastguard Worker name: "quz", 49*333d2b36SAndroid Build Coastguard Worker srcs: ["d.kt"], 50*333d2b36SAndroid Build Coastguard Worker }` 51*333d2b36SAndroid Build Coastguard Worker 52*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineCombinedJars := []string{ 53*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib/android_common/turbine-combined/kotlin-stdlib.jar", 54*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib-jdk7/android_common/turbine-combined/kotlin-stdlib-jdk7.jar", 55*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib-jdk8/android_common/turbine-combined/kotlin-stdlib-jdk8.jar", 56*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-annotations/android_common/turbine-combined/kotlin-annotations.jar", 57*333d2b36SAndroid Build Coastguard Worker } 58*333d2b36SAndroid Build Coastguard Worker 59*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineJars := []string{ 60*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib/android_common/turbine/kotlin-stdlib.jar", 61*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib-jdk7/android_common/turbine/kotlin-stdlib-jdk7.jar", 62*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib-jdk8/android_common/turbine/kotlin-stdlib-jdk8.jar", 63*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-annotations/android_common/turbine/kotlin-annotations.jar", 64*333d2b36SAndroid Build Coastguard Worker } 65*333d2b36SAndroid Build Coastguard Worker 66*333d2b36SAndroid Build Coastguard Worker kotlinStdlibJavacJars := []string{ 67*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib/android_common/javac/kotlin-stdlib.jar", 68*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib-jdk7/android_common/javac/kotlin-stdlib-jdk7.jar", 69*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-stdlib-jdk8/android_common/javac/kotlin-stdlib-jdk8.jar", 70*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/kotlin-annotations/android_common/javac/kotlin-annotations.jar", 71*333d2b36SAndroid Build Coastguard Worker } 72*333d2b36SAndroid Build Coastguard Worker 73*333d2b36SAndroid Build Coastguard Worker bootclasspathTurbineCombinedJars := []string{ 74*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/stable.core.platform.api.stubs/android_common/turbine-combined/stable.core.platform.api.stubs.jar", 75*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/core-lambda-stubs/android_common/turbine-combined/core-lambda-stubs.jar", 76*333d2b36SAndroid Build Coastguard Worker } 77*333d2b36SAndroid Build Coastguard Worker 78*333d2b36SAndroid Build Coastguard Worker bootclasspathTurbineJars := []string{ 79*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/stable.core.platform.api.stubs/android_common/turbine/stable.core.platform.api.stubs.jar", 80*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/core-lambda-stubs/android_common/turbine/core-lambda-stubs.jar", 81*333d2b36SAndroid Build Coastguard Worker } 82*333d2b36SAndroid Build Coastguard Worker 83*333d2b36SAndroid Build Coastguard Worker frameworkTurbineCombinedJars := []string{ 84*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/ext/android_common/turbine-combined/ext.jar", 85*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/framework/android_common/turbine-combined/framework.jar", 86*333d2b36SAndroid Build Coastguard Worker } 87*333d2b36SAndroid Build Coastguard Worker 88*333d2b36SAndroid Build Coastguard Worker frameworkTurbineJars := []string{ 89*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/ext/android_common/turbine/ext.jar", 90*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/default/java/framework/android_common/turbine/framework.jar", 91*333d2b36SAndroid Build Coastguard Worker } 92*333d2b36SAndroid Build Coastguard Worker 93*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 94*333d2b36SAndroid Build Coastguard Worker name string 95*333d2b36SAndroid Build Coastguard Worker 96*333d2b36SAndroid Build Coastguard Worker preparer android.FixturePreparer 97*333d2b36SAndroid Build Coastguard Worker 98*333d2b36SAndroid Build Coastguard Worker fooKotlincInputs []string 99*333d2b36SAndroid Build Coastguard Worker fooJavacInputs []string 100*333d2b36SAndroid Build Coastguard Worker fooKotlincClasspath []string 101*333d2b36SAndroid Build Coastguard Worker fooJavacClasspath []string 102*333d2b36SAndroid Build Coastguard Worker fooCombinedInputs []string 103*333d2b36SAndroid Build Coastguard Worker fooHeaderCombinedInputs []string 104*333d2b36SAndroid Build Coastguard Worker 105*333d2b36SAndroid Build Coastguard Worker barKotlincInputs []string 106*333d2b36SAndroid Build Coastguard Worker barKotlincClasspath []string 107*333d2b36SAndroid Build Coastguard Worker barCombinedInputs []string 108*333d2b36SAndroid Build Coastguard Worker barHeaderCombinedInputs []string 109*333d2b36SAndroid Build Coastguard Worker }{ 110*333d2b36SAndroid Build Coastguard Worker { 111*333d2b36SAndroid Build Coastguard Worker name: "normal", 112*333d2b36SAndroid Build Coastguard Worker preparer: android.NullFixturePreparer, 113*333d2b36SAndroid Build Coastguard Worker fooKotlincInputs: []string{"a.java", "b.kt"}, 114*333d2b36SAndroid Build Coastguard Worker fooJavacInputs: []string{"a.java"}, 115*333d2b36SAndroid Build Coastguard Worker fooKotlincClasspath: slices.Concat( 116*333d2b36SAndroid Build Coastguard Worker bootclasspathTurbineCombinedJars, 117*333d2b36SAndroid Build Coastguard Worker frameworkTurbineCombinedJars, 118*333d2b36SAndroid Build Coastguard Worker []string{"out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar"}, 119*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineCombinedJars, 120*333d2b36SAndroid Build Coastguard Worker ), 121*333d2b36SAndroid Build Coastguard Worker fooJavacClasspath: slices.Concat( 122*333d2b36SAndroid Build Coastguard Worker []string{"out/soong/.intermediates/foo/android_common/kotlin_headers/foo.jar"}, 123*333d2b36SAndroid Build Coastguard Worker frameworkTurbineCombinedJars, 124*333d2b36SAndroid Build Coastguard Worker []string{"out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar"}, 125*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineCombinedJars, 126*333d2b36SAndroid Build Coastguard Worker ), 127*333d2b36SAndroid Build Coastguard Worker fooCombinedInputs: slices.Concat( 128*333d2b36SAndroid Build Coastguard Worker []string{ 129*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/kotlin/foo.jar", 130*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/javac/foo.jar", 131*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/quz/android_common/combined/quz.jar", 132*333d2b36SAndroid Build Coastguard Worker }, 133*333d2b36SAndroid Build Coastguard Worker kotlinStdlibJavacJars, 134*333d2b36SAndroid Build Coastguard Worker ), 135*333d2b36SAndroid Build Coastguard Worker fooHeaderCombinedInputs: slices.Concat( 136*333d2b36SAndroid Build Coastguard Worker []string{ 137*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/turbine/foo.jar", 138*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/kotlin_headers/foo.jar", 139*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar", 140*333d2b36SAndroid Build Coastguard Worker }, 141*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineCombinedJars, 142*333d2b36SAndroid Build Coastguard Worker ), 143*333d2b36SAndroid Build Coastguard Worker 144*333d2b36SAndroid Build Coastguard Worker barKotlincInputs: []string{"b.kt"}, 145*333d2b36SAndroid Build Coastguard Worker barKotlincClasspath: slices.Concat( 146*333d2b36SAndroid Build Coastguard Worker bootclasspathTurbineCombinedJars, 147*333d2b36SAndroid Build Coastguard Worker frameworkTurbineCombinedJars, 148*333d2b36SAndroid Build Coastguard Worker []string{ 149*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/turbine-combined/foo.jar", 150*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/baz/android_common/turbine-combined/baz.jar", 151*333d2b36SAndroid Build Coastguard Worker }, 152*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineCombinedJars, 153*333d2b36SAndroid Build Coastguard Worker ), 154*333d2b36SAndroid Build Coastguard Worker barCombinedInputs: slices.Concat( 155*333d2b36SAndroid Build Coastguard Worker []string{ 156*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/bar/android_common/kotlin/bar.jar", 157*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/baz/android_common/combined/baz.jar", 158*333d2b36SAndroid Build Coastguard Worker }, 159*333d2b36SAndroid Build Coastguard Worker kotlinStdlibJavacJars, 160*333d2b36SAndroid Build Coastguard Worker []string{}, 161*333d2b36SAndroid Build Coastguard Worker ), 162*333d2b36SAndroid Build Coastguard Worker barHeaderCombinedInputs: slices.Concat( 163*333d2b36SAndroid Build Coastguard Worker []string{ 164*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/bar/android_common/kotlin_headers/bar.jar", 165*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/baz/android_common/turbine-combined/baz.jar", 166*333d2b36SAndroid Build Coastguard Worker }, 167*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineCombinedJars, 168*333d2b36SAndroid Build Coastguard Worker ), 169*333d2b36SAndroid Build Coastguard Worker }, 170*333d2b36SAndroid Build Coastguard Worker { 171*333d2b36SAndroid Build Coastguard Worker name: "transitive classpath", 172*333d2b36SAndroid Build Coastguard Worker preparer: PrepareForTestWithTransitiveClasspathEnabled, 173*333d2b36SAndroid Build Coastguard Worker fooKotlincInputs: []string{"a.java", "b.kt"}, 174*333d2b36SAndroid Build Coastguard Worker fooJavacInputs: []string{"a.java"}, 175*333d2b36SAndroid Build Coastguard Worker fooKotlincClasspath: slices.Concat( 176*333d2b36SAndroid Build Coastguard Worker bootclasspathTurbineJars, 177*333d2b36SAndroid Build Coastguard Worker frameworkTurbineJars, 178*333d2b36SAndroid Build Coastguard Worker []string{"out/soong/.intermediates/quz/android_common/kotlin_headers/quz.jar"}, 179*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineJars, 180*333d2b36SAndroid Build Coastguard Worker ), 181*333d2b36SAndroid Build Coastguard Worker fooJavacClasspath: slices.Concat( 182*333d2b36SAndroid Build Coastguard Worker []string{"out/soong/.intermediates/foo/android_common/kotlin_headers/foo.jar"}, 183*333d2b36SAndroid Build Coastguard Worker frameworkTurbineJars, 184*333d2b36SAndroid Build Coastguard Worker []string{"out/soong/.intermediates/quz/android_common/kotlin_headers/quz.jar"}, 185*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineJars, 186*333d2b36SAndroid Build Coastguard Worker ), 187*333d2b36SAndroid Build Coastguard Worker fooCombinedInputs: slices.Concat( 188*333d2b36SAndroid Build Coastguard Worker []string{ 189*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/kotlin/foo.jar", 190*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/javac/foo.jar", 191*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/quz/android_common/kotlin/quz.jar", 192*333d2b36SAndroid Build Coastguard Worker }, 193*333d2b36SAndroid Build Coastguard Worker kotlinStdlibJavacJars, 194*333d2b36SAndroid Build Coastguard Worker ), 195*333d2b36SAndroid Build Coastguard Worker fooHeaderCombinedInputs: slices.Concat( 196*333d2b36SAndroid Build Coastguard Worker []string{ 197*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/turbine/foo.jar", 198*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/kotlin_headers/foo.jar", 199*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/quz/android_common/kotlin_headers/quz.jar", 200*333d2b36SAndroid Build Coastguard Worker }, 201*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineJars, 202*333d2b36SAndroid Build Coastguard Worker ), 203*333d2b36SAndroid Build Coastguard Worker 204*333d2b36SAndroid Build Coastguard Worker barKotlincInputs: []string{"b.kt"}, 205*333d2b36SAndroid Build Coastguard Worker barKotlincClasspath: slices.Concat( 206*333d2b36SAndroid Build Coastguard Worker bootclasspathTurbineJars, 207*333d2b36SAndroid Build Coastguard Worker frameworkTurbineJars, 208*333d2b36SAndroid Build Coastguard Worker []string{ 209*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/turbine/foo.jar", 210*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/android_common/kotlin_headers/foo.jar", 211*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/quz/android_common/kotlin_headers/quz.jar", 212*333d2b36SAndroid Build Coastguard Worker }, 213*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineJars, 214*333d2b36SAndroid Build Coastguard Worker []string{"out/soong/.intermediates/baz/android_common/turbine/baz.jar"}, 215*333d2b36SAndroid Build Coastguard Worker ), 216*333d2b36SAndroid Build Coastguard Worker barCombinedInputs: slices.Concat( 217*333d2b36SAndroid Build Coastguard Worker []string{ 218*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/bar/android_common/kotlin/bar.jar", 219*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/baz/android_common/javac/baz.jar", 220*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/quz/android_common/kotlin/quz.jar", 221*333d2b36SAndroid Build Coastguard Worker }, 222*333d2b36SAndroid Build Coastguard Worker kotlinStdlibJavacJars, 223*333d2b36SAndroid Build Coastguard Worker ), 224*333d2b36SAndroid Build Coastguard Worker barHeaderCombinedInputs: slices.Concat( 225*333d2b36SAndroid Build Coastguard Worker []string{ 226*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/bar/android_common/kotlin_headers/bar.jar", 227*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/baz/android_common/turbine/baz.jar", 228*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/quz/android_common/kotlin_headers/quz.jar", 229*333d2b36SAndroid Build Coastguard Worker }, 230*333d2b36SAndroid Build Coastguard Worker kotlinStdlibTurbineJars, 231*333d2b36SAndroid Build Coastguard Worker ), 232*333d2b36SAndroid Build Coastguard Worker }, 233*333d2b36SAndroid Build Coastguard Worker } 234*333d2b36SAndroid Build Coastguard Worker 235*333d2b36SAndroid Build Coastguard Worker for _, tt := range testCases { 236*333d2b36SAndroid Build Coastguard Worker t.Run(tt.name, func(t *testing.T) { 237*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 238*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaDefaultModules, 239*333d2b36SAndroid Build Coastguard Worker tt.preparer, 240*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, bp) 241*333d2b36SAndroid Build Coastguard Worker foo := result.ModuleForTests("foo", "android_common") 242*333d2b36SAndroid Build Coastguard Worker fooKotlinc := foo.Rule("kotlinc") 243*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "foo kotlinc inputs", tt.fooKotlincInputs, fooKotlinc.Inputs) 244*333d2b36SAndroid Build Coastguard Worker 245*333d2b36SAndroid Build Coastguard Worker fooKotlincClasspath := android.ContentFromFileRuleForTests(t, result.TestContext, foo.Output("kotlinc/classpath.rsp")) 246*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "foo kotlinc classpath", result.Config, tt.fooKotlincClasspath, strings.Fields(fooKotlincClasspath)) 247*333d2b36SAndroid Build Coastguard Worker 248*333d2b36SAndroid Build Coastguard Worker fooJavac := foo.Rule("javac") 249*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "foo javac inputs", tt.fooJavacInputs, fooJavac.Inputs) 250*333d2b36SAndroid Build Coastguard Worker 251*333d2b36SAndroid Build Coastguard Worker fooJavacClasspath := fooJavac.Args["classpath"] 252*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "foo javac classpath", result.Config, tt.fooJavacClasspath, 253*333d2b36SAndroid Build Coastguard Worker strings.Split(strings.TrimPrefix(fooJavacClasspath, "-classpath "), ":")) 254*333d2b36SAndroid Build Coastguard Worker 255*333d2b36SAndroid Build Coastguard Worker fooCombinedJar := foo.Output("combined/foo.jar") 256*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "foo combined inputs", tt.fooCombinedInputs, fooCombinedJar.Inputs) 257*333d2b36SAndroid Build Coastguard Worker 258*333d2b36SAndroid Build Coastguard Worker fooCombinedHeaderJar := foo.Output("turbine-combined/foo.jar") 259*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "foo header combined inputs", tt.fooHeaderCombinedInputs, fooCombinedHeaderJar.Inputs) 260*333d2b36SAndroid Build Coastguard Worker 261*333d2b36SAndroid Build Coastguard Worker bar := result.ModuleForTests("bar", "android_common") 262*333d2b36SAndroid Build Coastguard Worker barKotlinc := bar.Rule("kotlinc") 263*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "bar kotlinc inputs", tt.barKotlincInputs, barKotlinc.Inputs) 264*333d2b36SAndroid Build Coastguard Worker 265*333d2b36SAndroid Build Coastguard Worker barKotlincClasspath := android.ContentFromFileRuleForTests(t, result.TestContext, bar.Output("kotlinc/classpath.rsp")) 266*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "bar kotlinc classpath", result.Config, tt.barKotlincClasspath, strings.Fields(barKotlincClasspath)) 267*333d2b36SAndroid Build Coastguard Worker 268*333d2b36SAndroid Build Coastguard Worker barCombinedJar := bar.Output("combined/bar.jar") 269*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "bar combined inputs", tt.barCombinedInputs, barCombinedJar.Inputs) 270*333d2b36SAndroid Build Coastguard Worker 271*333d2b36SAndroid Build Coastguard Worker barCombinedHeaderJar := bar.Output("turbine-combined/bar.jar") 272*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "bar header combined inputs", tt.barHeaderCombinedInputs, barCombinedHeaderJar.Inputs) 273*333d2b36SAndroid Build Coastguard Worker }) 274*333d2b36SAndroid Build Coastguard Worker } 275*333d2b36SAndroid Build Coastguard Worker} 276*333d2b36SAndroid Build Coastguard Worker 277*333d2b36SAndroid Build Coastguard Workerfunc TestKapt(t *testing.T) { 278*333d2b36SAndroid Build Coastguard Worker bp := ` 279*333d2b36SAndroid Build Coastguard Worker java_library { 280*333d2b36SAndroid Build Coastguard Worker name: "foo", 281*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java", "b.kt"], 282*333d2b36SAndroid Build Coastguard Worker plugins: ["bar", "baz"], 283*333d2b36SAndroid Build Coastguard Worker errorprone: { 284*333d2b36SAndroid Build Coastguard Worker extra_check_modules: ["my_check"], 285*333d2b36SAndroid Build Coastguard Worker }, 286*333d2b36SAndroid Build Coastguard Worker } 287*333d2b36SAndroid Build Coastguard Worker 288*333d2b36SAndroid Build Coastguard Worker java_plugin { 289*333d2b36SAndroid Build Coastguard Worker name: "bar", 290*333d2b36SAndroid Build Coastguard Worker processor_class: "com.bar", 291*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 292*333d2b36SAndroid Build Coastguard Worker } 293*333d2b36SAndroid Build Coastguard Worker 294*333d2b36SAndroid Build Coastguard Worker java_plugin { 295*333d2b36SAndroid Build Coastguard Worker name: "baz", 296*333d2b36SAndroid Build Coastguard Worker processor_class: "com.baz", 297*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 298*333d2b36SAndroid Build Coastguard Worker } 299*333d2b36SAndroid Build Coastguard Worker 300*333d2b36SAndroid Build Coastguard Worker java_plugin { 301*333d2b36SAndroid Build Coastguard Worker name: "my_check", 302*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 303*333d2b36SAndroid Build Coastguard Worker } 304*333d2b36SAndroid Build Coastguard Worker ` 305*333d2b36SAndroid Build Coastguard Worker t.Run("", func(t *testing.T) { 306*333d2b36SAndroid Build Coastguard Worker ctx, _ := testJava(t, bp) 307*333d2b36SAndroid Build Coastguard Worker 308*333d2b36SAndroid Build Coastguard Worker buildOS := ctx.Config().BuildOS.String() 309*333d2b36SAndroid Build Coastguard Worker 310*333d2b36SAndroid Build Coastguard Worker foo := ctx.ModuleForTests("foo", "android_common") 311*333d2b36SAndroid Build Coastguard Worker kaptStubs := foo.Rule("kapt") 312*333d2b36SAndroid Build Coastguard Worker turbineApt := foo.Description("turbine apt") 313*333d2b36SAndroid Build Coastguard Worker kotlinc := foo.Rule("kotlinc") 314*333d2b36SAndroid Build Coastguard Worker javac := foo.Rule("javac") 315*333d2b36SAndroid Build Coastguard Worker 316*333d2b36SAndroid Build Coastguard Worker bar := ctx.ModuleForTests("bar", buildOS+"_common").Rule("javac").Output.String() 317*333d2b36SAndroid Build Coastguard Worker baz := ctx.ModuleForTests("baz", buildOS+"_common").Rule("javac").Output.String() 318*333d2b36SAndroid Build Coastguard Worker 319*333d2b36SAndroid Build Coastguard Worker // Test that the kotlin and java sources are passed to kapt and kotlinc 320*333d2b36SAndroid Build Coastguard Worker if len(kaptStubs.Inputs) != 2 || kaptStubs.Inputs[0].String() != "a.java" || kaptStubs.Inputs[1].String() != "b.kt" { 321*333d2b36SAndroid Build Coastguard Worker t.Errorf(`foo kapt inputs %v != ["a.java", "b.kt"]`, kaptStubs.Inputs) 322*333d2b36SAndroid Build Coastguard Worker } 323*333d2b36SAndroid Build Coastguard Worker if len(kotlinc.Inputs) != 2 || kotlinc.Inputs[0].String() != "a.java" || kotlinc.Inputs[1].String() != "b.kt" { 324*333d2b36SAndroid Build Coastguard Worker t.Errorf(`foo kotlinc inputs %v != ["a.java", "b.kt"]`, kotlinc.Inputs) 325*333d2b36SAndroid Build Coastguard Worker } 326*333d2b36SAndroid Build Coastguard Worker 327*333d2b36SAndroid Build Coastguard Worker // Test that only the java sources are passed to turbine-apt and javac 328*333d2b36SAndroid Build Coastguard Worker if len(turbineApt.Inputs) != 1 || turbineApt.Inputs[0].String() != "a.java" { 329*333d2b36SAndroid Build Coastguard Worker t.Errorf(`foo turbine apt inputs %v != ["a.java"]`, turbineApt.Inputs) 330*333d2b36SAndroid Build Coastguard Worker } 331*333d2b36SAndroid Build Coastguard Worker if len(javac.Inputs) != 1 || javac.Inputs[0].String() != "a.java" { 332*333d2b36SAndroid Build Coastguard Worker t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs) 333*333d2b36SAndroid Build Coastguard Worker } 334*333d2b36SAndroid Build Coastguard Worker 335*333d2b36SAndroid Build Coastguard Worker // Test that the kapt stubs jar is a dependency of turbine-apt 336*333d2b36SAndroid Build Coastguard Worker if !inList(kaptStubs.Output.String(), turbineApt.Implicits.Strings()) { 337*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q in turbine-apt implicits %v", kaptStubs.Output.String(), kotlinc.Implicits.Strings()) 338*333d2b36SAndroid Build Coastguard Worker } 339*333d2b36SAndroid Build Coastguard Worker 340*333d2b36SAndroid Build Coastguard Worker // Test that the turbine-apt srcjar is a dependency of kotlinc and javac rules 341*333d2b36SAndroid Build Coastguard Worker if !inList(turbineApt.Output.String(), kotlinc.Implicits.Strings()) { 342*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q in kotlinc implicits %v", turbineApt.Output.String(), kotlinc.Implicits.Strings()) 343*333d2b36SAndroid Build Coastguard Worker } 344*333d2b36SAndroid Build Coastguard Worker if !inList(turbineApt.Output.String(), javac.Implicits.Strings()) { 345*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q in javac implicits %v", turbineApt.Output.String(), javac.Implicits.Strings()) 346*333d2b36SAndroid Build Coastguard Worker } 347*333d2b36SAndroid Build Coastguard Worker 348*333d2b36SAndroid Build Coastguard Worker // Test that the turbine-apt srcjar is extracted by the kotlinc and javac rules 349*333d2b36SAndroid Build Coastguard Worker if kotlinc.Args["srcJars"] != turbineApt.Output.String() { 350*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q in kotlinc srcjars %v", turbineApt.Output.String(), kotlinc.Args["srcJars"]) 351*333d2b36SAndroid Build Coastguard Worker } 352*333d2b36SAndroid Build Coastguard Worker if javac.Args["srcJars"] != turbineApt.Output.String() { 353*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %q in javac srcjars %v", turbineApt.Output.String(), kotlinc.Args["srcJars"]) 354*333d2b36SAndroid Build Coastguard Worker } 355*333d2b36SAndroid Build Coastguard Worker 356*333d2b36SAndroid Build Coastguard Worker // Test that the processors are passed to kapt 357*333d2b36SAndroid Build Coastguard Worker expectedProcessorPath := "-P plugin:org.jetbrains.kotlin.kapt3:apclasspath=" + bar + 358*333d2b36SAndroid Build Coastguard Worker " -P plugin:org.jetbrains.kotlin.kapt3:apclasspath=" + baz 359*333d2b36SAndroid Build Coastguard Worker if kaptStubs.Args["kaptProcessorPath"] != expectedProcessorPath { 360*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected kaptProcessorPath %q, got %q", expectedProcessorPath, kaptStubs.Args["kaptProcessorPath"]) 361*333d2b36SAndroid Build Coastguard Worker } 362*333d2b36SAndroid Build Coastguard Worker expectedProcessor := "-P plugin:org.jetbrains.kotlin.kapt3:processors=com.bar -P plugin:org.jetbrains.kotlin.kapt3:processors=com.baz" 363*333d2b36SAndroid Build Coastguard Worker if kaptStubs.Args["kaptProcessor"] != expectedProcessor { 364*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected kaptProcessor %q, got %q", expectedProcessor, kaptStubs.Args["kaptProcessor"]) 365*333d2b36SAndroid Build Coastguard Worker } 366*333d2b36SAndroid Build Coastguard Worker 367*333d2b36SAndroid Build Coastguard Worker // Test that the processors are passed to turbine-apt 368*333d2b36SAndroid Build Coastguard Worker expectedProcessorPath = "--processorpath " + bar + " " + baz 369*333d2b36SAndroid Build Coastguard Worker if !strings.Contains(turbineApt.Args["turbineFlags"], expectedProcessorPath) { 370*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected turbine-apt processorpath %q, got %q", expectedProcessorPath, turbineApt.Args["turbineFlags"]) 371*333d2b36SAndroid Build Coastguard Worker } 372*333d2b36SAndroid Build Coastguard Worker expectedProcessor = "--processors com.bar com.baz" 373*333d2b36SAndroid Build Coastguard Worker if !strings.Contains(turbineApt.Args["turbineFlags"], expectedProcessor) { 374*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected turbine-apt processor %q, got %q", expectedProcessor, turbineApt.Args["turbineFlags"]) 375*333d2b36SAndroid Build Coastguard Worker } 376*333d2b36SAndroid Build Coastguard Worker 377*333d2b36SAndroid Build Coastguard Worker // Test that the processors are not passed to javac 378*333d2b36SAndroid Build Coastguard Worker if javac.Args["processorpath"] != "" { 379*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected processorPath '', got %q", javac.Args["processorpath"]) 380*333d2b36SAndroid Build Coastguard Worker } 381*333d2b36SAndroid Build Coastguard Worker if javac.Args["processor"] != "-proc:none" { 382*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected processor '-proc:none', got %q", javac.Args["processor"]) 383*333d2b36SAndroid Build Coastguard Worker } 384*333d2b36SAndroid Build Coastguard Worker }) 385*333d2b36SAndroid Build Coastguard Worker 386*333d2b36SAndroid Build Coastguard Worker t.Run("errorprone", func(t *testing.T) { 387*333d2b36SAndroid Build Coastguard Worker env := map[string]string{ 388*333d2b36SAndroid Build Coastguard Worker "RUN_ERROR_PRONE": "true", 389*333d2b36SAndroid Build Coastguard Worker } 390*333d2b36SAndroid Build Coastguard Worker 391*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 392*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaDefaultModules, 393*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeEnv(env), 394*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, bp) 395*333d2b36SAndroid Build Coastguard Worker 396*333d2b36SAndroid Build Coastguard Worker buildOS := result.Config.BuildOS.String() 397*333d2b36SAndroid Build Coastguard Worker 398*333d2b36SAndroid Build Coastguard Worker kapt := result.ModuleForTests("foo", "android_common").Rule("kapt") 399*333d2b36SAndroid Build Coastguard Worker javac := result.ModuleForTests("foo", "android_common").Description("javac") 400*333d2b36SAndroid Build Coastguard Worker errorprone := result.ModuleForTests("foo", "android_common").Description("errorprone") 401*333d2b36SAndroid Build Coastguard Worker 402*333d2b36SAndroid Build Coastguard Worker bar := result.ModuleForTests("bar", buildOS+"_common").Description("javac").Output.String() 403*333d2b36SAndroid Build Coastguard Worker baz := result.ModuleForTests("baz", buildOS+"_common").Description("javac").Output.String() 404*333d2b36SAndroid Build Coastguard Worker myCheck := result.ModuleForTests("my_check", buildOS+"_common").Description("javac").Output.String() 405*333d2b36SAndroid Build Coastguard Worker 406*333d2b36SAndroid Build Coastguard Worker // Test that the errorprone plugins are not passed to kapt 407*333d2b36SAndroid Build Coastguard Worker expectedProcessorPath := "-P plugin:org.jetbrains.kotlin.kapt3:apclasspath=" + bar + 408*333d2b36SAndroid Build Coastguard Worker " -P plugin:org.jetbrains.kotlin.kapt3:apclasspath=" + baz 409*333d2b36SAndroid Build Coastguard Worker if kapt.Args["kaptProcessorPath"] != expectedProcessorPath { 410*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected kaptProcessorPath %q, got %q", expectedProcessorPath, kapt.Args["kaptProcessorPath"]) 411*333d2b36SAndroid Build Coastguard Worker } 412*333d2b36SAndroid Build Coastguard Worker expectedProcessor := "-P plugin:org.jetbrains.kotlin.kapt3:processors=com.bar -P plugin:org.jetbrains.kotlin.kapt3:processors=com.baz" 413*333d2b36SAndroid Build Coastguard Worker if kapt.Args["kaptProcessor"] != expectedProcessor { 414*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected kaptProcessor %q, got %q", expectedProcessor, kapt.Args["kaptProcessor"]) 415*333d2b36SAndroid Build Coastguard Worker } 416*333d2b36SAndroid Build Coastguard Worker 417*333d2b36SAndroid Build Coastguard Worker // Test that the errorprone plugins are not passed to javac 418*333d2b36SAndroid Build Coastguard Worker if javac.Args["processorpath"] != "" { 419*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected processorPath '', got %q", javac.Args["processorpath"]) 420*333d2b36SAndroid Build Coastguard Worker } 421*333d2b36SAndroid Build Coastguard Worker if javac.Args["processor"] != "-proc:none" { 422*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected processor '-proc:none', got %q", javac.Args["processor"]) 423*333d2b36SAndroid Build Coastguard Worker } 424*333d2b36SAndroid Build Coastguard Worker 425*333d2b36SAndroid Build Coastguard Worker // Test that the errorprone plugins are passed to errorprone 426*333d2b36SAndroid Build Coastguard Worker expectedProcessorPath = "-processorpath " + myCheck 427*333d2b36SAndroid Build Coastguard Worker if errorprone.Args["processorpath"] != expectedProcessorPath { 428*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected processorpath %q, got %q", expectedProcessorPath, errorprone.Args["processorpath"]) 429*333d2b36SAndroid Build Coastguard Worker } 430*333d2b36SAndroid Build Coastguard Worker if errorprone.Args["processor"] != "-proc:none" { 431*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected processor '-proc:none', got %q", errorprone.Args["processor"]) 432*333d2b36SAndroid Build Coastguard Worker } 433*333d2b36SAndroid Build Coastguard Worker }) 434*333d2b36SAndroid Build Coastguard Worker} 435*333d2b36SAndroid Build Coastguard Worker 436*333d2b36SAndroid Build Coastguard Workerfunc TestKaptEncodeFlags(t *testing.T) { 437*333d2b36SAndroid Build Coastguard Worker // Compares the kaptEncodeFlags against the results of the example implementation at 438*333d2b36SAndroid Build Coastguard Worker // https://kotlinlang.org/docs/reference/kapt.html#apjavac-options-encoding 439*333d2b36SAndroid Build Coastguard Worker tests := []struct { 440*333d2b36SAndroid Build Coastguard Worker in [][2]string 441*333d2b36SAndroid Build Coastguard Worker out string 442*333d2b36SAndroid Build Coastguard Worker }{ 443*333d2b36SAndroid Build Coastguard Worker { 444*333d2b36SAndroid Build Coastguard Worker // empty input 445*333d2b36SAndroid Build Coastguard Worker in: [][2]string{}, 446*333d2b36SAndroid Build Coastguard Worker out: "rO0ABXcEAAAAAA==", 447*333d2b36SAndroid Build Coastguard Worker }, 448*333d2b36SAndroid Build Coastguard Worker { 449*333d2b36SAndroid Build Coastguard Worker // common input 450*333d2b36SAndroid Build Coastguard Worker in: [][2]string{ 451*333d2b36SAndroid Build Coastguard Worker {"-source", "1.8"}, 452*333d2b36SAndroid Build Coastguard Worker {"-target", "1.8"}, 453*333d2b36SAndroid Build Coastguard Worker }, 454*333d2b36SAndroid Build Coastguard Worker out: "rO0ABXcgAAAAAgAHLXNvdXJjZQADMS44AActdGFyZ2V0AAMxLjg=", 455*333d2b36SAndroid Build Coastguard Worker }, 456*333d2b36SAndroid Build Coastguard Worker { 457*333d2b36SAndroid Build Coastguard Worker // input that serializes to a 255 byte block 458*333d2b36SAndroid Build Coastguard Worker in: [][2]string{ 459*333d2b36SAndroid Build Coastguard Worker {"-source", "1.8"}, 460*333d2b36SAndroid Build Coastguard Worker {"-target", "1.8"}, 461*333d2b36SAndroid Build Coastguard Worker {"a", strings.Repeat("b", 218)}, 462*333d2b36SAndroid Build Coastguard Worker }, 463*333d2b36SAndroid Build Coastguard Worker out: "rO0ABXf/AAAAAwAHLXNvdXJjZQADMS44AActdGFyZ2V0AAMxLjgAAWEA2mJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi", 464*333d2b36SAndroid Build Coastguard Worker }, 465*333d2b36SAndroid Build Coastguard Worker { 466*333d2b36SAndroid Build Coastguard Worker // input that serializes to a 256 byte block 467*333d2b36SAndroid Build Coastguard Worker in: [][2]string{ 468*333d2b36SAndroid Build Coastguard Worker {"-source", "1.8"}, 469*333d2b36SAndroid Build Coastguard Worker {"-target", "1.8"}, 470*333d2b36SAndroid Build Coastguard Worker {"a", strings.Repeat("b", 219)}, 471*333d2b36SAndroid Build Coastguard Worker }, 472*333d2b36SAndroid Build Coastguard Worker out: "rO0ABXoAAAEAAAAAAwAHLXNvdXJjZQADMS44AActdGFyZ2V0AAMxLjgAAWEA22JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYg==", 473*333d2b36SAndroid Build Coastguard Worker }, 474*333d2b36SAndroid Build Coastguard Worker { 475*333d2b36SAndroid Build Coastguard Worker // input that serializes to a 257 byte block 476*333d2b36SAndroid Build Coastguard Worker in: [][2]string{ 477*333d2b36SAndroid Build Coastguard Worker {"-source", "1.8"}, 478*333d2b36SAndroid Build Coastguard Worker {"-target", "1.8"}, 479*333d2b36SAndroid Build Coastguard Worker {"a", strings.Repeat("b", 220)}, 480*333d2b36SAndroid Build Coastguard Worker }, 481*333d2b36SAndroid Build Coastguard Worker out: "rO0ABXoAAAEBAAAAAwAHLXNvdXJjZQADMS44AActdGFyZ2V0AAMxLjgAAWEA3GJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmI=", 482*333d2b36SAndroid Build Coastguard Worker }, 483*333d2b36SAndroid Build Coastguard Worker } 484*333d2b36SAndroid Build Coastguard Worker 485*333d2b36SAndroid Build Coastguard Worker for i, test := range tests { 486*333d2b36SAndroid Build Coastguard Worker t.Run(strconv.Itoa(i), func(t *testing.T) { 487*333d2b36SAndroid Build Coastguard Worker got := kaptEncodeFlags(test.in) 488*333d2b36SAndroid Build Coastguard Worker if got != test.out { 489*333d2b36SAndroid Build Coastguard Worker t.Errorf("\nwant %q\n got %q", test.out, got) 490*333d2b36SAndroid Build Coastguard Worker } 491*333d2b36SAndroid Build Coastguard Worker }) 492*333d2b36SAndroid Build Coastguard Worker } 493*333d2b36SAndroid Build Coastguard Worker} 494*333d2b36SAndroid Build Coastguard Worker 495*333d2b36SAndroid Build Coastguard Workerfunc TestKotlinCompose(t *testing.T) { 496*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 497*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaDefaultModules, 498*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 499*333d2b36SAndroid Build Coastguard Worker java_library { 500*333d2b36SAndroid Build Coastguard Worker name: "androidx.compose.runtime_runtime", 501*333d2b36SAndroid Build Coastguard Worker } 502*333d2b36SAndroid Build Coastguard Worker 503*333d2b36SAndroid Build Coastguard Worker kotlin_plugin { 504*333d2b36SAndroid Build Coastguard Worker name: "androidx.compose.compiler_compiler-hosted-plugin", 505*333d2b36SAndroid Build Coastguard Worker } 506*333d2b36SAndroid Build Coastguard Worker 507*333d2b36SAndroid Build Coastguard Worker java_library { 508*333d2b36SAndroid Build Coastguard Worker name: "withcompose", 509*333d2b36SAndroid Build Coastguard Worker srcs: ["a.kt"], 510*333d2b36SAndroid Build Coastguard Worker plugins: ["plugin"], 511*333d2b36SAndroid Build Coastguard Worker static_libs: ["androidx.compose.runtime_runtime"], 512*333d2b36SAndroid Build Coastguard Worker } 513*333d2b36SAndroid Build Coastguard Worker 514*333d2b36SAndroid Build Coastguard Worker java_library { 515*333d2b36SAndroid Build Coastguard Worker name: "nocompose", 516*333d2b36SAndroid Build Coastguard Worker srcs: ["a.kt"], 517*333d2b36SAndroid Build Coastguard Worker } 518*333d2b36SAndroid Build Coastguard Worker 519*333d2b36SAndroid Build Coastguard Worker java_plugin { 520*333d2b36SAndroid Build Coastguard Worker name: "plugin", 521*333d2b36SAndroid Build Coastguard Worker } 522*333d2b36SAndroid Build Coastguard Worker `) 523*333d2b36SAndroid Build Coastguard Worker 524*333d2b36SAndroid Build Coastguard Worker buildOS := result.Config.BuildOS.String() 525*333d2b36SAndroid Build Coastguard Worker 526*333d2b36SAndroid Build Coastguard Worker composeCompiler := result.ModuleForTests("androidx.compose.compiler_compiler-hosted-plugin", buildOS+"_common").Rule("combineJar").Output 527*333d2b36SAndroid Build Coastguard Worker withCompose := result.ModuleForTests("withcompose", "android_common") 528*333d2b36SAndroid Build Coastguard Worker noCompose := result.ModuleForTests("nocompose", "android_common") 529*333d2b36SAndroid Build Coastguard Worker 530*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "missing compose compiler dependency", 531*333d2b36SAndroid Build Coastguard Worker withCompose.Rule("kotlinc").Implicits.Strings(), composeCompiler.String()) 532*333d2b36SAndroid Build Coastguard Worker 533*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "missing compose compiler plugin", 534*333d2b36SAndroid Build Coastguard Worker withCompose.VariablesForTestsRelativeToTop()["kotlincFlags"], "-Xplugin="+composeCompiler.String()) 535*333d2b36SAndroid Build Coastguard Worker 536*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "missing kapt compose compiler dependency", 537*333d2b36SAndroid Build Coastguard Worker withCompose.Rule("kapt").Implicits.Strings(), composeCompiler.String()) 538*333d2b36SAndroid Build Coastguard Worker 539*333d2b36SAndroid Build Coastguard Worker android.AssertStringListDoesNotContain(t, "unexpected compose compiler dependency", 540*333d2b36SAndroid Build Coastguard Worker noCompose.Rule("kotlinc").Implicits.Strings(), composeCompiler.String()) 541*333d2b36SAndroid Build Coastguard Worker 542*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "unexpected compose compiler plugin", 543*333d2b36SAndroid Build Coastguard Worker noCompose.VariablesForTestsRelativeToTop()["kotlincFlags"], "-Xplugin="+composeCompiler.String()) 544*333d2b36SAndroid Build Coastguard Worker} 545*333d2b36SAndroid Build Coastguard Worker 546*333d2b36SAndroid Build Coastguard Workerfunc TestKotlinPlugin(t *testing.T) { 547*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 548*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithJavaDefaultModules, 549*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 550*333d2b36SAndroid Build Coastguard Worker kotlin_plugin { 551*333d2b36SAndroid Build Coastguard Worker name: "kotlin_plugin", 552*333d2b36SAndroid Build Coastguard Worker } 553*333d2b36SAndroid Build Coastguard Worker 554*333d2b36SAndroid Build Coastguard Worker java_library { 555*333d2b36SAndroid Build Coastguard Worker name: "with_kotlin_plugin", 556*333d2b36SAndroid Build Coastguard Worker srcs: ["a.kt"], 557*333d2b36SAndroid Build Coastguard Worker plugins: ["plugin"], 558*333d2b36SAndroid Build Coastguard Worker kotlin_plugins: ["kotlin_plugin"], 559*333d2b36SAndroid Build Coastguard Worker } 560*333d2b36SAndroid Build Coastguard Worker 561*333d2b36SAndroid Build Coastguard Worker java_library { 562*333d2b36SAndroid Build Coastguard Worker name: "no_kotlin_plugin", 563*333d2b36SAndroid Build Coastguard Worker srcs: ["a.kt"], 564*333d2b36SAndroid Build Coastguard Worker } 565*333d2b36SAndroid Build Coastguard Worker 566*333d2b36SAndroid Build Coastguard Worker java_plugin { 567*333d2b36SAndroid Build Coastguard Worker name: "plugin", 568*333d2b36SAndroid Build Coastguard Worker } 569*333d2b36SAndroid Build Coastguard Worker `) 570*333d2b36SAndroid Build Coastguard Worker 571*333d2b36SAndroid Build Coastguard Worker buildOS := result.Config.BuildOS.String() 572*333d2b36SAndroid Build Coastguard Worker 573*333d2b36SAndroid Build Coastguard Worker kotlinPlugin := result.ModuleForTests("kotlin_plugin", buildOS+"_common").Rule("combineJar").Output 574*333d2b36SAndroid Build Coastguard Worker withKotlinPlugin := result.ModuleForTests("with_kotlin_plugin", "android_common") 575*333d2b36SAndroid Build Coastguard Worker noKotlinPlugin := result.ModuleForTests("no_kotlin_plugin", "android_common") 576*333d2b36SAndroid Build Coastguard Worker 577*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "missing plugin compiler dependency", 578*333d2b36SAndroid Build Coastguard Worker withKotlinPlugin.Rule("kotlinc").Implicits.Strings(), kotlinPlugin.String()) 579*333d2b36SAndroid Build Coastguard Worker 580*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "missing kotlin plugin", 581*333d2b36SAndroid Build Coastguard Worker withKotlinPlugin.VariablesForTestsRelativeToTop()["kotlincFlags"], "-Xplugin="+kotlinPlugin.String()) 582*333d2b36SAndroid Build Coastguard Worker 583*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "missing kapt kotlin plugin dependency", 584*333d2b36SAndroid Build Coastguard Worker withKotlinPlugin.Rule("kapt").Implicits.Strings(), kotlinPlugin.String()) 585*333d2b36SAndroid Build Coastguard Worker 586*333d2b36SAndroid Build Coastguard Worker android.AssertStringListDoesNotContain(t, "unexpected kotlin plugin dependency", 587*333d2b36SAndroid Build Coastguard Worker noKotlinPlugin.Rule("kotlinc").Implicits.Strings(), kotlinPlugin.String()) 588*333d2b36SAndroid Build Coastguard Worker 589*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "unexpected kotlin plugin", 590*333d2b36SAndroid Build Coastguard Worker noKotlinPlugin.VariablesForTestsRelativeToTop()["kotlincFlags"], "-Xplugin="+kotlinPlugin.String()) 591*333d2b36SAndroid Build Coastguard Worker} 592