Native: correct ObjCExport test for forward declarations
The test relies on the fact that any name can be imported from a "magic" package like `objcnames.classes`. This was the case for K1, but likely won't be for K2: the compiler should allow importing only those names that are actually forward-declared in a cinterop library. This commit changes the test that way. In particular, moves it to a different task that has a cinterop dependency.
This commit is contained in:
committed by
Space Team
parent
445d44b79a
commit
86a29a7b07
@@ -4477,6 +4477,9 @@ if (PlatformInfo.isAppleTarget(project)) {
|
|||||||
it.defFile 'interop/objc/include_categories/objc_include_categories.def'
|
it.defFile 'interop/objc/include_categories/objc_include_categories.def'
|
||||||
it.headers "$projectDir/interop/objc/include_categories/objc_include_categories.h"
|
it.headers "$projectDir/interop/objc/include_categories/objc_include_categories.h"
|
||||||
}
|
}
|
||||||
|
createInterop("frameworkForwardDeclarations") {
|
||||||
|
it.defFile 'framework/forwardDeclarations/clib.def'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createInterop("withSpaces") {
|
createInterop("withSpaces") {
|
||||||
@@ -6058,6 +6061,14 @@ if (isAppleTarget(project)) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frameworkTest("testForwardDeclarationsFramework") {
|
||||||
|
framework('ForwardDeclarations') {
|
||||||
|
sources = ['framework/forwardDeclarations']
|
||||||
|
library = 'frameworkForwardDeclarations'
|
||||||
|
}
|
||||||
|
swiftSources = ['framework/forwardDeclarations/']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
language=Objective-C
|
||||||
|
---
|
||||||
|
struct ForwardDeclaredStruct;
|
||||||
|
@class ForwardDeclaredClass;
|
||||||
|
@protocol ForwardDeclaredProtocol;
|
||||||
|
|
||||||
|
struct ForwardDeclaredStruct* sameStruct(struct ForwardDeclaredStruct* ptr) {
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
ForwardDeclaredClass* sameClass(ForwardDeclaredClass* obj) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
id<ForwardDeclaredProtocol> sameProtocol(id<ForwardDeclaredProtocol> obj) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import clib.*
|
||||||
|
import cnames.structs.ForwardDeclaredStruct
|
||||||
|
import objcnames.classes.ForwardDeclaredClass
|
||||||
|
import objcnames.protocols.ForwardDeclaredProtocolProtocol
|
||||||
|
import kotlinx.cinterop.CPointer
|
||||||
|
|
||||||
|
fun sameForwardDeclaredStruct(ptr: CPointer<ForwardDeclaredStruct>?): CPointer<ForwardDeclaredStruct>? = sameStruct(ptr)
|
||||||
|
fun sameForwardDeclaredClass(obj: ForwardDeclaredClass?): ForwardDeclaredClass? = sameClass(obj)
|
||||||
|
fun sameForwardDeclaredProtocol(obj: ForwardDeclaredProtocolProtocol?): ForwardDeclaredProtocolProtocol? = sameProtocol(obj)
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import ForwardDeclarations
|
||||||
|
|
||||||
|
private func test1() throws {
|
||||||
|
let ptr = UnsafeMutableRawPointer(bitPattern: 0x1234)
|
||||||
|
try assertEquals(actual: LibKt.sameForwardDeclaredStruct(ptr: ptr), expected: ptr)
|
||||||
|
|
||||||
|
// We can't actually test this, because Swift can't import neither types nor functions due to
|
||||||
|
// "interface/protocol '...' is incomplete":
|
||||||
|
//
|
||||||
|
// let classObj: ForwardDeclaredClass? = nil
|
||||||
|
// try assertNil(LibKt.sameForwardDeclaredClass(obj: classObj))
|
||||||
|
//
|
||||||
|
// let protocolObj: ForwardDeclaredProtocol? = nil
|
||||||
|
// try assertNil(LibKt.sameForwardDeclaredProtocol(obj: protocolObj))
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------- Execution of the test --------
|
||||||
|
|
||||||
|
class TestTests : SimpleTestProvider {
|
||||||
|
override init() {
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
test("test1", test1)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3081,8 +3081,6 @@ __attribute__((swift_name("ValuesKt")))
|
|||||||
+ (BOOL)isBlockNullBlock:(void (^ _Nullable)(void))block __attribute__((swift_name("isBlockNull(block:)")));
|
+ (BOOL)isBlockNullBlock:(void (^ _Nullable)(void))block __attribute__((swift_name("isBlockNull(block:)")));
|
||||||
+ (BOOL)isFunctionObj:(id _Nullable)obj __attribute__((swift_name("isFunction(obj:)")));
|
+ (BOOL)isFunctionObj:(id _Nullable)obj __attribute__((swift_name("isFunction(obj:)")));
|
||||||
+ (BOOL)isFunction0Obj:(id _Nullable)obj __attribute__((swift_name("isFunction0(obj:)")));
|
+ (BOOL)isFunction0Obj:(id _Nullable)obj __attribute__((swift_name("isFunction0(obj:)")));
|
||||||
+ (void)takeForwardDeclaredClassObj:(ForwardDeclaredClass *)obj __attribute__((swift_name("takeForwardDeclaredClass(obj:)")));
|
|
||||||
+ (void)takeForwardDeclaredProtocolObj:(id<ForwardDeclared>)obj __attribute__((swift_name("takeForwardDeclaredProtocol(obj:)")));
|
|
||||||
+ (void)error __attribute__((swift_name("error()"))) __attribute__((unavailable("error")));
|
+ (void)error __attribute__((swift_name("error()"))) __attribute__((unavailable("error")));
|
||||||
+ (void)warning __attribute__((swift_name("warning()"))) __attribute__((deprecated("warning")));
|
+ (void)warning __attribute__((swift_name("warning()"))) __attribute__((deprecated("warning")));
|
||||||
+ (void)gc __attribute__((swift_name("gc()")));
|
+ (void)gc __attribute__((swift_name("gc()")));
|
||||||
|
|||||||
@@ -3016,8 +3016,6 @@ __attribute__((swift_name("ValuesKt")))
|
|||||||
+ (BOOL)isBlockNullBlock:(void (^ _Nullable)(void))block __attribute__((swift_name("isBlockNull(block:)")));
|
+ (BOOL)isBlockNullBlock:(void (^ _Nullable)(void))block __attribute__((swift_name("isBlockNull(block:)")));
|
||||||
+ (BOOL)isFunctionObj:(id _Nullable)obj __attribute__((swift_name("isFunction(obj:)")));
|
+ (BOOL)isFunctionObj:(id _Nullable)obj __attribute__((swift_name("isFunction(obj:)")));
|
||||||
+ (BOOL)isFunction0Obj:(id _Nullable)obj __attribute__((swift_name("isFunction0(obj:)")));
|
+ (BOOL)isFunction0Obj:(id _Nullable)obj __attribute__((swift_name("isFunction0(obj:)")));
|
||||||
+ (void)takeForwardDeclaredClassObj:(ForwardDeclaredClass *)obj __attribute__((swift_name("takeForwardDeclaredClass(obj:)")));
|
|
||||||
+ (void)takeForwardDeclaredProtocolObj:(id<ForwardDeclared>)obj __attribute__((swift_name("takeForwardDeclaredProtocol(obj:)")));
|
|
||||||
+ (void)error __attribute__((swift_name("error()"))) __attribute__((unavailable("error")));
|
+ (void)error __attribute__((swift_name("error()"))) __attribute__((unavailable("error")));
|
||||||
+ (void)warning __attribute__((swift_name("warning()"))) __attribute__((deprecated("warning")));
|
+ (void)warning __attribute__((swift_name("warning()"))) __attribute__((deprecated("warning")));
|
||||||
+ (void)gc __attribute__((swift_name("gc()")));
|
+ (void)gc __attribute__((swift_name("gc()")));
|
||||||
|
|||||||
@@ -3016,8 +3016,6 @@ __attribute__((swift_name("ValuesKt")))
|
|||||||
+ (BOOL)isBlockNullBlock:(void (^ _Nullable)(void))block __attribute__((swift_name("isBlockNull(block:)")));
|
+ (BOOL)isBlockNullBlock:(void (^ _Nullable)(void))block __attribute__((swift_name("isBlockNull(block:)")));
|
||||||
+ (BOOL)isFunctionObj:(id _Nullable)obj __attribute__((swift_name("isFunction(obj:)")));
|
+ (BOOL)isFunctionObj:(id _Nullable)obj __attribute__((swift_name("isFunction(obj:)")));
|
||||||
+ (BOOL)isFunction0Obj:(id _Nullable)obj __attribute__((swift_name("isFunction0(obj:)")));
|
+ (BOOL)isFunction0Obj:(id _Nullable)obj __attribute__((swift_name("isFunction0(obj:)")));
|
||||||
+ (void)takeForwardDeclaredClassObj:(ForwardDeclaredClass *)obj __attribute__((swift_name("takeForwardDeclaredClass(obj:)")));
|
|
||||||
+ (void)takeForwardDeclaredProtocolObj:(id<ForwardDeclared>)obj __attribute__((swift_name("takeForwardDeclaredProtocol(obj:)")));
|
|
||||||
+ (void)error __attribute__((swift_name("error()"))) __attribute__((unavailable("error")));
|
+ (void)error __attribute__((swift_name("error()"))) __attribute__((unavailable("error")));
|
||||||
+ (void)warning __attribute__((swift_name("warning()"))) __attribute__((deprecated("warning")));
|
+ (void)warning __attribute__((swift_name("warning()"))) __attribute__((deprecated("warning")));
|
||||||
+ (void)gc __attribute__((swift_name("gc()")));
|
+ (void)gc __attribute__((swift_name("gc()")));
|
||||||
|
|||||||
@@ -536,9 +536,6 @@ fun isFunction0(obj: Any?): Boolean = obj is Function0<*>
|
|||||||
|
|
||||||
abstract class MyAbstractList : List<Any?>
|
abstract class MyAbstractList : List<Any?>
|
||||||
|
|
||||||
fun takeForwardDeclaredClass(obj: objcnames.classes.ForwardDeclaredClass) {}
|
|
||||||
fun takeForwardDeclaredProtocol(obj: objcnames.protocols.ForwardDeclaredProtocol) {}
|
|
||||||
|
|
||||||
class TestKClass {
|
class TestKClass {
|
||||||
fun getKotlinClass(clazz: ObjCClass) = getOriginalKotlinClass(clazz)
|
fun getKotlinClass(clazz: ObjCClass) = getOriginalKotlinClass(clazz)
|
||||||
fun getKotlinClass(protocol: ObjCProtocol) = getOriginalKotlinClass(protocol)
|
fun getKotlinClass(protocol: ObjCProtocol) = getOriginalKotlinClass(protocol)
|
||||||
|
|||||||
Reference in New Issue
Block a user