[Gradle][KT-53342] Implement simple SingleTargetAndroidSourceSetLayoutTest
This commit is contained in:
committed by
Space
parent
f45a073dc0
commit
e307b96671
+73
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("FunctionName")
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.sources.android
|
||||||
|
|
||||||
|
import com.android.build.gradle.BaseExtension
|
||||||
|
import com.android.build.gradle.LibraryPlugin
|
||||||
|
import org.gradle.api.internal.project.ProjectInternal
|
||||||
|
import org.gradle.testfixtures.ProjectBuilder
|
||||||
|
import org.jetbrains.kotlin.gradle.addBuildEventsListenerRegistryMock
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.BeforeTest
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertSame
|
||||||
|
|
||||||
|
class SingleTargetAndroidSourceSetLayoutTest {
|
||||||
|
private val project = ProjectBuilder.builder().build() as ProjectInternal
|
||||||
|
|
||||||
|
private val android: BaseExtension = run {
|
||||||
|
addBuildEventsListenerRegistryMock(project)
|
||||||
|
project.plugins.apply(LibraryPlugin::class.java)
|
||||||
|
project.androidExtension
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeTest
|
||||||
|
fun setup() {
|
||||||
|
project.plugins.apply(KotlinAndroidPluginWrapper::class.java)
|
||||||
|
android.compileSdkVersion(31)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test - default configuration - AndroidSourceSet has associated KotlinSourceSet`() {
|
||||||
|
android.sourceSets.all { androidSourceSet -> project.assertSingleKotlinSourceSet(androidSourceSet) }
|
||||||
|
project.evaluate()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Suppress("deprecation")
|
||||||
|
fun `test - default configuration - AndroidSourceSet has KotlinSourceSet as convention`() {
|
||||||
|
android.sourceSets.all { androidSourceSet ->
|
||||||
|
assertSame(
|
||||||
|
project.assertSingleKotlinSourceSet(androidSourceSet),
|
||||||
|
(androidSourceSet as org.gradle.api.internal.HasConvention).convention.plugins["kotlin"] as? KotlinSourceSet,
|
||||||
|
"Expected Convention 'kotlin' on AndroidSourceSet: ${androidSourceSet.name}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
project.evaluate()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test - with flavors - AndroidSourceSet has associated KotlinSourceSet`() {
|
||||||
|
android.flavorDimensions("price", "market")
|
||||||
|
android.productFlavors {
|
||||||
|
it.create("free").dimension = "price"
|
||||||
|
it.create("paid").dimension = "price"
|
||||||
|
it.create("german").dimension = "market"
|
||||||
|
it.create("usa").dimension = "market"
|
||||||
|
}
|
||||||
|
|
||||||
|
android.sourceSets.all { androidSourceSet ->
|
||||||
|
val kotlinSourceSet = project.assertSingleKotlinSourceSet(androidSourceSet)
|
||||||
|
assertEquals(androidSourceSet.name, kotlinSourceSet.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("DEPRECATION")
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.sources.android
|
||||||
|
|
||||||
|
import com.android.build.gradle.api.AndroidSourceSet
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.androidSourceSetInfoOrNull
|
||||||
|
import kotlin.test.fail
|
||||||
|
|
||||||
|
fun Project.assertSingleKotlinSourceSet(androidSourceSet: AndroidSourceSet): KotlinSourceSet {
|
||||||
|
val kotlinSourceSets = kotlinExtension.sourceSets
|
||||||
|
.filter { kotlinSourceSet -> kotlinSourceSet.androidSourceSetInfoOrNull?.androidSourceSetName == androidSourceSet.name }
|
||||||
|
|
||||||
|
if (kotlinSourceSets.isEmpty()) {
|
||||||
|
fail("Missing KotlinSourceSet for AndroidSourceSet: ${androidSourceSet.name}")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kotlinSourceSets.size > 1) {
|
||||||
|
fail(
|
||||||
|
"More than one KotlinSourceSet associated with AndroidSourceSet: ${androidSourceSet.name}. " +
|
||||||
|
"KotlinSourceSets: ${kotlinSourceSets.map { it.name }}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return kotlinSourceSets.single()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user