blob: 1656a1e130873b1b7f6bcc872cfc1d8ea0d08aae [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id("java-base")
id("jacoco")
}
jacoco {
toolVersion = "0.8.14"
providers.gradleProperty("jacoco.version")
.takeIf { it.isPresent }
?.let { toolVersion = it.get() }
}
val testTasks = tasks.withType<Test>()
val javaExecTasks = tasks.withType<JavaExec>()
.matching { it.name != "runGui" }
// This configuration must be postponed since JacocoTaskExtension might be added inside
// configure block of a task (== before this code is run)
afterEvaluate {
for (t in arrayOf(testTasks, javaExecTasks)) {
t.configureEach {
extensions.findByType<JacocoTaskExtension>()?.apply {
// We don't want to collect coverage for third-party classes
includes?.add("org.apache.jmeter.*")
includes?.add("org.apache.jorphan.*")
includes?.add("org.apache.commons.cli.*")
}
}
}
}
val jacocoReport by rootProject.tasks.existing(JacocoReport::class)
val mainCode = sourceSets["main"]
// TODO: rework with provide-consume configurations
jacocoReport {
// Note: this creates a lazy collection
// Some projects might fail to create a file (e.g. no tests or no coverage),
// So we check for file existence. Otherwise, JacocoMerge would fail
val execFiles =
files(testTasks, javaExecTasks).filter { it.exists() && it.name.endsWith(".exec") }
executionData(execFiles)
additionalSourceDirs.from(mainCode.allJava.srcDirs)
sourceDirectories.from(mainCode.allSource.srcDirs)
classDirectories.from(mainCode.output)
}
// TODO: check which reports do we need
// tasks.configureEach<JacocoReport> {
// reports {
// html.required.set(reportsForHumans())
// xml.required.set(!reportsForHumans())
// }
// }