[ObjCExport] Translate ObjCObject types, respecting the @ExternalObjCClass annotation

KT-65891 Fixed
This commit is contained in:
Sebastian Sellmair
2024-02-20 11:39:31 +01:00
committed by Space Team
parent a5baf42422
commit 622a88ff26
3 changed files with 141 additions and 1 deletions
@@ -567,6 +567,57 @@ class ObjCExportTypeTranslationTest(
assertEquals("NSArray<NSString *> *", header.renderTypesOfSymbol("foo"))
}
@Test
fun `test - ObjCObject - no ExternalObjCClass annotation`() {
val header = header(
"""
class Foo : kotlinx.cinterop.ObjCObject
val foo: Foo get() = error("stub")
""".trimIndent()
)
assertEquals("id", header.renderTypesOfSymbol("foo"))
}
@Test
fun `test - ObjCObject - with ExternalObjCClass annotation`() {
val header = header(
"""
@kotlinx.cinterop.ExternalObjCClass
class Foo: kotlinx.cinterop.ObjCObject
val foo: Foo get() = error("stub")
""".trimIndent()
)
assertEquals("Foo *", header.renderTypesOfSymbol("foo"))
}
@Test
fun `test - ObjCObject - with ExternalObjCClass annotation - in super class`() {
val header = header(
"""
@kotlinx.cinterop.ExternalObjCClass
open class A: kotlinx.cinterop.ObjCObject
class Foo: A()
val foo: Foo get() = error("stub")
""".trimIndent()
)
assertEquals("A *", header.renderTypesOfSymbol("foo"))
}
@Test
fun `test - ObjCObject - with ObjCClass supertype`() {
val header = header(
"""
class Foo: kotlinx.cinterop.ObjCClass
val foo: Foo get() = error("stub")
""".trimIndent()
)
assertEquals("Class", header.renderTypesOfSymbol("foo"))
}
private fun header(
@Language("kotlin") vararg sourceCode: String,
configuration: HeaderGenerator.Configuration = HeaderGenerator.Configuration(),