Skip to content

Commit

Permalink
Register Kotlin MPP source sets in AGP
Browse files Browse the repository at this point in the history
^KT-43391 fixed
  • Loading branch information
sellmair authored and Sebastian Sellmair committed Nov 24, 2020
1 parent 3a166f3 commit 2c325c4
Show file tree
Hide file tree
Showing 21 changed files with 479 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,55 @@ open class KotlinAndroid36GradleIT : KotlinAndroid33GradleIT() {
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("6.0")

@Test
fun testAndroidMppSourceSets(): Unit = with(Project("new-mpp-android-source-sets", GradleVersionRequired.FOR_MPP_SUPPORT)) {
build("sourceSets") {
assertSuccessful()
assertContains("Java sources: [lib/src/androidTest/java, lib/src/androidAndroidTest/kotlin]")
assertContains("Java sources: [lib/src/androidTestDebug/java, lib/src/androidAndroidTestDebug/kotlin]")
assertContains("Java sources: [lib/src/debug/java, lib/src/androidDebug/kotlin, lib/src/debug/kotlin]")
assertContains("Java sources: [lib/src/main/java, lib/src/androidMain/kotlin, lib/src/main/kotlin]")
assertContains("Java sources: [lib/src/release/java, lib/src/androidRelease/kotlin, lib/src/release/kotlin]")
assertContains("Java sources: [lib/src/test/java, lib/src/androidTest/kotlin, lib/src/test/kotlin]")
assertContains("Java sources: [lib/src/testDebug/java, lib/src/androidTestDebug/kotlin, lib/src/testDebug/kotlin]")
assertContains("Java sources: [lib/src/testRelease/java, lib/src/androidTestRelease/kotlin, lib/src/testRelease/kotlin]")

assertContains("Android resources: [lib/src/main/res, lib/src/androidMain/res]")
assertContains("Assets: [lib/src/main/assets, lib/src/androidMain/assets]")
assertContains("AIDL sources: [lib/src/main/aidl, lib/src/androidMain/aidl]")
assertContains("RenderScript sources: [lib/src/main/rs, lib/src/androidMain/rs]")
assertContains("JNI sources: [lib/src/main/jni, lib/src/androidMain/jni]")
assertContains("JNI libraries: [lib/src/main/jniLibs, lib/src/androidMain/jniLibs]")
assertContains("Java-style resources: [lib/src/main/resources, lib/src/androidMain/resources]")

assertContains("Android resources: [lib/src/androidTestDebug/res, lib/src/androidAndroidTestDebug/res]")
assertContains("Assets: [lib/src/androidTestDebug/assets, lib/src/androidAndroidTestDebug/assets]")
assertContains("AIDL sources: [lib/src/androidTestDebug/aidl, lib/src/androidAndroidTestDebug/aidl]")
assertContains("RenderScript sources: [lib/src/androidTestDebug/rs, lib/src/androidAndroidTestDebug/rs]")
assertContains("JNI sources: [lib/src/androidTestDebug/jni, lib/src/androidAndroidTestDebug/jni]")
assertContains("JNI libraries: [lib/src/androidTestDebug/jniLibs, lib/src/androidAndroidTestDebug/jniLibs]")
assertContains("Java-style resources: [lib/src/androidTestDebug/resources, lib/src/androidAndroidTestDebug/resources]")
}

build("testDebug") {
assertFailed()
assertContains("CommonTest > fail FAILED")
assertContains("TestKotlin > fail FAILED")
assertContains("AndroidTestKotlin > fail FAILED")
assertContains("TestJava > fail FAILED")
}

build("assemble") {
assertSuccessful()
}

// Test for KT-35016: MPP should recognize android instrumented tests correctly
build("connectedAndroidTest") {
assertFailed()
assertContains("No connected devices!")
}
}

@Test
fun testAndroidWithNewMppApp() = with(Project("new-mpp-android", GradleVersionRequired.FOR_MPP_SUPPORT)) {
build("assemble", "compileDebugUnitTestJavaWithJavac", "printCompilerPluginOptions") {
Expand Down Expand Up @@ -600,7 +649,12 @@ fun getSomething() = 10
}

val libAndroidClassesOnlyUtilKt = project.projectDir.getFileByName("LibAndroidClassesOnlyUtil.kt")
libAndroidClassesOnlyUtilKt.modify { it.replace("fun libAndroidClassesOnlyUtil(): String", "fun libAndroidClassesOnlyUtil(): CharSequence") }
libAndroidClassesOnlyUtilKt.modify {
it.replace(
"fun libAndroidClassesOnlyUtil(): String",
"fun libAndroidClassesOnlyUtil(): CharSequence"
)
}
project.build("assembleDebug", options = options) {
assertSuccessful()
val affectedSources = project.projectDir.getFilesByNames("LibAndroidClassesOnlyUtil.kt", "useLibAndroidClassesOnlyUtil.kt")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
buildscript {
repositories {
mavenCentral()
google()
mavenLocal()
jcenter()
}

dependencies {
classpath(kotlin("gradle-plugin:${property("kotlin_version")}"))
classpath("com.android.tools.build:gradle:${property("android_tools_version")}")
}
}

allprojects {
repositories {
mavenCentral()
google()
mavenLocal()
jcenter()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
kotlin.code.style=official
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
plugins {
id("com.android.library")
kotlin("multiplatform")
}

android {
compileSdkVersion(28)
defaultConfig {
minSdkVersion(21)
targetSdkVersion(28)
testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
}
}

kotlin {
android()
macosX64("macos")

sourceSets {
getByName("commonMain").dependencies {
implementation(kotlin("stdlib-common"))
}

getByName("commonMain").dependencies {
implementation(kotlin("test"))
implementation(kotlin("test-annotations-common"))
}

getByName("androidMain").dependencies {
implementation(kotlin("stdlib-jdk8"))
}

getByName("androidAndroidTest").dependencies {
implementation(kotlin("test-junit"))
implementation("com.android.support.test:runner:1.0.2")
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CANT COMPILE THIS FILE!
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import kotlin.test.Test

/**
* Expected to fail!
*/
class AndroidAndroidTest {
@Test
fun fail() {
MainApiKotlin.sayHi()
MainApiJava.sayHi()
CommonApi.throwException()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CANT COMPILE THIS FILE!
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
object AndroidMainApiKotlin {
fun sayHi() = println("HI")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.junit.Test

class AndroidTestJava {
@Test
fun fail() {
MainApiJava.sayHi()
MainApiKotlin.sayHi()
CommonApi.throwException()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.junit.Test

class AndroidTestKotlin {
@Test
fun fail() {
MainApiJava.sayHi()
MainApiKotlin.sayHi()
CommonApi.throwException()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
object CommonApi {
fun throwException(): Unit = error("This is supposed to fail!")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import kotlin.test.Test

/* Expected to fail ! */
class CommonTest {
@Test
fun fail() {
CommonApi.throwException()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<manifest package="io.sellmair.mpp"/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
object MainApiJava {
fun sayHi() = println("HI")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
object MainApiKotlin {
fun sayHi() = println("HI")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import org.junit.Test

class TestJava {

@Test
fun fail() {
MainApiKotlin.sayHi()
MainApiJava.sayHi()
AndroidMainApiKotlin.sayHi()
CommonApi.throwException()
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import kotlin.test.Test

/**
* Expected to fail!
*/
class TestKotlin {
@Test
fun fail() {
MainApiKotlin.sayHi()
MainApiJava.sayHi()
CommonApi.throwException()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
rootProject.name = "mpp-playgound"
include(":lib")
Loading

0 comments on commit 2c325c4

Please sign in to comment.