[K/N][Tests] Migrate test embedStaticLibraries.kt
^KT-61259
This commit is contained in:
committed by
Space Team
parent
6e8a7d4662
commit
3ad8fed5a3
@@ -947,30 +947,6 @@ createInterop("sockets") {
|
|||||||
it.defFile 'interop/basics/sockets.def'
|
it.defFile 'interop/basics/sockets.def'
|
||||||
}
|
}
|
||||||
|
|
||||||
createInterop("embedStaticLibraries") {
|
|
||||||
it.defFile 'interop/embedStaticLibraries/embedStaticLibraries.def'
|
|
||||||
it.headers "$projectDir/interop/embedStaticLibraries/embedStaticLibraries.h"
|
|
||||||
|
|
||||||
// Note: also hardcoded in def file.
|
|
||||||
final File libDir = project.layout.buildDirectory.dir("embedStaticLibraries").get().asFile
|
|
||||||
|
|
||||||
it.getByTarget(target.name).configure {
|
|
||||||
doFirst {
|
|
||||||
1.upto(4) {
|
|
||||||
UtilsKt.buildStaticLibrary(
|
|
||||||
project,
|
|
||||||
[file("$projectDir/interop/embedStaticLibraries/${it}.c")],
|
|
||||||
file("$libDir/${it}.a"),
|
|
||||||
file("$libDir/${it}.objs"),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
it.extraOpts '-staticLibrary', "1.a"
|
|
||||||
it.extraOpts '-staticLibrary', "2.a"
|
|
||||||
}
|
|
||||||
|
|
||||||
createInterop("kt43502") {
|
createInterop("kt43502") {
|
||||||
it.defFile 'interop/kt43502/kt43502.def'
|
it.defFile 'interop/kt43502/kt43502.def'
|
||||||
it.headers "$projectDir/interop/kt43502/kt43502.h"
|
it.headers "$projectDir/interop/kt43502/kt43502.h"
|
||||||
@@ -1150,11 +1126,6 @@ standaloneTest("interop_objc_allocException") {
|
|||||||
UtilsKt.dependsOnPlatformLibs(it)
|
UtilsKt.dependsOnPlatformLibs(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
interopTest("interop_embedStaticLibraries") {
|
|
||||||
source = "interop/embedStaticLibraries/main.kt"
|
|
||||||
interop = 'embedStaticLibraries'
|
|
||||||
}
|
|
||||||
|
|
||||||
dynamicTest("interop_kt43502") {
|
dynamicTest("interop_kt43502") {
|
||||||
interop = "kt43502"
|
interop = "kt43502"
|
||||||
source = "interop/kt43502/main.kt"
|
source = "interop/kt43502/main.kt"
|
||||||
|
|||||||
-2
@@ -1,2 +0,0 @@
|
|||||||
libraryPaths = build/embedStaticLibraries
|
|
||||||
staticLibraries = 3.a 4.a
|
|
||||||
+65
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.konan.test.blackbox
|
package org.jetbrains.kotlin.konan.test.blackbox
|
||||||
|
|
||||||
import com.intellij.testFramework.TestDataPath
|
import com.intellij.testFramework.TestDataPath
|
||||||
|
import org.jetbrains.kotlin.konan.target.ClangArgs
|
||||||
import org.jetbrains.kotlin.konan.target.Family
|
import org.jetbrains.kotlin.konan.target.Family
|
||||||
import org.jetbrains.kotlin.konan.target.isSimulator
|
import org.jetbrains.kotlin.konan.target.isSimulator
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.*
|
import org.jetbrains.kotlin.konan.test.blackbox.support.*
|
||||||
@@ -21,12 +22,14 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.settings.*
|
|||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.ClangDistribution
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.ClangDistribution
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.compileWithClang
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.compileWithClang
|
||||||
|
import org.jetbrains.kotlin.native.executors.runProcess
|
||||||
import org.jetbrains.kotlin.test.TestMetadata
|
import org.jetbrains.kotlin.test.TestMetadata
|
||||||
import org.junit.jupiter.api.Assumptions
|
import org.junit.jupiter.api.Assumptions
|
||||||
import org.junit.jupiter.api.Tag
|
import org.junit.jupiter.api.Tag
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
import kotlin.time.Duration
|
||||||
|
|
||||||
@TestDataPath("\$PROJECT_ROOT")
|
@TestDataPath("\$PROJECT_ROOT")
|
||||||
class ClassicComplexCInteropTest : ComplexCInteropTestBase()
|
class ClassicComplexCInteropTest : ComplexCInteropTestBase()
|
||||||
@@ -40,6 +43,68 @@ abstract class ComplexCInteropTestBase : AbstractNativeSimpleTest() {
|
|||||||
private val interopDir = File("native/native.tests/testData/interop")
|
private val interopDir = File("native/native.tests/testData/interop")
|
||||||
private val interopObjCDir = interopDir.resolve("objc")
|
private val interopObjCDir = interopDir.resolve("objc")
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("embedStaticLibraries.kt")
|
||||||
|
fun testEmbedStaticLibraries() {
|
||||||
|
val llvmAr = ClangArgs.Native(testRunSettings.configurables).llvmAr().first()
|
||||||
|
val embedStaticLibrariesDir = interopDir.resolve("embedStaticLibraries")
|
||||||
|
(1..4).forEach {
|
||||||
|
val source = embedStaticLibrariesDir.resolve("$it.c")
|
||||||
|
val obj = buildDir.resolve("$it.o")
|
||||||
|
compileWithClang(
|
||||||
|
clangDistribution = ClangDistribution.Llvm,
|
||||||
|
sourceFiles = listOf(source),
|
||||||
|
includeDirectories = emptyList(),
|
||||||
|
outputFile = obj,
|
||||||
|
libraryDirectories = emptyList(),
|
||||||
|
libraries = emptyList(),
|
||||||
|
additionalClangFlags = listOf("-c"),
|
||||||
|
fmodules = false, // with `-fmodules`, ld cannot find symbol `_assert`
|
||||||
|
).assertSuccess()
|
||||||
|
val libFile = buildDir.resolve("$it.a")
|
||||||
|
runProcess(llvmAr, "-rc", libFile.absolutePath, obj.absolutePath) {
|
||||||
|
timeout = Duration.parse("1m")
|
||||||
|
}
|
||||||
|
assertTrue(libFile.exists())
|
||||||
|
}
|
||||||
|
val defFile = buildDir.resolve("embedStaticLibraries.def").also {
|
||||||
|
it.printWriter().use {
|
||||||
|
it.println(
|
||||||
|
"""
|
||||||
|
libraryPaths = ${buildDir.absolutePath.replace("\\", "/")}
|
||||||
|
staticLibraries = 3.a 4.a
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val cinteropKlib = cinteropToLibrary(
|
||||||
|
targets = targets,
|
||||||
|
defFile = defFile,
|
||||||
|
outputDir = buildDir,
|
||||||
|
freeCompilerArgs = TestCompilerArgs(
|
||||||
|
emptyList(), cinteropArgs = listOf(
|
||||||
|
"-header", embedStaticLibrariesDir.resolve("embedStaticLibraries.h").absolutePath,
|
||||||
|
"-staticLibrary", "1.a",
|
||||||
|
"-staticLibrary", "2.a",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
).assertSuccess().resultingArtifact
|
||||||
|
|
||||||
|
val testCase = generateTestCaseWithSingleFile(
|
||||||
|
sourceFile = embedStaticLibrariesDir.resolve("embedStaticLibraries.kt"),
|
||||||
|
testKind = TestKind.STANDALONE_NO_TR,
|
||||||
|
extras = TestCase.NoTestRunnerExtras("main"),
|
||||||
|
freeCompilerArgs = TestCompilerArgs("-opt-in=kotlinx.cinterop.ExperimentalForeignApi"),
|
||||||
|
)
|
||||||
|
val compilationResult = compileToExecutable(testCase, cinteropKlib.asLibraryDependency()).assertSuccess()
|
||||||
|
val testExecutable = TestExecutable(
|
||||||
|
compilationResult.resultingArtifact,
|
||||||
|
compilationResult.loggedData,
|
||||||
|
listOf(TestName("embedStaticLibraries"))
|
||||||
|
)
|
||||||
|
runExecutableAndVerify(testCase, testExecutable)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("smoke.kt")
|
@TestMetadata("smoke.kt")
|
||||||
fun testInteropObjCSmokeGC() {
|
fun testInteropObjCSmokeGC() {
|
||||||
|
|||||||
Reference in New Issue
Block a user