Skip to content

Commit

Permalink
Improved checks of disabled plugin before running Kover tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
shanshin committed Jan 31, 2022
1 parent d613bb3 commit 488f4fc
Show file tree
Hide file tree
Showing 13 changed files with 102 additions and 59 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package kotlinx.kover.test.functional.cases

import kotlinx.kover.test.functional.cases.utils.assertCounterFullyCovered
import kotlinx.kover.test.functional.cases.utils.defaultXmlProjectReport
import kotlinx.kover.test.functional.cases.utils.defaultXmlReport
import kotlinx.kover.test.functional.cases.utils.defaultMergedXmlReport
import kotlinx.kover.test.functional.core.BaseGradleScriptTest
import kotlin.test.*

Expand All @@ -16,7 +16,7 @@ internal class AdaptersTests : BaseGradleScriptTest() {
*/
internalSample("different-plugins")
.run("koverMergedXmlReport") {
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
assertCounterFullyCovered(classCounter("org.jetbrains.CommonClass"))
assertCounterFullyCovered(classCounter("org.jetbrains.JvmClass"))
}
Expand All @@ -25,7 +25,7 @@ internal class AdaptersTests : BaseGradleScriptTest() {
internalSample("different-plugins")
.run("koverXmlReport") {
subproject("subproject-multiplatform") {
xml(defaultXmlProjectReport()) {
xml(defaultXmlReport()) {
assertCounterFullyCovered(classCounter("org.jetbrains.CommonClass"))
assertCounterFullyCovered(classCounter("org.jetbrains.JvmClass"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ internal class DefaultConfigTests : BaseGradleScriptTest() {
.build()
.run("build") {
checkDefaultBinaryReport()
checkDefaultReports()
checkDefaultMergedReports()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ internal class InstrumentationFilteringTests : BaseGradleScriptTest() {
)
.build()
.run("build") {
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
assertCounterNotCovered(classCounter("org.jetbrains.ExampleClass"))
assertCounterCovered(classCounter("org.jetbrains.SecondClass"))
}
Expand All @@ -45,7 +45,7 @@ internal class InstrumentationFilteringTests : BaseGradleScriptTest() {
)
.build()
.run("build") {
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
assertCounterNotCovered(classCounter("org.jetbrains.ExampleClass"))
assertCounterNotCovered(classCounter("org.jetbrains.Unused"))
assertCounterCovered(classCounter("org.jetbrains.SecondClass"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package kotlinx.kover.test.functional.cases

import kotlinx.kover.api.*
import kotlinx.kover.test.functional.cases.utils.*
import kotlinx.kover.test.functional.cases.utils.defaultXmlReport
import kotlinx.kover.test.functional.cases.utils.defaultMergedXmlReport
import kotlinx.kover.test.functional.core.BaseGradleScriptTest
import kotlinx.kover.test.functional.core.ProjectType
import org.gradle.testkit.runner.*
import kotlin.test.*

internal class MultiProjectTests : BaseGradleScriptTest() {
Expand All @@ -21,7 +22,7 @@ internal class MultiProjectTests : BaseGradleScriptTest() {
}
.build()
.run("build") {
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
assertCounterFullyCovered(classCounter("org.jetbrains.CommonClass"))
assertCounterFullyCovered(classCounter("org.jetbrains.CommonInternalClass"))
assertCounterFullyCovered(classCounter("org.jetbrains.UserClass"))
Expand All @@ -40,14 +41,14 @@ internal class MultiProjectTests : BaseGradleScriptTest() {
}
.build()
.run("koverReport") {
xml(defaultXmlProjectReport()) {
xml(defaultXmlReport()) {
assertCounterAbsent(classCounter("org.jetbrains.CommonClass"))
assertCounterAbsent(classCounter("org.jetbrains.CommonInternalClass"))
assertCounterFullyCovered(classCounter("org.jetbrains.UserClass"))
}

subproject(subprojectName) {
xml(defaultXmlProjectReport()) {
xml(defaultXmlReport()) {
assertCounterAbsent(classCounter("org.jetbrains.UserClass"))

// common class covered partially because calls from the root project are not counted
Expand All @@ -70,14 +71,14 @@ internal class MultiProjectTests : BaseGradleScriptTest() {
}
.build()
.run("koverReport") {
xml(defaultXmlProjectReport()) {
xml(defaultXmlReport()) {
assertCounterAbsent(classCounter("org.jetbrains.CommonClass"))
assertCounterAbsent(classCounter("org.jetbrains.CommonInternalClass"))
assertCounterFullyCovered(classCounter("org.jetbrains.UserClass"))
}

subproject(subprojectName) {
xml(defaultXmlProjectReport()) {
xml(defaultXmlReport()) {
assertCounterAbsent(classCounter("org.jetbrains.UserClass"))

// common class fully covered because calls from the root project are counted too
Expand All @@ -88,9 +89,35 @@ internal class MultiProjectTests : BaseGradleScriptTest() {
}
}

@Test
fun testDisabledKover() {
builder("Testing disabling whole Kover")
.sources("multiproject-user")
.subproject(subprojectName) {
sources("multiproject-common")
}
.configKover { disabled = true }
.build()
.run("build", "koverHtmlReport") {
checkDefaultBinaryReport(false)
checkOutcome("koverMergedHtmlReport", TaskOutcome.SKIPPED)
checkOutcome("koverMergedVerify", TaskOutcome.SKIPPED)

checkOutcome("koverHtmlReport", TaskOutcome.SKIPPED)
checkOutcome("koverVerify", TaskOutcome.SKIPPED)
checkOutcome("koverMergedHtmlReport", TaskOutcome.SKIPPED)

subproject(subprojectName) {
checkDefaultBinaryReport(false)
checkOutcome("koverHtmlReport", TaskOutcome.SKIPPED)
checkOutcome("koverVerify", TaskOutcome.SKIPPED)
}
}
}

@Test
fun testDisableSubproject() {
builder("Testing disabling tests of subproject")
builder("Testing disabling one of subproject")
.types(ProjectType.KOTLIN_JVM, ProjectType.KOTLIN_MULTIPLATFORM)
.engines(CoverageEngine.INTELLIJ, CoverageEngine.JACOCO)
.sources("multiproject-user")
Expand All @@ -101,9 +128,9 @@ internal class MultiProjectTests : BaseGradleScriptTest() {
.build()
.run("build", "koverReport") {
checkDefaultBinaryReport()
checkDefaultMergedReports()
checkDefaultReports()
checkDefaultProjectReports()
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
assertCounterFullyCovered(classCounter("org.jetbrains.UserClass"))

// classes from disabled project should not be included in the merged report
Expand All @@ -113,8 +140,8 @@ internal class MultiProjectTests : BaseGradleScriptTest() {

subproject(subprojectName) {
checkDefaultBinaryReport(false)
checkDefaultMergedReports(false)
checkDefaultReports(false)
checkDefaultProjectReports(false)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@ internal class ReportsCachingTests : BaseGradleScriptTest() {
.build()
.run("build", "--build-cache") {
checkDefaultBinaryReport()
checkDefaultReports()
outcome(":test") { assertEquals(TaskOutcome.SUCCESS, this) }
outcome(":koverMergedXmlReport") { assertEquals(TaskOutcome.SUCCESS, this) }
outcome(":koverMergedHtmlReport") { assertEquals(TaskOutcome.SUCCESS, this) }
checkDefaultMergedReports()
checkOutcome("test", TaskOutcome.SUCCESS)
checkOutcome("koverMergedXmlReport", TaskOutcome.SUCCESS)
checkOutcome("koverMergedHtmlReport", TaskOutcome.SUCCESS)
}
.run("clean", "--build-cache") {
checkDefaultBinaryReport(false)
checkDefaultReports(false)
checkDefaultMergedReports(false)
}
.run("build", "--build-cache") {
checkDefaultBinaryReport()
checkDefaultReports()
outcome(":test") { assertEquals(TaskOutcome.FROM_CACHE, this) }
outcome(":koverMergedXmlReport") { assertEquals(TaskOutcome.FROM_CACHE, this) }
outcome(":koverMergedHtmlReport") { assertEquals(TaskOutcome.FROM_CACHE, this) }
checkDefaultMergedReports()
checkOutcome("test", TaskOutcome.FROM_CACHE)
checkOutcome("koverMergedXmlReport", TaskOutcome.FROM_CACHE)
checkOutcome("koverMergedHtmlReport", TaskOutcome.FROM_CACHE)
}
}

Expand All @@ -43,21 +43,21 @@ internal class ReportsCachingTests : BaseGradleScriptTest() {
.build()
.run("koverReport", "--build-cache") {
checkDefaultBinaryReport()
checkDefaultProjectReports()
outcome(":test") { assertEquals(TaskOutcome.SUCCESS, this) }
outcome(":koverXmlReport") { assertEquals(TaskOutcome.SUCCESS, this) }
outcome(":koverHtmlReport") { assertEquals(TaskOutcome.SUCCESS, this) }
checkDefaultReports()
checkOutcome("test", TaskOutcome.SUCCESS)
checkOutcome("koverXmlReport", TaskOutcome.SUCCESS)
checkOutcome("koverHtmlReport", TaskOutcome.SUCCESS)
}
.run("clean", "--build-cache") {
checkDefaultBinaryReport(false)
checkDefaultProjectReports(false)
checkDefaultReports(false)
}
.run("koverReport", "--build-cache") {
checkDefaultBinaryReport()
checkDefaultProjectReports()
outcome(":test") { assertEquals(TaskOutcome.FROM_CACHE, this) }
outcome(":koverXmlReport") { assertEquals(TaskOutcome.FROM_CACHE, this) }
outcome(":koverHtmlReport") { assertEquals(TaskOutcome.FROM_CACHE, this) }
checkDefaultReports()
checkOutcome("test", TaskOutcome.FROM_CACHE)
checkOutcome("koverXmlReport", TaskOutcome.FROM_CACHE)
checkOutcome("koverHtmlReport", TaskOutcome.FROM_CACHE)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ internal class ReportsFilteringTests : BaseGradleScriptTest() {
)
.build()
.run("build") {
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
assertCounterAbsent(classCounter("org.jetbrains.ExampleClass"))
assertCounterCovered(classCounter("org.jetbrains.SecondClass"))
}
Expand All @@ -51,7 +51,7 @@ internal class ReportsFilteringTests : BaseGradleScriptTest() {
)
.build()
.run("build") {
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
assertCounterAbsent(classCounter("org.jetbrains.ExampleClass"))
assertCounterAbsent(classCounter("org.jetbrains.Unused"))
assertCounterFullyCovered(classCounter("org.jetbrains.SecondClass"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ internal class BranchCounterTests: BaseGradleScriptTest() {
.sources("branches")
.build()
.run("build") {
xml(defaultXmlReport()) {
xml(defaultMergedXmlReport()) {
val counter = methodCounter("org.jetbrains.MyBranchedClass", "foo", type = "BRANCH")
assertNotNull(counter)
assertEquals(1, counter.covered)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package kotlinx.kover.test.functional.cases.utils
import kotlinx.kover.api.*
import kotlinx.kover.test.functional.core.*
import kotlinx.kover.test.functional.core.RunResult
import org.gradle.testkit.runner.*
import kotlin.test.*

internal fun RunResult.checkDefaultBinaryReport(mustExist: Boolean = true) {
Expand All @@ -20,12 +21,18 @@ internal fun RunResult.checkDefaultBinaryReport(mustExist: Boolean = true) {
}
}

internal fun RunResult.checkDefaultMergedReports(mustExist: Boolean = true) {
checkReports(defaultMergedXmlReport(), defaultMergedHtmlReport(), mustExist)
}

internal fun RunResult.checkDefaultReports(mustExist: Boolean = true) {
checkReports(defaultXmlReport(), defaultHtmlReport(), mustExist)
}

internal fun RunResult.checkDefaultProjectReports(mustExist: Boolean = true) {
checkReports(defaultXmlProjectReport(), defaultHtmlProjectReport(), mustExist)
internal fun RunResult.checkOutcome(taskName: String, outcome: TaskOutcome) {
outcome(taskName) {
assertEquals(outcome, this)
}
}

internal fun RunResult.checkReports(xmlPath: String, htmlPath: String, mustExist: Boolean) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ internal fun defaultBinaryReport(engine: CoverageEngine, projectType: ProjectTyp
}
}

internal fun defaultXmlReport() = "reports/kover/report.xml"
internal fun defaultHtmlReport() = "reports/kover/html"
internal fun defaultMergedXmlReport() = "reports/kover/report.xml"
internal fun defaultMergedHtmlReport() = "reports/kover/html"

internal fun defaultXmlProjectReport() = "reports/kover/project-xml/report.xml"
internal fun defaultHtmlProjectReport() = "reports/kover/project-html"
internal fun defaultXmlReport() = "reports/kover/project-xml/report.xml"
internal fun defaultHtmlReport() = "reports/kover/project-html"

internal fun errorsDirectory() = "kover/errors"
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,11 @@ private fun org.gradle.testkit.runner.GradleRunner.addPluginTestRuntimeClasspath
}


private class RunResultImpl(private val result: BuildResult, private val dir: File) : RunResult {
private class RunResultImpl(
private val result: BuildResult,
private val dir: File,
private val path: String = ":"
) : RunResult {
val buildDir: File = File(dir, "build")

private val buildScriptFile: File = buildFile()
Expand Down Expand Up @@ -90,7 +94,7 @@ private class RunResultImpl(private val result: BuildResult, private val dir: Fi
}

override fun subproject(name: String, checker: RunResult.() -> Unit) {
RunResultImpl(result, File(dir, name)).also(checker)
RunResultImpl(result, File(dir, name), "$path$name:").also(checker)
}

override fun output(checker: String.() -> Unit) {
Expand All @@ -107,9 +111,9 @@ private class RunResultImpl(private val result: BuildResult, private val dir: Fi
XmlReportImpl(xmlFile).checker()
}

override fun outcome(taskPath: String, checker: TaskOutcome.() -> Unit) {
result.task(taskPath)?.outcome?.checker()
?: throw IllegalArgumentException("Task '$taskPath' not found in build result")
override fun outcome(taskName: String, checker: TaskOutcome.() -> Unit) {
result.task(path + taskName)?.outcome?.checker()
?: throw IllegalArgumentException("Task '$taskName' with path '$path$taskName' not found in build result")
}

private fun buildFile(): File {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ internal interface RunResult {

fun xml(filename: String, checker: XmlReport.() -> Unit)

fun outcome(taskPath: String, checker: TaskOutcome.() -> Unit)
fun outcome(taskName: String, checker: TaskOutcome.() -> Unit)
}


Expand Down
12 changes: 7 additions & 5 deletions src/main/kotlin/kotlinx/kover/KoverPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class KoverPlugin : Plugin<Project> {
target.createMergedTasks(providers)
}

private fun Project.applyToProject(providers: AllProviders, agents: Map<CoverageEngine, CoverageAgent>) {
private fun Project.applyToProject(providers: BuildProviders, agents: Map<CoverageEngine, CoverageAgent>) {
val projectProviders =
providers.projects[name] ?: throw GradleException("Kover: Providers for project '$name' was not found")

Expand Down Expand Up @@ -104,7 +104,7 @@ class KoverPlugin : Plugin<Project> {
}
}

private fun Project.createMergedTasks(providers: AllProviders) {
private fun Project.createMergedTasks(providers: BuildProviders) {
val xmlReportTask = createKoverMergedTask(
MERGED_XML_REPORT_TASK_NAME,
KoverMergedXmlReportTask::class,
Expand Down Expand Up @@ -157,7 +157,7 @@ class KoverPlugin : Plugin<Project> {
private fun <T : KoverMergedTask> Project.createKoverMergedTask(
taskName: String,
type: KClass<T>,
providers: AllProviders,
providers: BuildProviders,
block: (T) -> Unit
): T {
return tasks.create(taskName, type.java) { task ->
Expand All @@ -173,6 +173,8 @@ class KoverPlugin : Plugin<Project> {
task.classpath.set(providers.classpath)
task.dependsOn(providers.merged.tests)

task.onlyIf { !providers.merged.disabled.get() }

block(task)
}
}
Expand Down Expand Up @@ -204,7 +206,7 @@ class KoverPlugin : Plugin<Project> {
private fun <T : KoverProjectTask> Project.createKoverProjectTask(
taskName: String,
type: KClass<T>,
providers: AllProviders,
providers: BuildProviders,
projectProviders: ProjectProviders,
block: (T) -> Unit
): T {
Expand Down Expand Up @@ -241,7 +243,7 @@ class KoverPlugin : Plugin<Project> {
}

private fun Test.configTestTask(
providers: AllProviders,
providers: BuildProviders,
agents: Map<CoverageEngine, CoverageAgent>
) {
val taskExtension = extensions.create(TASK_EXTENSION_NAME, KoverTaskExtension::class.java, project.objects)
Expand Down
Loading

0 comments on commit 488f4fc

Please sign in to comment.