Tests to check the existence of kotlin-stdlib in runtime

This commit is contained in:
Andrew Golovashevich 2025-03-26 01:50:35 +03:00
parent 9282313552
commit 6581c14072
3 changed files with 136 additions and 1 deletions

View File

@ -68,6 +68,7 @@ xomrk {
}
}
val jvmMain by getting {
dependsOn(commonMain)
dependencies {
compileOnly(kotlinStdlibDependency)
}

View File

@ -1 +1,5 @@
kotlin.code.style=official
kotlin.stdlib.default.dependency=false
kotlin.mpp.applyDefaultHierarchyTemplate=false
kotlin.native.enableKlibsCrossCompilation=true
# compileOnly dependencies from commonMain still throw warning
kotlin.suppressGradlePluginWarnings=IncorrectCompileOnlyDependencyWarning

View File

@ -0,0 +1,130 @@
package ru.landrafhomyak.utility.reference_counter.tests
import java.lang.AssertionError
import org.testng.annotations.Test
import org.testng.asserts.Assertion
import ru.landgrafhomyak.utility.highlevel_try_finally.safeAutoClose1
import ru.landrafhomyak.utility.reference_counter.CloseableReferenceCounter
import ru.landrafhomyak.utility.reference_counter.CloseableReferenceCounter_Debug
@Test
class KotlinStdlibDependencyTest {
@Test
fun testNoKotlinStdlib() {
try {
if (KotlinVersion.CURRENT.major != -1)
throw AssertionError("Kotlin stdlib still in runtime classpath")
} catch (_: LinkageError) {
}
}
private class CustomTestException : RuntimeException()
private object CustomUnit
private fun throw7throwFn() {
safeAutoClose1(finally = { throw CustomTestException() }, action = { throw CustomTestException() })
}
@Suppress("NOTHING_TO_INLINE")
private inline fun throw7throwIn() {
safeAutoClose1(finally = { throw CustomTestException() }, action = { throw CustomTestException() })
}
@Test(dependsOnMethods = ["testNoKotlinStdlib"])
fun testIncrefDecrefClose() {
try {
val refcnt = CloseableReferenceCounter("")
refcnt.incref()
refcnt.decref()
refcnt.incref()
refcnt.incref()
refcnt.decref()
refcnt.decref()
refcnt.close("")
} catch (le: LinkageError) {
throw AssertionError("CloseableReferenceCounter still has dependency on kotlin stdlib", le)
}
}
@OptIn(CloseableReferenceCounter_Debug.RequiresExplicitDebug::class)
@Test(dependsOnMethods = ["testNoKotlinStdlib"])
fun testIncrefDecrefClose_Debug() {
try {
val refcnt = CloseableReferenceCounter_Debug("", "")
refcnt.incref()
refcnt.decref()
refcnt.incref()
refcnt.incref()
refcnt.decref()
refcnt.decref()
refcnt.close("")
} catch (le: LinkageError) {
throw AssertionError("CloseableReferenceCounter_Debug still has dependency on kotlin stdlib", le)
}
}
@Test(dependsOnMethods = ["testNoKotlinStdlib", "testIncrefDecrefClose"])
fun testWithRef() {
try {
val refcnt = CloseableReferenceCounter("")
refcnt.withRef {
return@withRef CustomUnit
}
refcnt.withRef w1@{
return@w1 refcnt.withRef w2@{
return@w2 CustomUnit
}
}
refcnt.close("")
} catch (le: LinkageError) {
throw AssertionError("CloseableReferenceCounter still has dependency on kotlin stdlib", le)
}
}
@OptIn(CloseableReferenceCounter_Debug.RequiresExplicitDebug::class)
@Test(dependsOnMethods = ["testNoKotlinStdlib", "testIncrefDecrefClose_Debug"])
fun testWithRef_Debug() {
try {
val refcnt = CloseableReferenceCounter_Debug("", "")
refcnt.withRef {
return@withRef CustomUnit
}
refcnt.withRef w1@{
return@w1 refcnt.withRef w2@{
return@w2 CustomUnit
}
}
refcnt.close("")
} catch (le: LinkageError) {
throw AssertionError("CloseableReferenceCounter_Debug still has dependency on kotlin stdlib", le)
}
}
@Test(dependsOnMethods = ["testNoKotlinStdlib", "testIncrefDecrefClose", "testWithRef"])
fun testWithRef_Err() {
try {
val refcnt = CloseableReferenceCounter("")
refcnt.withRef {
throw CustomTestException()
}
} catch (_: CustomTestException) {
} catch (le: LinkageError) {
throw AssertionError("CloseableReferenceCounter still has dependency on kotlin stdlib", le)
}
}
@OptIn(CloseableReferenceCounter_Debug.RequiresExplicitDebug::class)
@Test(dependsOnMethods = ["testNoKotlinStdlib", "testIncrefDecrefClose_Debug", "testWithRef_Debug"])
fun testWithRef_ErrDebug() {
try {
val refcnt = CloseableReferenceCounter_Debug("", "")
refcnt.withRef {
throw CustomTestException()
}
} catch (_: CustomTestException) {
} catch (le: LinkageError) {
throw AssertionError("CloseableReferenceCounter_Debug still has dependency on kotlin stdlib", le)
}
}
}