[K/N] Migrate some cinterop tests to new test infra

This commit is contained in:
Vladimir Sukharev
2023-12-01 11:18:27 +01:00
committed by Space Team
parent 22b2c1a587
commit c5248fc5f4
47 changed files with 295 additions and 176 deletions
@@ -3372,18 +3372,6 @@ createInterop("sockets") {
it.defFile 'interop/basics/sockets.def'
}
createInterop("bitfields") {
it.defFile 'interop/basics/bitfields.def'
}
createInterop("cglobals") {
it.defFile 'interop/basics/cglobals.def'
}
createInterop("cfunptr") {
it.defFile 'interop/basics/cfunptr.def'
}
createInterop("cmacros") {
it.defFile 'interop/basics/cmacros.def'
}
@@ -3392,10 +3380,6 @@ createInterop("cunsupported") {
it.defFile 'interop/basics/cunsupported.def'
}
createInterop("ctoKString") {
it.defFile 'interop/basics/ctoKString.def'
}
createInterop("ctypes") {
it.defFile 'interop/basics/ctypes.def'
}
@@ -3416,10 +3400,6 @@ createInterop("cstructs") {
it.defFile 'interop/basics/cstructs.def'
}
createInterop("ccallbacksAndVarargs") {
it.defFile 'interop/basics/ccallbacksAndVarargs.def'
}
createInterop("cmangling") {
it.defFile 'interop/basics/mangling.def'
}
@@ -3440,22 +3420,6 @@ createInterop("cunion") {
it.defFile 'interop/basics/cunion.def'
}
createInterop("cenums") {
it.defFile 'interop/basics/cenums.def'
}
createInterop("carrayPointers") {
it.defFile 'interop/basics/carrayPointers.def'
}
createInterop("auxiliaryCppSources") {
// We need to provide empty def file to create correct `KonanInteropTask`.
it.defFile 'interop/auxiliary_sources/auxiliaryCppSources.def'
it.headers "$projectDir/interop/auxiliary_sources/name.h"
it.extraOpts "-Xcompile-source", "$projectDir/interop/auxiliary_sources/name.cpp"
it.extraOpts "-Xsource-compiler-option", "-std=c++17"
}
createInterop("concurrentTerminate") {
it.defFile 'interop/concurrentTerminate/concurrentTerminate.def'
it.headers "$projectDir/interop/concurrentTerminate/async.h"
@@ -3464,12 +3428,6 @@ createInterop("concurrentTerminate") {
it.extraOpts "-Xsource-compiler-option", "-std=c++17"
}
createInterop("incomplete_types") {
it.defFile 'interop/incomplete_types/library.def'
it.headers "$projectDir/interop/incomplete_types/library.h"
it.extraOpts "-Xcompile-source", "$projectDir/interop/incomplete_types/library.cpp"
}
createInterop("embedStaticLibraries") {
it.defFile 'interop/embedStaticLibraries/embedStaticLibraries.def'
it.headers "$projectDir/interop/embedStaticLibraries/embedStaticLibraries.h"
@@ -3494,27 +3452,10 @@ createInterop("embedStaticLibraries") {
it.extraOpts '-staticLibrary', "2.a"
}
createInterop("kt43265") {
it.defFile 'interop/kt43265/kt43265.def'
}
createInterop("kt44283") {
it.defFile 'interop/kt44283/kt44283.def'
}
createInterop("kt51925") {
it.defFile 'interop/kt51925/kt51925.def'
}
createInterop("kt54284") {
it.defFile 'interop/kt54284/kt54284.def'
}
createInterop("kt54284_fmodules") {
it.defFile 'interop/kt54284/kt54284.def'
it.extraOpts '-compiler-option', '-fmodules'
}
createInterop("kt43502") {
it.defFile 'interop/kt43502/kt43502.def'
it.headers "$projectDir/interop/kt43502/kt43502.h"
@@ -3566,10 +3507,6 @@ createInterop("workerSignals") {
it.extraOpts "-Xcompile-source", "$projectDir/interop/workerSignals/workerSignals.cpp"
}
createInterop("cForwardDeclarations") {
it.defFile "interop/forwardDeclarations/cForwardDeclarations.def"
}
createInterop("cForwardDeclarationsTwoLibs1") {
it.defFile "interop/forwardDeclarationsTwoLibs/cForwardDeclarationsTwoLibs1.def"
}
@@ -3836,23 +3773,6 @@ standaloneTest("interop5") {
UtilsKt.dependsOnPlatformLibs(it)
}
interopTest("interop_bitfields") {
disabled = isAggressiveGC // TODO: Investigate why too slow
source = "interop/basics/bf.kt"
interop = 'bitfields'
}
interopTest("interop_funptr") {
useGoldenData = true
source = "interop/basics/funptr.kt"
interop = 'cfunptr'
}
interopTest("interop_globals") {
source = "interop/basics/globals.kt"
interop = 'cglobals'
}
interopTest("interop_macros") {
source = "interop/basics/macros.kt"
interop = 'cmacros'
@@ -3863,11 +3783,6 @@ interopTest("interop_unsupported") {
interop = 'cunsupported'
}
interopTest("interop_toKString") {
source = "interop/basics/toKString.kt"
interop = 'ctoKString'
}
interopTest("interop_types") {
source = "interop/basics/types.kt"
interop = 'ctypes'
@@ -3903,11 +3818,6 @@ interopTest("interop_mangling_keywords2") {
interop = 'cmangling_keywords2'
}
interopTest("interop_auxiliarySources") {
source = "interop/auxiliary_sources/main.kt"
interop = 'auxiliaryCppSources'
}
interopTest("interop_concurrentTerminate") {
source = "interop/concurrentTerminate/main.kt"
interop = 'concurrentTerminate'
@@ -3915,11 +3825,6 @@ interopTest("interop_concurrentTerminate") {
expectedExitStatus = 99
}
interopTest("interop_incompleteTypes") {
source = "interop/incomplete_types/main.kt"
interop = 'incomplete_types'
}
interopTest("interop_embedStaticLibraries") {
source = "interop/embedStaticLibraries/main.kt"
interop = 'embedStaticLibraries'
@@ -3935,11 +3840,6 @@ interopTest("interop_structs") {
interop = 'cstructs'
}
interopTest("interop_callbacksAndVarargs") {
source = "interop/basics/callbacksAndVarargs.kt"
interop = 'ccallbacksAndVarargs'
}
interopTest("interop_threadStates") {
source = "interop/threadStates/threadStates.kt"
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
@@ -3982,39 +3882,6 @@ interopTest("interop_union") {
source = "interop/basics/union.kt"
}
interopTest("interop_enums") {
interop = 'cenums'
flags = ['-XXLanguage:+EnumEntries']
source = "interop/basics/enums.kt"
}
interopTest("interop_array_pointers") {
interop = 'carrayPointers'
source = "interop/basics/arrayPointers.kt"
}
interopTest("interop_kt43265") {
interop = 'kt43265'
source = "interop/kt43265/usage.kt"
}
interopTest("interop_kt44283") {
disabled = project.globalTestArgs.contains('-opt') // Incompatible with -g.
flags = ['-g']
interop = 'kt44283'
source = "interop/kt44283/main.kt"
}
interopTest("interop_kt54284") {
interop = 'kt54284'
source = "interop/kt54284/main.kt"
}
interopTest("interop_kt54284_fmodules") {
interop = 'kt54284_fmodules'
source = "interop/kt54284/main.kt"
}
// TODO: This test should be run with caches on.
interopTest("interop_kt51925") {
interop = 'kt51925'
@@ -4038,11 +3905,6 @@ dynamicTest("interop_kt43502") {
useGoldenData = true
}
interopTest("interop_leakMemoryWithRunningThreadUnchecked") {
interop = 'leakMemoryWithRunningThread'
source = "interop/leakMemoryWithRunningThread/unchecked.kt"
}
interopTest("interop_leakMemoryWithRunningThreadChecked") {
interop = 'leakMemoryWithRunningThread'
source = "interop/leakMemoryWithRunningThread/checked.kt"
@@ -4102,11 +3964,6 @@ interopTest("interop_workerSignals") {
interop = "workerSignals"
}
interopTest("interop_forwardDeclarations") {
source = "interop/forwardDeclarations/forwardDeclarations.kt"
interop = "cForwardDeclarations"
}
interopTest("interop_forwardDeclarationsTwoLibs") {
source = "interop/forwardDeclarationsTwoLibs/forwardDeclarationsTwoLibs.kt"
interop = "cForwardDeclarationsTwoLibs1"
@@ -1,6 +1,6 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import carrayPointers.*
import arrayPointers.*
import kotlin.test.*
import kotlinx.cinterop.*
@@ -1,5 +1,5 @@
#include <string>
#include "name.h"
#include "auxiliarySources.aux.h"
static std::string _name = "Hello from C++";
@@ -0,0 +1,2 @@
# The def file is empty intentianally
# `auxiliarySources.aux.h` is meant to be included via `-header` option of cinterop tool
@@ -1,6 +1,6 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import auxiliaryCppSources.*
import auxiliarySources.*
import kotlin.test.*
import kotlinx.cinterop.*
@@ -2,6 +2,8 @@
* Copyright 2010-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
// May need disabling when gcSchedulerType=aggressive . since it may be too slow
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import bitfields.*
@@ -6,7 +6,7 @@
import kotlin.test.*
import kotlinx.cinterop.*
import ccallbacksAndVarargs.*
import callbacksAndVarargs.*
fun main() {
testStructCallbacks()
@@ -2,9 +2,10 @@
* Copyright 2010-2023 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.
*/
// !LANGUAGE: +EnumEntries
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import cenums.*
import enums.*
import kotlinx.cinterop.*
import kotlin.test.*
@@ -1,7 +1,7 @@
// This test mostly checks frontend behaviour.
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import cForwardDeclarations.*
import forwardDeclarations.*
import cnames.structs.StructDeclared
import kotlin.test.assertEquals
@@ -1,3 +1,4 @@
// OUT_DATA_FILE: funptr.out
/*
* Copyright 2010-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
@@ -5,7 +6,7 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import kotlinx.cinterop.*
import cfunptr.*
import funptr.*
import kotlin.test.*
typealias NotSoLongSignatureFunction = (
@@ -5,7 +5,7 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class, kotlin.experimental.ExperimentalNativeApi::class)
import kotlinx.cinterop.*
import cglobals.*
import globals.*
fun main(args: Array<String>) {
assert(g1__ == 42)
@@ -1,5 +1,5 @@
#include <string>
#include "library.h"
#include "incompleteTypes.aux.h"
extern "C" {
@@ -0,0 +1,2 @@
# The def file is empty intentianally
# `incompleteTypes.aux.h` is meant to be included via `-header` option of cinterop tool
@@ -1,6 +1,6 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import library.*
import incompleteTypes.*
import kotlinx.cinterop.*
import kotlin.test.*
@@ -1,6 +1,7 @@
import kt43265.*
import kotlin.test.*
@kotlinx.cinterop.ExperimentalForeignApi
fun main() {
assertEquals(bcm2835FunctionSelect.BCM2835_GPIO_FSEL_ALT3, bcm2835FunctionSelect.BCM2835_GPIO_FSEL_MASK)
}
@@ -7,6 +7,7 @@ import kotlin.test.*
val callbackCounter = AtomicInt(0)
@ExperimentalForeignApi
fun main() {
val func = staticCFunction<CValue<TestStruct>, Unit> {
kotlin.native.runtime.GC.collect() // Helps to ensure that "runtime" is already initialized.
@@ -2,6 +2,7 @@ import kotlinx.cinterop.*
import kt54284.*
import kotlin.test.*
@ExperimentalForeignApi
fun main() {
assertEquals("FILE:__FILE__", KFILE)
assertEquals("LINE:__LINE__", KLINE)
@@ -0,0 +1,8 @@
compilerOpts = -fmodules
---
#define KFILE "FILE:" __FILE__
#define KLINE "LINE:" __LINE__
#define KTIME "TIME:" __TIME__
#define KDATE "DATE:" __DATE__
#define KFILENAME "NAME:" __FILE_NAME__
#define KBASEFILE "BASE:" __BASE_FILE__
@@ -0,0 +1,13 @@
import kotlinx.cinterop.*
import kt54284_fmodules.*
import kotlin.test.*
@ExperimentalForeignApi
fun main() {
assertEquals("FILE:__FILE__", KFILE)
assertEquals("LINE:__LINE__", KLINE)
assertEquals("TIME:__TIME__", KTIME)
assertEquals("DATE:__DATE__", KDATE)
assertEquals("NAME:__FILE_NAME__", KFILENAME)
assertEquals("BASE:__BASE_FILE__", KBASEFILE)
}
@@ -1,2 +1,2 @@
language = Objective-C
headers = library.h
headers = kt63048.h
@@ -1,6 +1,6 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class, kotlin.experimental.ExperimentalObjCName::class)
import library.*
import kt63048.*
import kotlin.test.assertEquals
@ObjCName("KotlinImplWithCompanionPropertyOverride")
@@ -1,4 +1,4 @@
#import "library.h"
#import "kt63048.h"
@implementation WithClassProperty : NSObject
-(instancetype) init {}
@@ -0,0 +1,15 @@
#include "leakMemoryWithRunningThreadUnchecked.h"
#include <atomic>
#include <thread>
extern "C" void test_RunInNewThread(void (*f)()) {
std::atomic<bool> haveRun(false);
std::thread t([f, &haveRun]() {
f();
haveRun = true;
while (true) {}
});
t.detach();
while (!haveRun) {}
}
@@ -0,0 +1,5 @@
package leakMemoryWithRunningThreadUnchecked
---
void test_RunInNewThread(void (*)());
@@ -0,0 +1,9 @@
#ifdef __cplusplus
extern "C" {
#endif
void test_RunInNewThread(void (*)());
#ifdef __cplusplus
}
#endif
@@ -1,6 +1,10 @@
@file:OptIn(kotlin.experimental.ExperimentalNativeApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
@file:OptIn(
kotlin.experimental.ExperimentalNativeApi::class,
kotlin.native.runtime.NativeRuntimeApi::class,
kotlinx.cinterop.ExperimentalForeignApi::class
)
import leakMemory.*
import leakMemoryWithRunningThreadUnchecked.*
import kotlin.concurrent.AtomicInt
import kotlin.native.concurrent.*
import kotlin.native.Platform
@@ -1,6 +1,6 @@
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
import ctoKString.*
import toKString.*
import kotlinx.cinterop.*
import kotlin.native.*
import kotlin.test.*
@@ -25,8 +25,98 @@ public class ClassicNativeCInteropExecutableTest extends AbstractNativeCInteropE
}
@Test
@TestMetadata("KT-63048")
public void testKT_63048() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/KT-63048/");
@TestMetadata("arrayPointers")
public void testArrayPointers() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/arrayPointers/");
}
@Test
@TestMetadata("auxiliarySources")
public void testAuxiliarySources() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/auxiliarySources/");
}
@Test
@TestMetadata("bitfields")
public void testBitfields() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/bitfields/");
}
@Test
@TestMetadata("callbacksAndVarargs")
public void testCallbacksAndVarargs() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/callbacksAndVarargs/");
}
@Test
@TestMetadata("enums")
public void testEnums() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/enums/");
}
@Test
@TestMetadata("forwardDeclarations")
public void testForwardDeclarations() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/forwardDeclarations/");
}
@Test
@TestMetadata("funptr")
public void testFunptr() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/funptr/");
}
@Test
@TestMetadata("globals")
public void testGlobals() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/globals/");
}
@Test
@TestMetadata("incompleteTypes")
public void testIncompleteTypes() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/incompleteTypes/");
}
@Test
@TestMetadata("kt43265")
public void testKt43265() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt43265/");
}
@Test
@TestMetadata("kt44283")
public void testKt44283() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt44283/");
}
@Test
@TestMetadata("kt54284")
public void testKt54284() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt54284/");
}
@Test
@TestMetadata("kt54284_fmodules")
public void testKt54284_fmodules() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt54284_fmodules/");
}
@Test
@TestMetadata("kt63048")
public void testKt63048() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt63048/");
}
@Test
@TestMetadata("leakMemoryWithRunningThreadUnchecked")
public void testLeakMemoryWithRunningThreadUnchecked() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/leakMemoryWithRunningThreadUnchecked/");
}
@Test
@TestMetadata("toKString")
public void testToKString() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/toKString/");
}
}
@@ -29,8 +29,98 @@ public class FirNativeCInteropExecutableTest extends AbstractNativeCInteropExecu
}
@Test
@TestMetadata("KT-63048")
public void testKT_63048() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/KT-63048/");
@TestMetadata("arrayPointers")
public void testArrayPointers() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/arrayPointers/");
}
@Test
@TestMetadata("auxiliarySources")
public void testAuxiliarySources() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/auxiliarySources/");
}
@Test
@TestMetadata("bitfields")
public void testBitfields() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/bitfields/");
}
@Test
@TestMetadata("callbacksAndVarargs")
public void testCallbacksAndVarargs() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/callbacksAndVarargs/");
}
@Test
@TestMetadata("enums")
public void testEnums() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/enums/");
}
@Test
@TestMetadata("forwardDeclarations")
public void testForwardDeclarations() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/forwardDeclarations/");
}
@Test
@TestMetadata("funptr")
public void testFunptr() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/funptr/");
}
@Test
@TestMetadata("globals")
public void testGlobals() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/globals/");
}
@Test
@TestMetadata("incompleteTypes")
public void testIncompleteTypes() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/incompleteTypes/");
}
@Test
@TestMetadata("kt43265")
public void testKt43265() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt43265/");
}
@Test
@TestMetadata("kt44283")
public void testKt44283() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt44283/");
}
@Test
@TestMetadata("kt54284")
public void testKt54284() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt54284/");
}
@Test
@TestMetadata("kt54284_fmodules")
public void testKt54284_fmodules() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt54284_fmodules/");
}
@Test
@TestMetadata("kt63048")
public void testKt63048() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/kt63048/");
}
@Test
@TestMetadata("leakMemoryWithRunningThreadUnchecked")
public void testLeakMemoryWithRunningThreadUnchecked() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/leakMemoryWithRunningThreadUnchecked/");
}
@Test
@TestMetadata("toKString")
public void testToKString() throws Exception {
runTest("native/native.tests/testData/CInterop/executable/toKString/");
}
}
@@ -20,24 +20,41 @@ import java.io.File
abstract class AbstractNativeCInteropExecutableTest : AbstractNativeSimpleTest() {
protected fun runTest(@TestDataFile testDataDir: String) {
val defFile = File(testDataDir, "library.def")
val testName = File(testDataDir).name
val defFile = File(testDataDir, "$testName.def")
muteCInteropTestIfNecessary(defFile, targets.testTarget)
val mFile = File(testDataDir, "library.m")
val ktFile = File(testDataDir, "usage.kt")
val interopSourceFileM = File(testDataDir, "$testName.m")
val interopSourceFileCPP = File(testDataDir, "$testName.cpp")
val interopSourceFile = when {
interopSourceFileM.exists() -> interopSourceFileM
interopSourceFileCPP.exists() -> interopSourceFileCPP
else -> null
}
val ktFile = File(testDataDir, "$testName.kt")
val compilerArgs = buildList {
add("-compiler-option")
add("-I$testDataDir")
val auxHeader = File(testDataDir, "$testName.aux.h")
if (auxHeader.exists()) {
add("-header")
add(auxHeader.absolutePath)
}
interopSourceFile?.let {
add("-Xcompile-source")
add(it.absolutePath)
add("-Xsource-compiler-option")
add("-fobjc-arc")
add("-Xsource-compiler-option")
add("-DNS_FORMAT_ARGUMENT(A)=")
}
}
val library = cinteropToLibrary(
targets = targets,
defFile = defFile,
outputDir = buildDir,
freeCompilerArgs = TestCompilerArgs(
listOf(
"-compiler-option", "-I$testDataDir",
"-Xcompile-source", mFile.absolutePath,
"-Xsource-compiler-option", "-fobjc-arc",
"-Xsource-compiler-option", "-DNS_FORMAT_ARGUMENT(A)=",
)
)
freeCompilerArgs = TestCompilerArgs(compilerArgs)
).assertSuccess().resultingArtifact
val testCase = generateTestCaseWithSingleFile(