[ObjCExport] Implement initial processing queue (stable order, dependencies, forward declarations)
This commit will introduce the first processing queue which will take care of properly ordering the 'to translate' symbols as well as taking care of 'dependency' symbols (aka symbols mentioned in signatures or as supertypes). - There are several changes like properly translating types as ObjCProtocolType instead of ObjCClassType (if origin was an interface) - Type translation of generics defined on interfaces will also emit id type. - Add initial nested classes collection to the queue - Add extension function test, add tickets references ^KT-65237 Verification Pending ^KT-65329 Verification Pending
This commit is contained in:
committed by
Space Team
parent
32da1b70f5
commit
797284dada
+2
-1
@@ -10,4 +10,5 @@ import java.io.File
|
||||
val testDataDir = File("native/objcexport-header-generator/testData")
|
||||
val headersTestDataDir = testDataDir.resolve("headers")
|
||||
val baseDeclarationsDir = testDataDir.resolve("baseDeclarations")
|
||||
val forwardDeclarationsDir = testDataDir.resolve("forwardDeclarations")
|
||||
val forwardDeclarationsDir = testDataDir.resolve("forwardDeclarations")
|
||||
val dependenciesDir = testDataDir.resolve("dependencies")
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 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.TodoAnalysisApi
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.dependenciesDir
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.io.File
|
||||
import kotlin.test.fail
|
||||
|
||||
/**
|
||||
* Currently analysis api doesn't fails until full support of stable order and other parts
|
||||
*
|
||||
* Test intended to verify how dependencies are translated, which included
|
||||
* - stable orders
|
||||
* - stubs orders
|
||||
* - depth of traversing (some types must be skipped
|
||||
*/
|
||||
class ObjCDependenciesTypesTest(
|
||||
private val generator: HeaderGenerator,
|
||||
) {
|
||||
|
||||
/**
|
||||
* - Wrong translation of constructors KT-65365
|
||||
* - Bad parsing of versions (SinceKotlin Annotation)
|
||||
* - Missing implementation of mangling
|
||||
*/
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - stringBuilder`() {
|
||||
doTest(dependenciesDir.resolve("stringBuilder"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - iterator`() {
|
||||
doTest(dependenciesDir.resolve("iterator"))
|
||||
}
|
||||
|
||||
/**
|
||||
* - Wrong translation of constructors KT-65365
|
||||
* - Exposing unwanted 'clone' method KT-65629
|
||||
*/
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - array`() {
|
||||
doTest(dependenciesDir.resolve("array"))
|
||||
}
|
||||
|
||||
private fun doTest(root: File) {
|
||||
if (!root.isDirectory) fail("Expected ${root.absolutePath} to be directory")
|
||||
val generatedHeaders = generator.generateHeaders(root, HeaderGenerator.Configuration()).toString()
|
||||
KotlinTestUtils.assertEqualsToFile(root.resolve("!${root.nameWithoutExtension}.h"), generatedHeaders)
|
||||
}
|
||||
}
|
||||
-5
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.backend.konan.tests
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.HeaderGenerator
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.TodoAnalysisApi
|
||||
import org.jetbrains.kotlin.backend.konan.testUtils.forwardDeclarationsDir
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -18,25 +17,21 @@ class ObjCExportForwardDeclarationsTest(
|
||||
) {
|
||||
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - function returning interface`() {
|
||||
doTest(forwardDeclarationsDir.resolve("functionReturningInterface"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - function returning class`() {
|
||||
doTest(forwardDeclarationsDir.resolve("functionReturningClass"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - property returning interface`() {
|
||||
doTest(forwardDeclarationsDir.resolve("propertyReturningInterface"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - property returning class`() {
|
||||
doTest(forwardDeclarationsDir.resolve("propertyReturningClass"))
|
||||
}
|
||||
|
||||
+37
-2
@@ -70,6 +70,9 @@ class ObjCExportHeaderGeneratorTest(private val generator: HeaderGenerator) {
|
||||
doTest(headersTestDataDir.resolve("sameClassNameInDifferentPackage"))
|
||||
}
|
||||
|
||||
/**
|
||||
* Naming of nested classes: KT-65633
|
||||
*/
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - nestedClass`() {
|
||||
@@ -83,7 +86,6 @@ class ObjCExportHeaderGeneratorTest(private val generator: HeaderGenerator) {
|
||||
}
|
||||
|
||||
@Test
|
||||
@TodoAnalysisApi // Early translate of forward declarations
|
||||
fun `test - classImplementingInterface`() {
|
||||
doTest(headersTestDataDir.resolve("classImplementingInterface"))
|
||||
}
|
||||
@@ -178,7 +180,6 @@ class ObjCExportHeaderGeneratorTest(private val generator: HeaderGenerator) {
|
||||
}
|
||||
|
||||
@Test
|
||||
@TodoAnalysisApi // Early translate of forward declarations
|
||||
fun `test - classWithUnresolvedSuperTypeGenerics`() {
|
||||
doTest(headersTestDataDir.resolve("classWithUnresolvedSuperTypeGenerics"))
|
||||
}
|
||||
@@ -198,6 +199,40 @@ class ObjCExportHeaderGeneratorTest(private val generator: HeaderGenerator) {
|
||||
doTest(headersTestDataDir.resolve("manyClassesAndInterfaces"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - classReferencingOtherClassAsReturnType`() {
|
||||
doTest(headersTestDataDir.resolve("classReferencingOtherClassAsReturnType"))
|
||||
}
|
||||
|
||||
/**
|
||||
* - IntIterator has unwanted 'hasNext' exposed
|
||||
* - IntIterator's next method returns int32_t instead of expected Int *
|
||||
*/
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - classReferencingDependencyClassAsReturnType`() {
|
||||
doTest(headersTestDataDir.resolve("classReferencingDependencyClassAsReturnType"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - interfaceReferencingOtherInterfaceAsReturnType`() {
|
||||
doTest(headersTestDataDir.resolve("interfaceReferencingOtherInterfaceAsReturnType"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - interfaceImplementingInterfaceOrder`() {
|
||||
doTest(headersTestDataDir.resolve("interfaceImplementingInterfaceOrder"))
|
||||
}
|
||||
|
||||
/**
|
||||
* Extension functions aren't supported KT-65630
|
||||
*/
|
||||
@Test
|
||||
@TodoAnalysisApi
|
||||
fun `test - extensionFunctions`() {
|
||||
doTest(headersTestDataDir.resolve("extensionFunctions"))
|
||||
}
|
||||
|
||||
private fun doTest(root: File, configuration: Configuration = Configuration()) {
|
||||
if (!root.isDirectory) fail("Expected ${root.absolutePath} to be directory")
|
||||
val generatedHeaders = generator.generateHeaders(root, configuration).toString()
|
||||
|
||||
Reference in New Issue
Block a user