[ObjCExport] Add object translation and error handling
- Also add forward declaration tests - Add hidden types support - Issues: KT-64857, KT-64952, KT-65080
This commit is contained in:
committed by
Space Team
parent
c483e54e2d
commit
480b8ec516
+18
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.konan.testUtils
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCHeader
|
||||
import java.io.File
|
||||
|
||||
interface HeaderGenerator {
|
||||
|
||||
data class Configuration(
|
||||
val frameworkName: String = "",
|
||||
)
|
||||
|
||||
fun generateHeaders(root: File, configuration: Configuration = Configuration()): ObjCHeader
|
||||
}
|
||||
+2
-1
@@ -9,4 +9,5 @@ import java.io.File
|
||||
|
||||
val testDataDir = File("native/objcexport-header-generator/testData")
|
||||
val headersTestDataDir = testDataDir.resolve("headers")
|
||||
val baseDeclarationsDir = testDataDir.resolve("baseDeclarations")
|
||||
val baseDeclarationsDir = testDataDir.resolve("baseDeclarations")
|
||||
val forwardDeclarationsDir = testDataDir.resolve("forwardDeclarations")
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.konan.tests
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.HeaderGenerator
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.forwardDeclarationsDir
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.io.File
|
||||
import kotlin.test.fail
|
||||
|
||||
class ObjCExportForwardDeclarationsTest(
|
||||
private val generator: HeaderGenerator,
|
||||
) {
|
||||
|
||||
@Test
|
||||
fun `test - function returning interface`() {
|
||||
doTest(forwardDeclarationsDir.resolve("functionReturningInterface"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - function returning class`() {
|
||||
doTest(forwardDeclarationsDir.resolve("functionReturningClass"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - property returning interface`() {
|
||||
doTest(forwardDeclarationsDir.resolve("propertyReturningInterface"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - property returning class`() {
|
||||
doTest(forwardDeclarationsDir.resolve("propertyReturningClass"))
|
||||
}
|
||||
|
||||
private fun doTest(root: File) {
|
||||
if (!root.isDirectory) fail("Expected ${root.absolutePath} to be directory")
|
||||
val generatedHeaders = generator.generateHeaders(root)
|
||||
val renderedForwardDeclarations = buildString {
|
||||
generatedHeaders.renderClassForwardDeclarations().forEach(this::appendLine)
|
||||
generatedHeaders.renderProtocolForwardDeclarations().forEach(this::appendLine)
|
||||
}
|
||||
KotlinTestUtils.assertEqualsToFile(root.resolve("!${root.nameWithoutExtension}.h"), renderedForwardDeclarations)
|
||||
}
|
||||
}
|
||||
+17
-4
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.konan.tests
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.HeaderGenerator
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.HeaderGenerator.Configuration
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.headersTestDataDir
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -110,6 +112,11 @@ class ObjCExportHeaderGeneratorTest(val generator: HeaderGenerator) {
|
||||
doTest(headersTestDataDir.resolve("functionWithErrorType"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - functionWithErrorTypeAndFrameworkName`() {
|
||||
doTest(headersTestDataDir.resolve("functionWithErrorTypeAndFrameworkName"), Configuration(frameworkName = "shared"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - kdocWithBlockTags`() {
|
||||
doTest(headersTestDataDir.resolve("kdocWithBlockTags"))
|
||||
@@ -145,13 +152,19 @@ class ObjCExportHeaderGeneratorTest(val generator: HeaderGenerator) {
|
||||
doTest(headersTestDataDir.resolve("dispatchAndExtensionReceiverWithMustBeDocumentedAnnotation"))
|
||||
}
|
||||
|
||||
fun interface HeaderGenerator {
|
||||
fun generateHeaders(root: File): String
|
||||
@Test
|
||||
fun `test - classWithUnresolvedSuperType`() {
|
||||
doTest(headersTestDataDir.resolve("classWithUnresolvedSuperType"))
|
||||
}
|
||||
|
||||
private fun doTest(root: File) {
|
||||
@Test
|
||||
fun `test - classWithUnresolvedSuperTypeGenerics`() {
|
||||
doTest(headersTestDataDir.resolve("classWithUnresolvedSuperTypeGenerics"))
|
||||
}
|
||||
|
||||
private fun doTest(root: File, configuration: Configuration = Configuration()) {
|
||||
if (!root.isDirectory) fail("Expected ${root.absolutePath} to be directory")
|
||||
val generatedHeaders = generator.generateHeaders(root)
|
||||
val generatedHeaders = generator.generateHeaders(root, configuration).toString()
|
||||
KotlinTestUtils.assertEqualsToFile(root.resolve("!${root.nameWithoutExtension}.h"), generatedHeaders)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user