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
87 changes: 87 additions & 0 deletions gradle/common.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
apply plugin: 'jacoco'

apply from: "$project.rootDir/gradle/ci.gradle"
apply from: "$project.rootDir/dependencies.gradle"

tasks.withType(Test).configureEach {
jacoco {
includeNoLocationClasses = true
excludes = ['jdk.internal.*']
}
}

afterEvaluate {
jacocoCodeCoverageReporting()
}

android {
compileSdk rootProject.ext.targetSdk

Expand All @@ -12,16 +25,90 @@ android {
}

buildTypes {
debug {
enableUnitTestCoverage = true
enableAndroidTestCoverage = false
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = '17'
}
}

def jacocoCodeCoverageReporting() {
def exclusions = [
'**/R.class',
'**/R\$*.class',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*Test*.*'
]

def buildTypes = android.buildTypes.collect { type ->
type.name
}
def productFlavors = android.productFlavors.collect { flavor ->
flavor.name
}

if (!productFlavors) productFlavors.add('')

productFlavors.each { productFlavorName ->
buildTypes.each { buildTypeName ->
def sourceName, sourcePath
if (!productFlavorName) {
sourceName = sourcePath = "${buildTypeName}"
} else {
sourceName = "${productFlavorName}${buildTypeName.capitalize()}"
sourcePath = "${productFlavorName}/${buildTypeName}"
}

def testTaskName = "test${sourceName.capitalize()}UnitTest"
def jacocoTaskName = "jacoco${testTaskName.capitalize()}Coverage"

System.out.println("[Jacoco] Task -> ${project.displayName.replace('\'', '')}:${jacocoTaskName}")

tasks.register(jacocoTaskName, JacocoReport) {
dependsOn([testTaskName])

group = "Reporting"
description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build."

reports {
xml.required = false
csv.required = false
html.required = true
}

sourceDirectories.setFrom(layout.projectDirectory.dir("src/main"))

classDirectories.setFrom(
files(
fileTree(layout.buildDirectory.dir("intermediates/javac/")) {
exclude(exclusions)
},
fileTree(layout.buildDirectory.dir("tmp/kotlin-classes/")) {
exclude(exclusions)
}
)
)

executionData.setFrom(
files(
fileTree(layout.buildDirectory) { include("**/*.exec", "**/*.ec") }
)
)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,13 @@ import com.shifthackz.aisdv1.presentation.navigation.router.main.MainRouter
import com.shifthackz.aisdv1.presentation.stub.stubSchedulersProvider
import io.mockk.every
import io.mockk.mockk
import io.mockk.unmockkAll
import io.mockk.verify
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.core.Single
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.After
import org.junit.Assert
import org.junit.Before
import org.junit.Test
Expand Down Expand Up @@ -73,12 +72,6 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
} returns Single.just(Base64ToBitmapConverter.Output(stubBitmap))
}

@After
override fun finalize() {
super.finalize()
unmockkAll()
}

@Test
fun `initialized, loaded ai generation result, expected UI state is Content`() {
val expected = GalleryDetailState.Content(
Expand Down Expand Up @@ -109,6 +102,7 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
fun `given received CopyToClipboard intent, expected ShareClipBoard effect delivered to effect collector`() {
viewModel.processIntent(GalleryDetailIntent.CopyToClipboard("text"))
runTest {
advanceUntilIdle()
val expected = GalleryDetailEffect.ShareClipBoard("text")
val actual = viewModel.effect.firstOrNull()
Assert.assertEquals(expected, actual)
Expand Down Expand Up @@ -153,6 +147,7 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
viewModel.processIntent(GalleryDetailIntent.Export.Image)

runTest {
advanceUntilIdle()
viewModel.effect.test {
Assert.assertEquals(GalleryDetailEffect.ShareImageFile(stubFile), awaitItem())
}
Expand All @@ -166,6 +161,7 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
fun `given received Export Params intent, expected ShareGenerationParams effect delivered to effect collector`() {
viewModel.processIntent(GalleryDetailIntent.Export.Params)
runTest {
advanceUntilIdle()
val expected = GalleryDetailEffect.ShareGenerationParams(viewModel.state.value)
val actual = viewModel.effect.firstOrNull()
Assert.assertEquals(expected, actual)
Expand Down