Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 120 additions & 1 deletion Library/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import org.gradle.kotlin.dsl.invoke

plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.android.coveralls)
id("jacoco")
}

android {
Expand All @@ -23,6 +26,9 @@ android {
"proguard-rules.pro"
)
}
debug { // Asegúrate de que los reports de test estén habilitados para debug
enableUnitTestCoverage = true
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
Expand All @@ -32,7 +38,9 @@ android {
jvmTarget = "17"
}
}

jacoco {
toolVersion = "0.8.5" // La versión que sugeriste en la documentación
}

dependencies {
implementation(libs.androidx.core.ktx)
Expand All @@ -45,3 +53,114 @@ dependencies {
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
}

tasks.register("jacocoReport", JacocoReport::class) {
dependsOn("test") // Aseguramos que los unit tests se ejecuten antes

group = "Reporting"
description = "Generates JaCoCo coverage report for the Library module."

reports {
xml.required.set(true)
html.required.set(true)
}

val fileTreeConfig: (ConfigurableFileTree) -> Unit = {
it.exclude(
"**/R.class", "**/R\$*.class", "**/BuildConfig.*", "**/Manifest*.*", // Android
"android/**/*.*",
"**/*_Factory.class", "**/*_MembersInjector.class", "**/*_Provide*.class" // Dagger/Hilt generated classes (if applicable)
)
}

sourceDirectories.setFrom(files(
"${project.projectDir}/src/main/java",
"${project.projectDir}/src/main/kotlin" // Añadido para Kotlin
))

// Rutas de clases compiladas
classDirectories.setFrom(
fileTree("${project.buildDir}/intermediates/javac/debug") { fileTreeConfig(this) } +
fileTree("${project.buildDir}/tmp/kotlin-classes/debug") { fileTreeConfig(this) }
// Si tienes otros paths de clases compiladas (ej. para variantes específicas), añádelas aquí
)

// Rutas de datos de ejecución de JaCoCo
executionData.setFrom(fileTree(project.buildDir) {
include("jacoco/testDebugUnitTest.exec") // Para Unit Tests
// include("outputs/code_coverage/debugAndroidTest/connected_coverage.exec") // Si tienes Instrumented Tests y quieres incluirlos
})

// Asegúrate de que los archivos de ejecución existan antes de procesar
doFirst {
executionData.setFrom(files(executionData.filter { it.exists() }))
}
}

tasks {
register("jacocoFullReport", JacocoReport::class) {
val jacocoReportTask = this

group = "Coverage reports"

val subTasks = getByName("jacocoReport", JacocoReport::class)
dependsOn(subTasks)

val subSourceDirs = subTasks.sourceDirectories
additionalSourceDirs.setFrom(subSourceDirs)
sourceDirectories.setFrom(subSourceDirs)

classDirectories.setFrom(files(subTasks.classDirectories))
executionData.setFrom(files(subTasks.executionData))

reports {
html.required = true
html.outputLocation = file("$buildDir/reports/jacoco/html")

xml.required = true
xml.outputLocation = file("$buildDir/reports/jacoco/jacocoFullReport.xml")
}

doFirst {
executionData.setFrom(files(executionData.filter { it.exists() }))
}

coverallsJacoco {
dependsOn(jacocoReportTask)

reportPath = "$buildDir/reports/jacoco/jacocoFullReport.xml"
reportSourceSets = subSourceDirs.flatMap { files(it) }
}
}
}


// **Configuración para el plugin de Coveralls:**
// El plugin de Coveralls (asumiendo que es `com.github.klieber.coveralls`)
// automáticamente buscará una tarea JacocoReport y la usará.
// Por defecto, crea una tarea llamada `coverallsJacoco`.
// Solo necesitamos asegurarnos de que `coverallsJacoco` dependa de nuestro `jacocoReport` personalizado.
tasks.named("coverallsJacoco") {
dependsOn(tasks.named("jacocoReport")) // Asegura que 'jacocoReport' se ejecute antes de coverallsJacoco
}

// Opcional: Si quieres un reporte JaCoCo para instrumented tests
// tasks.register("jacocoAndroidTestReport", JacocoReport::class) {
// dependsOn("createDebugCoverageReport") // Esta tarea se genera por AGP para instrumented tests
// group = "Reporting"
// description = "Generates JaCoCo coverage report for Android Instrumented Tests."
//
// reports {
// xml.required.set(true)
// html.required.set(true)
// }
//
// classDirectories.setFrom(fileTree("${project.buildDir}/intermediates/javac/debug") +
// fileTree("${project.buildDir}/tmp/kotlin-classes/debug"))
//
// executionData.setFrom(fileTree(project.buildDir) {
// include("outputs/code_coverage/debugAndroidTest/connected_coverage.exec")
// })
//
// sourceSets.setFrom(files("${project.projectDir}/src/main/java", "${project.projectDir}/src/main/kotlin"))
// }
8 changes: 4 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ plugins {

android {
namespace = "com.blipblipcode.datetime"
compileSdk = 35
compileSdk = 36

defaultConfig {
applicationId = "com.blipblipcode.datetime"
minSdk = 24
targetSdk = 35
targetSdk = 36
versionCode = 1
versionName = "1.0"

Expand Down Expand Up @@ -48,8 +48,8 @@ dependencies {
implementation(platform(libs.androidx.compose.bom))

implementation(libs.threetenabp)
implementation(project(":Library"))
//implementation(libs.dateTime)
//implementation(project(":Library"))
implementation(libs.dateTime)
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
Expand Down
Loading