[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'
|
||||
}
|
||||
|
||||
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") {
|
||||
it.defFile 'interop/kt43502/kt43502.def'
|
||||
it.headers "$projectDir/interop/kt43502/kt43502.h"
|
||||
@@ -1150,11 +1126,6 @@ standaloneTest("interop_objc_allocException") {
|
||||
UtilsKt.dependsOnPlatformLibs(it)
|
||||
}
|
||||
|
||||
interopTest("interop_embedStaticLibraries") {
|
||||
source = "interop/embedStaticLibraries/main.kt"
|
||||
interop = 'embedStaticLibraries'
|
||||
}
|
||||
|
||||
dynamicTest("interop_kt43502") {
|
||||
interop = "kt43502"
|
||||
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
|
||||
|
||||
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.isSimulator
|
||||
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.util.ClangDistribution
|
||||
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.junit.jupiter.api.Assumptions
|
||||
import org.junit.jupiter.api.Tag
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.io.File
|
||||
import kotlin.test.assertTrue
|
||||
import kotlin.time.Duration
|
||||
|
||||
@TestDataPath("\$PROJECT_ROOT")
|
||||
class ClassicComplexCInteropTest : ComplexCInteropTestBase()
|
||||
@@ -40,6 +43,68 @@ abstract class ComplexCInteropTestBase : AbstractNativeSimpleTest() {
|
||||
private val interopDir = File("native/native.tests/testData/interop")
|
||||
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
|
||||
@TestMetadata("smoke.kt")
|
||||
fun testInteropObjCSmokeGC() {
|
||||
|
||||
Reference in New Issue
Block a user