From 524f0d335ed5a63f893244e5f46896031fd285a7 Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Wed, 24 Jan 2024 18:04:17 +0100 Subject: [PATCH] [K/N][Tests] Migrate objcSmoke & objcTests tests ^KT-61259 --- .../interop/objc/Localizable.stringsdict | 0 .../testData}/interop/objc/objcSmoke.def | 2 +- .../testData}/interop/objc/objcTests.def | 2 +- .../testData}/interop/objc/smoke.h | 0 .../testData}/interop/objc/smoke.kt | 0 .../testData}/interop/objc/smoke.m | 0 .../testData}/interop/objc/smoke.out | 0 .../testData}/interop/objc/smoke_noopgc.kt | 0 .../testData}/interop/objc/smoke_noopgc.out | 0 .../interop/objc/tests/KT37067_prefix.h | 0 .../interop/objc/tests/KT37067_prefix.kt | 0 .../interop/objc/tests/KT37067_prefix.m | 0 .../interop/objc/tests/KT38234_override.h | 0 .../interop/objc/tests/KT38234_override.kt | 0 .../interop/objc/tests/KT38234_override.m | 0 .../interop/objc/tests/allocNoRetain.h | 0 .../interop/objc/tests/allocNoRetain.kt | 0 .../interop/objc/tests/allocNoRetain.m | 0 .../testData}/interop/objc/tests/blocks.h | 0 .../testData}/interop/objc/tests/blocks.kt | 0 .../testData}/interop/objc/tests/blocks.m | 0 .../interop/objc/tests/callableReferences.h | 0 .../interop/objc/tests/callableReferences.kt | 0 .../interop/objc/tests/callableReferences.m | 0 .../interop/objc/tests/clashingWithAny.h | 0 .../interop/objc/tests/clashingWithAny.kt | 0 .../interop/objc/tests/clashingWithAny.m | 0 .../objc/tests/constructorReturnsNull.h | 0 .../objc/tests/constructorReturnsNull.kt | 0 .../objc/tests/constructorReturnsNull.m | 0 .../interop/objc/tests/conversions.kt | 0 .../interop/objc/tests/customString.h | 0 .../interop/objc/tests/customString.kt | 0 .../interop/objc/tests/customString.m | 0 .../interop/objc/tests/detachObjCObject.h | 0 .../interop/objc/tests/detachObjCObject.kt | 0 .../interop/objc/tests/detachObjCObject.m | 0 .../testData}/interop/objc/tests/exceptions.h | 0 .../interop/objc/tests/exceptions.kt | 0 .../testData}/interop/objc/tests/exceptions.m | 0 .../objc/tests/initWithCustomSelector.h | 0 .../objc/tests/initWithCustomSelector.kt | 0 .../objc/tests/initWithCustomSelector.m | 0 .../testData}/interop/objc/tests/kt26478.kt | 0 .../testData}/interop/objc/tests/kt35544.kt | 0 .../testData}/interop/objc/tests/kt36766.h | 0 .../testData}/interop/objc/tests/kt36766.kt | 0 .../testData}/interop/objc/tests/kt38850.h | 0 .../testData}/interop/objc/tests/kt38850.kt | 0 .../testData}/interop/objc/tests/kt38850.m | 0 .../testData}/interop/objc/tests/kt41811.h | 0 .../testData}/interop/objc/tests/kt41811.kt | 0 .../testData}/interop/objc/tests/kt41811.m | 0 .../testData}/interop/objc/tests/kt42482.h | 0 .../testData}/interop/objc/tests/kt42482.kt | 0 .../testData}/interop/objc/tests/kt42482.m | 0 .../testData}/interop/objc/tests/kt48491.h | 0 .../testData}/interop/objc/tests/kt49455.h | 0 .../testData}/interop/objc/tests/kt49455.kt | 0 .../testData}/interop/objc/tests/kt49455.m | 0 .../testData}/interop/objc/tests/kt50786.kt | 0 .../testData}/interop/objc/tests/kt53373_1.kt | 0 .../testData}/interop/objc/tests/kt53373_2.kt | 0 .../testData}/interop/objc/tests/main.kt | 0 .../testData}/interop/objc/tests/mangling.h | 0 .../testData}/interop/objc/tests/mangling.kt | 0 .../testData}/interop/objc/tests/mangling.m | 0 .../objc/tests/multipleInheritanceClash.h | 0 .../objc/tests/multipleInheritanceClash.kt | 0 .../objc/tests/multipleInheritanceClash.m | 0 .../interop/objc/tests/nsOutputStream.kt | 0 .../interop/objc/tests/objcWeakRefs.h | 0 .../interop/objc/tests/objcWeakRefs.kt | 0 .../interop/objc/tests/objcWeakRefs.m | 0 .../interop/objc/tests/overrideInit.h | 0 .../interop/objc/tests/overrideInit.kt | 0 .../interop/objc/tests/overrideInit.m | 0 .../testData}/interop/objc/tests/sharing.kt | 0 .../interop/objc/tests/structWithNSObject.h | 0 .../interop/objc/tests/structWithNSObject.kt | 0 .../interop/objc/tests/tryRetainGC.h | 0 .../interop/objc/tests/tryRetainGC.kt | 0 .../interop/objc/tests/tryRetainGC.m | 0 .../testData}/interop/objc/tests/utils.kt | 0 .../testData}/interop/objc/tests/varargs.h | 0 .../testData}/interop/objc/tests/varargs.kt | 0 .../testData}/interop/objc/tests/varargs.m | 0 .../testData}/interop/objc/tests/weakRefs.h | 0 .../testData}/interop/objc/tests/weakRefs.kt | 0 .../objc/tests/workerAutoreleasePool.h | 0 .../objc/tests/workerAutoreleasePool.kt | 0 .../objc/tests/workerAutoreleasePool.m | 0 .../test/blackbox/ComplexCInteropTest.kt | 163 ++++++++++++++++++ .../test/blackbox/NativeSimpleTestUtils.kt | 10 +- .../compilation/CompilationToolCall.kt | 34 ++++ .../support/runner/BaseTestRunProvider.kt | 9 +- .../test/blackbox/support/runner/TestRun.kt | 11 ++ .../konan/test/blackbox/support/util/Clang.kt | 4 +- 98 files changed, 227 insertions(+), 8 deletions(-) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/Localizable.stringsdict (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/objcSmoke.def (64%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/objcTests.def (88%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/smoke.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/smoke.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/smoke.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/smoke.out (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/smoke_noopgc.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/smoke_noopgc.out (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/KT37067_prefix.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/KT37067_prefix.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/KT37067_prefix.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/KT38234_override.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/KT38234_override.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/KT38234_override.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/allocNoRetain.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/allocNoRetain.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/allocNoRetain.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/blocks.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/blocks.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/blocks.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/callableReferences.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/callableReferences.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/callableReferences.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/clashingWithAny.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/clashingWithAny.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/clashingWithAny.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/constructorReturnsNull.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/constructorReturnsNull.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/constructorReturnsNull.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/conversions.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/customString.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/customString.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/customString.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/detachObjCObject.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/detachObjCObject.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/detachObjCObject.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/exceptions.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/exceptions.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/exceptions.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/initWithCustomSelector.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/initWithCustomSelector.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/initWithCustomSelector.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt26478.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt35544.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt36766.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt36766.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt38850.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt38850.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt38850.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt41811.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt41811.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt41811.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt42482.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt42482.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt42482.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt48491.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt49455.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt49455.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt49455.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt50786.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt53373_1.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/kt53373_2.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/main.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/mangling.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/mangling.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/mangling.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/multipleInheritanceClash.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/multipleInheritanceClash.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/multipleInheritanceClash.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/nsOutputStream.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/objcWeakRefs.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/objcWeakRefs.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/objcWeakRefs.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/overrideInit.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/overrideInit.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/overrideInit.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/sharing.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/structWithNSObject.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/structWithNSObject.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/tryRetainGC.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/tryRetainGC.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/tryRetainGC.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/utils.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/varargs.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/varargs.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/varargs.m (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/weakRefs.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/weakRefs.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/workerAutoreleasePool.h (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/workerAutoreleasePool.kt (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/objc/tests/workerAutoreleasePool.m (100%) create mode 100644 native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/Localizable.stringsdict b/native/native.tests/testData/interop/objc/Localizable.stringsdict similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/Localizable.stringsdict rename to native/native.tests/testData/interop/objc/Localizable.stringsdict diff --git a/kotlin-native/backend.native/tests/interop/objc/objcSmoke.def b/native/native.tests/testData/interop/objc/objcSmoke.def similarity index 64% rename from kotlin-native/backend.native/tests/interop/objc/objcSmoke.def rename to native/native.tests/testData/interop/objc/objcSmoke.def index 7337fd643a2..b2adbdd2556 100644 --- a/kotlin-native/backend.native/tests/interop/objc/objcSmoke.def +++ b/native/native.tests/testData/interop/objc/objcSmoke.def @@ -1,5 +1,5 @@ language = Objective-C headers = Foundation/NSArray.h Foundation/NSValue.h Foundation/NSString.h Foundation/NSStream.h Foundation/NSBundle.h -headerFilter = **/smoke.h Foundation/NSArray.h Foundation/NSValue.h Foundation/NSString.h Foundation/NSStream.h \ +headerFilter = smoke.h Foundation/NSArray.h Foundation/NSValue.h Foundation/NSString.h Foundation/NSStream.h \ objc/objc.h Foundation/NSBundle.h linkerOpts = -lobjcsmoke diff --git a/kotlin-native/backend.native/tests/interop/objc/objcTests.def b/native/native.tests/testData/interop/objc/objcTests.def similarity index 88% rename from kotlin-native/backend.native/tests/interop/objc/objcTests.def rename to native/native.tests/testData/interop/objc/objcTests.def index e3583653cb0..73cb295ba39 100644 --- a/kotlin-native/backend.native/tests/interop/objc/objcTests.def +++ b/native/native.tests/testData/interop/objc/objcTests.def @@ -1,7 +1,7 @@ language = Objective-C headers = Foundation/NSArray.h Foundation/NSValue.h Foundation/NSString.h Foundation/NSStream.h Foundation/NSBundle.h \ objc/runtime.h -headerFilter = **/interop/objc/tests/**.h \ +headerFilter = tests/**.h \ Foundation/NSArray.h Foundation/NSValue.h Foundation/NSString.h Foundation/NSStream.h \ objc/objc.h Foundation/NSBundle.h \ objc/runtime.h diff --git a/kotlin-native/backend.native/tests/interop/objc/smoke.h b/native/native.tests/testData/interop/objc/smoke.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/smoke.h rename to native/native.tests/testData/interop/objc/smoke.h diff --git a/kotlin-native/backend.native/tests/interop/objc/smoke.kt b/native/native.tests/testData/interop/objc/smoke.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/smoke.kt rename to native/native.tests/testData/interop/objc/smoke.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/smoke.m b/native/native.tests/testData/interop/objc/smoke.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/smoke.m rename to native/native.tests/testData/interop/objc/smoke.m diff --git a/kotlin-native/backend.native/tests/interop/objc/smoke.out b/native/native.tests/testData/interop/objc/smoke.out similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/smoke.out rename to native/native.tests/testData/interop/objc/smoke.out diff --git a/kotlin-native/backend.native/tests/interop/objc/smoke_noopgc.kt b/native/native.tests/testData/interop/objc/smoke_noopgc.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/smoke_noopgc.kt rename to native/native.tests/testData/interop/objc/smoke_noopgc.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/smoke_noopgc.out b/native/native.tests/testData/interop/objc/smoke_noopgc.out similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/smoke_noopgc.out rename to native/native.tests/testData/interop/objc/smoke_noopgc.out diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/KT37067_prefix.h b/native/native.tests/testData/interop/objc/tests/KT37067_prefix.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/KT37067_prefix.h rename to native/native.tests/testData/interop/objc/tests/KT37067_prefix.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/KT37067_prefix.kt b/native/native.tests/testData/interop/objc/tests/KT37067_prefix.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/KT37067_prefix.kt rename to native/native.tests/testData/interop/objc/tests/KT37067_prefix.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/KT37067_prefix.m b/native/native.tests/testData/interop/objc/tests/KT37067_prefix.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/KT37067_prefix.m rename to native/native.tests/testData/interop/objc/tests/KT37067_prefix.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/KT38234_override.h b/native/native.tests/testData/interop/objc/tests/KT38234_override.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/KT38234_override.h rename to native/native.tests/testData/interop/objc/tests/KT38234_override.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/KT38234_override.kt b/native/native.tests/testData/interop/objc/tests/KT38234_override.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/KT38234_override.kt rename to native/native.tests/testData/interop/objc/tests/KT38234_override.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/KT38234_override.m b/native/native.tests/testData/interop/objc/tests/KT38234_override.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/KT38234_override.m rename to native/native.tests/testData/interop/objc/tests/KT38234_override.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/allocNoRetain.h b/native/native.tests/testData/interop/objc/tests/allocNoRetain.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/allocNoRetain.h rename to native/native.tests/testData/interop/objc/tests/allocNoRetain.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/allocNoRetain.kt b/native/native.tests/testData/interop/objc/tests/allocNoRetain.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/allocNoRetain.kt rename to native/native.tests/testData/interop/objc/tests/allocNoRetain.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/allocNoRetain.m b/native/native.tests/testData/interop/objc/tests/allocNoRetain.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/allocNoRetain.m rename to native/native.tests/testData/interop/objc/tests/allocNoRetain.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/blocks.h b/native/native.tests/testData/interop/objc/tests/blocks.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/blocks.h rename to native/native.tests/testData/interop/objc/tests/blocks.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/blocks.kt b/native/native.tests/testData/interop/objc/tests/blocks.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/blocks.kt rename to native/native.tests/testData/interop/objc/tests/blocks.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/blocks.m b/native/native.tests/testData/interop/objc/tests/blocks.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/blocks.m rename to native/native.tests/testData/interop/objc/tests/blocks.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/callableReferences.h b/native/native.tests/testData/interop/objc/tests/callableReferences.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/callableReferences.h rename to native/native.tests/testData/interop/objc/tests/callableReferences.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/callableReferences.kt b/native/native.tests/testData/interop/objc/tests/callableReferences.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/callableReferences.kt rename to native/native.tests/testData/interop/objc/tests/callableReferences.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/callableReferences.m b/native/native.tests/testData/interop/objc/tests/callableReferences.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/callableReferences.m rename to native/native.tests/testData/interop/objc/tests/callableReferences.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/clashingWithAny.h b/native/native.tests/testData/interop/objc/tests/clashingWithAny.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/clashingWithAny.h rename to native/native.tests/testData/interop/objc/tests/clashingWithAny.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/clashingWithAny.kt b/native/native.tests/testData/interop/objc/tests/clashingWithAny.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/clashingWithAny.kt rename to native/native.tests/testData/interop/objc/tests/clashingWithAny.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/clashingWithAny.m b/native/native.tests/testData/interop/objc/tests/clashingWithAny.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/clashingWithAny.m rename to native/native.tests/testData/interop/objc/tests/clashingWithAny.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/constructorReturnsNull.h b/native/native.tests/testData/interop/objc/tests/constructorReturnsNull.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/constructorReturnsNull.h rename to native/native.tests/testData/interop/objc/tests/constructorReturnsNull.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/constructorReturnsNull.kt b/native/native.tests/testData/interop/objc/tests/constructorReturnsNull.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/constructorReturnsNull.kt rename to native/native.tests/testData/interop/objc/tests/constructorReturnsNull.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/constructorReturnsNull.m b/native/native.tests/testData/interop/objc/tests/constructorReturnsNull.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/constructorReturnsNull.m rename to native/native.tests/testData/interop/objc/tests/constructorReturnsNull.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/conversions.kt b/native/native.tests/testData/interop/objc/tests/conversions.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/conversions.kt rename to native/native.tests/testData/interop/objc/tests/conversions.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/customString.h b/native/native.tests/testData/interop/objc/tests/customString.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/customString.h rename to native/native.tests/testData/interop/objc/tests/customString.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/customString.kt b/native/native.tests/testData/interop/objc/tests/customString.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/customString.kt rename to native/native.tests/testData/interop/objc/tests/customString.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/customString.m b/native/native.tests/testData/interop/objc/tests/customString.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/customString.m rename to native/native.tests/testData/interop/objc/tests/customString.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/detachObjCObject.h b/native/native.tests/testData/interop/objc/tests/detachObjCObject.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/detachObjCObject.h rename to native/native.tests/testData/interop/objc/tests/detachObjCObject.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/detachObjCObject.kt b/native/native.tests/testData/interop/objc/tests/detachObjCObject.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/detachObjCObject.kt rename to native/native.tests/testData/interop/objc/tests/detachObjCObject.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/detachObjCObject.m b/native/native.tests/testData/interop/objc/tests/detachObjCObject.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/detachObjCObject.m rename to native/native.tests/testData/interop/objc/tests/detachObjCObject.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/exceptions.h b/native/native.tests/testData/interop/objc/tests/exceptions.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/exceptions.h rename to native/native.tests/testData/interop/objc/tests/exceptions.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/exceptions.kt b/native/native.tests/testData/interop/objc/tests/exceptions.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/exceptions.kt rename to native/native.tests/testData/interop/objc/tests/exceptions.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/exceptions.m b/native/native.tests/testData/interop/objc/tests/exceptions.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/exceptions.m rename to native/native.tests/testData/interop/objc/tests/exceptions.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/initWithCustomSelector.h b/native/native.tests/testData/interop/objc/tests/initWithCustomSelector.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/initWithCustomSelector.h rename to native/native.tests/testData/interop/objc/tests/initWithCustomSelector.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/initWithCustomSelector.kt b/native/native.tests/testData/interop/objc/tests/initWithCustomSelector.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/initWithCustomSelector.kt rename to native/native.tests/testData/interop/objc/tests/initWithCustomSelector.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/initWithCustomSelector.m b/native/native.tests/testData/interop/objc/tests/initWithCustomSelector.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/initWithCustomSelector.m rename to native/native.tests/testData/interop/objc/tests/initWithCustomSelector.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt26478.kt b/native/native.tests/testData/interop/objc/tests/kt26478.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt26478.kt rename to native/native.tests/testData/interop/objc/tests/kt26478.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt35544.kt b/native/native.tests/testData/interop/objc/tests/kt35544.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt35544.kt rename to native/native.tests/testData/interop/objc/tests/kt35544.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt36766.h b/native/native.tests/testData/interop/objc/tests/kt36766.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt36766.h rename to native/native.tests/testData/interop/objc/tests/kt36766.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt36766.kt b/native/native.tests/testData/interop/objc/tests/kt36766.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt36766.kt rename to native/native.tests/testData/interop/objc/tests/kt36766.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt38850.h b/native/native.tests/testData/interop/objc/tests/kt38850.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt38850.h rename to native/native.tests/testData/interop/objc/tests/kt38850.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt38850.kt b/native/native.tests/testData/interop/objc/tests/kt38850.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt38850.kt rename to native/native.tests/testData/interop/objc/tests/kt38850.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt38850.m b/native/native.tests/testData/interop/objc/tests/kt38850.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt38850.m rename to native/native.tests/testData/interop/objc/tests/kt38850.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt41811.h b/native/native.tests/testData/interop/objc/tests/kt41811.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt41811.h rename to native/native.tests/testData/interop/objc/tests/kt41811.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt41811.kt b/native/native.tests/testData/interop/objc/tests/kt41811.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt41811.kt rename to native/native.tests/testData/interop/objc/tests/kt41811.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt41811.m b/native/native.tests/testData/interop/objc/tests/kt41811.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt41811.m rename to native/native.tests/testData/interop/objc/tests/kt41811.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt42482.h b/native/native.tests/testData/interop/objc/tests/kt42482.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt42482.h rename to native/native.tests/testData/interop/objc/tests/kt42482.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt42482.kt b/native/native.tests/testData/interop/objc/tests/kt42482.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt42482.kt rename to native/native.tests/testData/interop/objc/tests/kt42482.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt42482.m b/native/native.tests/testData/interop/objc/tests/kt42482.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt42482.m rename to native/native.tests/testData/interop/objc/tests/kt42482.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt48491.h b/native/native.tests/testData/interop/objc/tests/kt48491.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt48491.h rename to native/native.tests/testData/interop/objc/tests/kt48491.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt49455.h b/native/native.tests/testData/interop/objc/tests/kt49455.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt49455.h rename to native/native.tests/testData/interop/objc/tests/kt49455.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt49455.kt b/native/native.tests/testData/interop/objc/tests/kt49455.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt49455.kt rename to native/native.tests/testData/interop/objc/tests/kt49455.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt49455.m b/native/native.tests/testData/interop/objc/tests/kt49455.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt49455.m rename to native/native.tests/testData/interop/objc/tests/kt49455.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt50786.kt b/native/native.tests/testData/interop/objc/tests/kt50786.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt50786.kt rename to native/native.tests/testData/interop/objc/tests/kt50786.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt53373_1.kt b/native/native.tests/testData/interop/objc/tests/kt53373_1.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt53373_1.kt rename to native/native.tests/testData/interop/objc/tests/kt53373_1.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/kt53373_2.kt b/native/native.tests/testData/interop/objc/tests/kt53373_2.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/kt53373_2.kt rename to native/native.tests/testData/interop/objc/tests/kt53373_2.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/main.kt b/native/native.tests/testData/interop/objc/tests/main.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/main.kt rename to native/native.tests/testData/interop/objc/tests/main.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/mangling.h b/native/native.tests/testData/interop/objc/tests/mangling.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/mangling.h rename to native/native.tests/testData/interop/objc/tests/mangling.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/mangling.kt b/native/native.tests/testData/interop/objc/tests/mangling.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/mangling.kt rename to native/native.tests/testData/interop/objc/tests/mangling.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/mangling.m b/native/native.tests/testData/interop/objc/tests/mangling.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/mangling.m rename to native/native.tests/testData/interop/objc/tests/mangling.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/multipleInheritanceClash.h b/native/native.tests/testData/interop/objc/tests/multipleInheritanceClash.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/multipleInheritanceClash.h rename to native/native.tests/testData/interop/objc/tests/multipleInheritanceClash.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/multipleInheritanceClash.kt b/native/native.tests/testData/interop/objc/tests/multipleInheritanceClash.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/multipleInheritanceClash.kt rename to native/native.tests/testData/interop/objc/tests/multipleInheritanceClash.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/multipleInheritanceClash.m b/native/native.tests/testData/interop/objc/tests/multipleInheritanceClash.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/multipleInheritanceClash.m rename to native/native.tests/testData/interop/objc/tests/multipleInheritanceClash.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/nsOutputStream.kt b/native/native.tests/testData/interop/objc/tests/nsOutputStream.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/nsOutputStream.kt rename to native/native.tests/testData/interop/objc/tests/nsOutputStream.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/objcWeakRefs.h b/native/native.tests/testData/interop/objc/tests/objcWeakRefs.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/objcWeakRefs.h rename to native/native.tests/testData/interop/objc/tests/objcWeakRefs.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/objcWeakRefs.kt b/native/native.tests/testData/interop/objc/tests/objcWeakRefs.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/objcWeakRefs.kt rename to native/native.tests/testData/interop/objc/tests/objcWeakRefs.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/objcWeakRefs.m b/native/native.tests/testData/interop/objc/tests/objcWeakRefs.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/objcWeakRefs.m rename to native/native.tests/testData/interop/objc/tests/objcWeakRefs.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/overrideInit.h b/native/native.tests/testData/interop/objc/tests/overrideInit.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/overrideInit.h rename to native/native.tests/testData/interop/objc/tests/overrideInit.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/overrideInit.kt b/native/native.tests/testData/interop/objc/tests/overrideInit.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/overrideInit.kt rename to native/native.tests/testData/interop/objc/tests/overrideInit.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/overrideInit.m b/native/native.tests/testData/interop/objc/tests/overrideInit.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/overrideInit.m rename to native/native.tests/testData/interop/objc/tests/overrideInit.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/sharing.kt b/native/native.tests/testData/interop/objc/tests/sharing.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/sharing.kt rename to native/native.tests/testData/interop/objc/tests/sharing.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/structWithNSObject.h b/native/native.tests/testData/interop/objc/tests/structWithNSObject.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/structWithNSObject.h rename to native/native.tests/testData/interop/objc/tests/structWithNSObject.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/structWithNSObject.kt b/native/native.tests/testData/interop/objc/tests/structWithNSObject.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/structWithNSObject.kt rename to native/native.tests/testData/interop/objc/tests/structWithNSObject.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/tryRetainGC.h b/native/native.tests/testData/interop/objc/tests/tryRetainGC.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/tryRetainGC.h rename to native/native.tests/testData/interop/objc/tests/tryRetainGC.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/tryRetainGC.kt b/native/native.tests/testData/interop/objc/tests/tryRetainGC.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/tryRetainGC.kt rename to native/native.tests/testData/interop/objc/tests/tryRetainGC.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/tryRetainGC.m b/native/native.tests/testData/interop/objc/tests/tryRetainGC.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/tryRetainGC.m rename to native/native.tests/testData/interop/objc/tests/tryRetainGC.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/utils.kt b/native/native.tests/testData/interop/objc/tests/utils.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/utils.kt rename to native/native.tests/testData/interop/objc/tests/utils.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/varargs.h b/native/native.tests/testData/interop/objc/tests/varargs.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/varargs.h rename to native/native.tests/testData/interop/objc/tests/varargs.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/varargs.kt b/native/native.tests/testData/interop/objc/tests/varargs.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/varargs.kt rename to native/native.tests/testData/interop/objc/tests/varargs.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/varargs.m b/native/native.tests/testData/interop/objc/tests/varargs.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/varargs.m rename to native/native.tests/testData/interop/objc/tests/varargs.m diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/weakRefs.h b/native/native.tests/testData/interop/objc/tests/weakRefs.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/weakRefs.h rename to native/native.tests/testData/interop/objc/tests/weakRefs.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/weakRefs.kt b/native/native.tests/testData/interop/objc/tests/weakRefs.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/weakRefs.kt rename to native/native.tests/testData/interop/objc/tests/weakRefs.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/workerAutoreleasePool.h b/native/native.tests/testData/interop/objc/tests/workerAutoreleasePool.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/workerAutoreleasePool.h rename to native/native.tests/testData/interop/objc/tests/workerAutoreleasePool.h diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/workerAutoreleasePool.kt b/native/native.tests/testData/interop/objc/tests/workerAutoreleasePool.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/workerAutoreleasePool.kt rename to native/native.tests/testData/interop/objc/tests/workerAutoreleasePool.kt diff --git a/kotlin-native/backend.native/tests/interop/objc/tests/workerAutoreleasePool.m b/native/native.tests/testData/interop/objc/tests/workerAutoreleasePool.m similarity index 100% rename from kotlin-native/backend.native/tests/interop/objc/tests/workerAutoreleasePool.m rename to native/native.tests/testData/interop/objc/tests/workerAutoreleasePool.m diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt new file mode 100644 index 00000000000..64880d9a2e1 --- /dev/null +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt @@ -0,0 +1,163 @@ +/* + * 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.konan.test.blackbox + +import com.intellij.testFramework.TestDataPath +import org.jetbrains.kotlin.konan.target.isSimulator +import org.jetbrains.kotlin.konan.test.blackbox.support.* +import org.jetbrains.kotlin.konan.test.blackbox.support.TestCase +import org.jetbrains.kotlin.konan.test.blackbox.support.TestCompilerArgs +import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.* +import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationResult.Companion.assertSuccess +import org.jetbrains.kotlin.konan.test.blackbox.support.group.FirPipeline +import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestExecutable +import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck +import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks +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.test.TestMetadata +import org.junit.jupiter.api.Assumptions +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test +import java.io.File + +@TestDataPath("\$PROJECT_ROOT") +class ClassicComplexCInteropTest : ComplexCInteropTestBase() + +@FirPipeline +@Tag("frontend-fir") +@TestDataPath("\$PROJECT_ROOT") +class FirComplexCInteropTest : ComplexCInteropTestBase() + +abstract class ComplexCInteropTestBase : AbstractNativeSimpleTest() { + private val interopObjCDir = File("native/native.tests/testData/interop/objc") + + @Test + @TestMetadata("smoke.kt") + fun testInteropObjCSmokeGC() { + Assumptions.assumeTrue( + testRunSettings.get() != GCType.NOOP + || testRunSettings.get() != CacheMode.WithoutCache // TODO: Remove line after fix of KT-63944 + ) + testInteropObjCSmoke("smoke") + } + + @Test + @TestMetadata("smoke_noopgc.kt") + fun testInteropObjCSmokeNoopGC() { + Assumptions.assumeTrue(testRunSettings.get() == GCType.NOOP) + Assumptions.assumeTrue(testRunSettings.get() == CacheMode.WithoutCache) // TODO: Remove line after fix of KT-63944 + testInteropObjCSmoke("smoke_noopgc") + } + + private fun testInteropObjCSmoke(ktFilePrefix: String) { + Assumptions.assumeTrue(targets.testTarget.family.isAppleFamily) + val mSources = listOf(interopObjCDir.resolve("smoke.m")) + val dylib = compileDylib("objcsmoke", mSources) + println(dylib) + if (testRunSettings.configurables.targetTriple.isSimulator) + codesign(dylib.resultingArtifact.path) + val stringsdict = interopObjCDir.resolve("Localizable.stringsdict") + stringsdict.copyTo(buildDir.resolve("en.lproj/Localizable.stringsdict"), overwrite = true) + + val cinteropKlib = cinteropToLibrary( + targets = targets, + defFile = interopObjCDir.resolve("objcSmoke.def"), + outputDir = buildDir, + freeCompilerArgs = TestCompilerArgs(emptyList(), cinteropArgs = listOf("-header", "smoke.h")) + ).assertSuccess().resultingArtifact + println(cinteropKlib) + + val testCase = generateTestCaseWithSingleFile( + sourceFile = interopObjCDir.resolve("$ktFilePrefix.kt"), + moduleName = "smoke", + freeCompilerArgs = TestCompilerArgs( + "-opt-in=kotlinx.cinterop.ExperimentalForeignApi", + "-linker-option", + "-L${buildDir.absolutePath}" + ), + testKind = TestKind.STANDALONE_NO_TR, + extras = TestCase.NoTestRunnerExtras("main"), + checks = TestRunChecks.Default(testRunSettings.get().executionTimeout).copy( + outputDataFile = TestRunCheck.OutputDataFile(file = interopObjCDir.resolve("$ktFilePrefix.out")) + ) + ) + val success = compileToExecutable(testCase, cinteropKlib.asLibraryDependency()).assertSuccess() + println(success) + val testExecutable = TestExecutable( + success.resultingArtifact, + success.loggedData, + listOf(TestName("smoke")) + ) + runExecutableAndVerify(testCase, testExecutable) + } + + @Test + @TestMetadata("tests") + fun testInteropObjCTests() { + Assumptions.assumeTrue(targets.testTarget.family.isAppleFamily) + val mSources = interopObjCDir.resolve("tests").listFiles { file: File -> file.name.endsWith(".m") }!!.toList() + val dylib = compileDylib("objctests", mSources) + if (testRunSettings.configurables.targetTriple.isSimulator) + codesign(dylib.resultingArtifact.path) + println(dylib) + + val hFiles = interopObjCDir.resolve("tests").listFiles { file: File -> file.name.endsWith(".h") }!!.toList() + val cinteropKlib = cinteropToLibrary( + targets = targets, + defFile = interopObjCDir.resolve("objcTests.def"), + outputDir = buildDir, + freeCompilerArgs = TestCompilerArgs(emptyList(), cinteropArgs = hFiles.flatMap { listOf("-header", "tests/${it.name}") }) + ).assertSuccess().resultingArtifact + println(cinteropKlib) + + val ignoredTests = if (testRunSettings.get() != GCType.NOOP) emptySet() else setOf( + "Kt41811Kt.*", + "CustomStringKt.testCustomString", + "Kt42482Kt.testKT42482", + "ObjcWeakRefsKt.testObjCWeakRef", + "WeakRefsKt.testWeakRefs", + ) + val testCase = generateTestCaseWithSingleModule( + moduleDir = interopObjCDir.resolve("tests"), + freeCompilerArgs = TestCompilerArgs( + "-opt-in=kotlinx.cinterop.ExperimentalForeignApi", + "-opt-in=kotlin.native.internal.InternalForKotlinNative", + "-XXLanguage:+ImplicitSignedToUnsignedIntegerConversion", + "-tr", "-e", "main", "-linker-option", "-L${buildDir.absolutePath}" + ), + extras = TestCase.WithTestRunnerExtras(TestRunnerType.DEFAULT, ignoredTests), + ) + val success = compileToExecutable(testCase, cinteropKlib.asLibraryDependency()).assertSuccess() + println(success) + val testExecutable = TestExecutable( + success.resultingArtifact, + success.loggedData, + listOf(TestName("interop_objc_tests")) + ) + runExecutableAndVerify(testCase, testExecutable) + } + + private fun compileDylib(name: String, mSources: List): TestCompilationResult.Success { + val clangResult = compileWithClang( + clangDistribution = ClangDistribution.Llvm, + sourceFiles = mSources, + includeDirectories = emptyList(), + outputFile = buildDir.resolve("lib$name.dylib"), + libraryDirectories = emptyList(), + libraries = emptyList(), + additionalClangFlags = listOf( + "-DNS_FORMAT_ARGUMENT(A)=", "-lobjc", "-fobjc-arc", "-fPIC", "-shared", + // Enable ARC optimizations to prevent some objects from leaking in Obj-C code due to exceptions: + "-O2" + ), + fmodules = false, // with `-fmodules`, ld cannot find symbol `_assert` + ).assertSuccess() + return clangResult + } +} \ No newline at end of file diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/NativeSimpleTestUtils.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/NativeSimpleTestUtils.kt index 00c057af879..eec5cc3bc1c 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/NativeSimpleTestUtils.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/NativeSimpleTestUtils.kt @@ -202,7 +202,8 @@ internal fun AbstractNativeSimpleTest.compileToStaticCache( internal fun AbstractNativeSimpleTest.generateTestCaseWithSingleModule( moduleDir: File?, - freeCompilerArgs: TestCompilerArgs = TestCompilerArgs.EMPTY + freeCompilerArgs: TestCompilerArgs = TestCompilerArgs.EMPTY, + extras: TestCase.Extras = TestCase.WithTestRunnerExtras(TestRunnerType.DEFAULT), ): TestCase { val moduleName: String = moduleDir?.name ?: LAUNCHER_MODULE_NAME val module = TestModule.Exclusive(moduleName, emptySet(), emptySet(), emptySet()) @@ -218,7 +219,7 @@ internal fun AbstractNativeSimpleTest.generateTestCaseWithSingleModule( freeCompilerArgs = freeCompilerArgs, nominalPackageName = PackageName.EMPTY, checks = TestRunChecks.Default(testRunSettings.get().executionTimeout), - extras = TestCase.WithTestRunnerExtras(TestRunnerType.DEFAULT) + extras = extras ).apply { initialize(null, null) } @@ -229,7 +230,8 @@ internal fun AbstractNativeSimpleTest.generateTestCaseWithSingleFile( moduleName: String = sourceFile.name, freeCompilerArgs: TestCompilerArgs = TestCompilerArgs.EMPTY, testKind: TestKind = TestKind.STANDALONE, - extras: TestCase.Extras = TestCase.WithTestRunnerExtras(TestRunnerType.DEFAULT) + extras: TestCase.Extras = TestCase.WithTestRunnerExtras(TestRunnerType.DEFAULT), + checks: TestRunChecks = TestRunChecks.Default(testRunSettings.get().executionTimeout), ): TestCase { val module = TestModule.Exclusive(moduleName, emptySet(), emptySet(), emptySet()) module.files += TestFile.createCommitted(sourceFile, module) @@ -240,7 +242,7 @@ internal fun AbstractNativeSimpleTest.generateTestCaseWithSingleFile( modules = setOf(module), freeCompilerArgs = freeCompilerArgs, nominalPackageName = PackageName.EMPTY, - checks = TestRunChecks.Default(testRunSettings.get().executionTimeout), + checks = checks, extras = extras ).apply { initialize(null, null) diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/CompilationToolCall.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/CompilationToolCall.kt index 2b5438c8cef..6c2f5bc49c2 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/CompilationToolCall.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/compilation/CompilationToolCall.kt @@ -10,8 +10,10 @@ import org.jetbrains.kotlin.cli.common.messages.* import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl import org.jetbrains.kotlin.compilerRunner.processCompilerOutput import org.jetbrains.kotlin.config.Services +import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.test.blackbox.support.NativeTestSupport import org.jetbrains.kotlin.konan.test.blackbox.support.settings.KotlinNativeTargets +import org.junit.jupiter.api.Assumptions import java.io.ByteArrayOutputStream import java.io.File import java.io.PrintStream @@ -167,3 +169,35 @@ internal fun invokeCInterop( } } } + +private data class HostExecutionOutput(val executablePath: String, var exitCode: Int, var duration: Duration, val stdOut: String, val stdErr: String) + +private fun executeHostProcess(executable: String, args: List = listOf(), env: Map = emptyMap()): HostExecutionOutput { + val processBuilder = ProcessBuilder(executable, *args.toTypedArray()) + .redirectOutput(ProcessBuilder.Redirect.PIPE) + .redirectError(ProcessBuilder.Redirect.PIPE) + processBuilder.environment().putAll(env) + val process = processBuilder.start() + val (exitCode, duration) = measureTimedValue { + process.waitFor() + } + return HostExecutionOutput( + executable, + exitCode, + duration, + process.inputStream.bufferedReader().readText(), + process.errorStream.bufferedReader().readText(), + ) +} + +internal fun codesign(path: String) { + Assumptions.assumeTrue(HostManager.hostIsMac) { "Apple specific code signing is needed" } + val processOutput = executeHostProcess(executable = "/usr/bin/codesign", args = listOf("--verbose", "-s", "-", path)) + check(processOutput.exitCode == 0) { + """ + |Codesign failed with exitCode: ${processOutput.exitCode} + |stdout: ${processOutput.stdOut} + |stderr: ${processOutput.stdErr} + """.trimMargin() + } +} diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/BaseTestRunProvider.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/BaseTestRunProvider.kt index 5e5e203dfe3..6d1236ba46d 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/BaseTestRunProvider.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/BaseTestRunProvider.kt @@ -43,7 +43,14 @@ internal open class BaseTestRunProvider { } TestKind.STANDALONE -> { add(TestRunParameter.WithTCTestLogger) - addIfNotNull(testName?.let(TestRunParameter::WithTestFilter)) + if (testName != null) + add(TestRunParameter.WithTestFilter(testName)) + else { + val ignoredTests = (testCase.extras as TestCase.WithTestRunnerExtras).ignoredTests + if (ignoredTests.isNotEmpty()) { + add(TestRunParameter.WithRegexFilter("(${ignoredTests.joinToString("|")})", positive = false)) + } + } } TestKind.REGULAR -> { add(TestRunParameter.WithTCTestLogger) diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRun.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRun.kt index b4696d9adf4..9324fcc950c 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRun.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRun.kt @@ -86,6 +86,17 @@ internal sealed interface TestRunParameter { override fun testMatches(testName: TestName) = this.testName == testName } + class WithRegexFilter(val pattern: String, val positive: Boolean) : WithFilter() { + override fun applyTo(programArgs: MutableList) { + programArgs += if (positive) + "--ktest_regex_filter=$pattern" + else + "--ktest_negative_regex_filter=$pattern" + } + + override fun testMatches(testName: TestName) = Regex(pattern).matches(testName.toString()) == positive + } + object WithTCTestLogger : TestRunParameter { override fun applyTo(programArgs: MutableList) { programArgs += "--ktest_logger=TEAMCITY" diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt index afff752b1f0..f2166045576 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt @@ -50,6 +50,7 @@ internal fun AbstractNativeSimpleTest.compileWithClang( libraryDirectories: List = emptyList(), libraries: List = emptyList(), additionalClangFlags: List = emptyList(), + fmodules: Boolean = true ): TestCompilationResult { val configurables = testRunSettings.configurables val host = testRunSettings.get().hostTarget @@ -71,7 +72,8 @@ internal fun AbstractNativeSimpleTest.compileWithClang( *clangArgs, *sourceFiles.map { it.absolutePath }.toTypedArray(), *includeDirectories.flatMap { listOf("-I", it.absolutePath) }.toTypedArray(), - "-g", "-fmodules", + "-g", + *(if (fmodules) arrayOf("-fmodules") else arrayOf()), *frameworkDirectories.flatMap { listOf("-F", it.absolutePath) }.toTypedArray(), *libraryDirectories.flatMap { listOf("-L", it.absolutePath) }.toTypedArray(), *libraries.map { "-l$it" }.toTypedArray(),