[Interop][Test] Add test for fields of ObjC types
This commit is contained in:
committed by
Sergey Bogolepov
parent
740e56f1a5
commit
18b0c7e4a6
@@ -0,0 +1,17 @@
|
||||
#import <Foundation/NSString.h>
|
||||
|
||||
struct CStructWithNSObjects {
|
||||
id any;
|
||||
|
||||
NSString* nsString;
|
||||
NSString* _Nonnull nonNullString;
|
||||
NSObject* object;
|
||||
|
||||
NSArray* array;
|
||||
NSMutableArray* mutableArray;
|
||||
|
||||
NSSet* set;
|
||||
|
||||
NSDictionary* dictionary;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
import kotlinx.cinterop.*
|
||||
import kotlin.test.*
|
||||
import objcTests.*
|
||||
|
||||
private class NSObjectSubClass : NSObject() {
|
||||
val x = 111
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testStructWithNSObject() {
|
||||
memScoped {
|
||||
val struct = alloc<CStructWithNSObjects>()
|
||||
|
||||
struct.any = 5
|
||||
assertEquals(5, struct.any)
|
||||
struct.any = null
|
||||
assertEquals(null, struct.any)
|
||||
|
||||
struct.nsString = "hello"
|
||||
assertEquals("hello", struct.nsString)
|
||||
struct.nsString = null
|
||||
assertEquals(null, struct.nsString)
|
||||
|
||||
struct.nonNullString = "world"
|
||||
assertEquals("world", struct.nonNullString)
|
||||
|
||||
struct.`object` = NSObjectSubClass()
|
||||
assertEquals(111, (struct.`object` as NSObjectSubClass).x)
|
||||
struct.`object` = null
|
||||
assertEquals(null, struct.`object`)
|
||||
|
||||
struct.array = null
|
||||
assertEquals(null, struct.array)
|
||||
struct.array = listOf(1, 2, 3)
|
||||
assertEquals(listOf(1, 2, 3), struct.array)
|
||||
|
||||
struct.set = null
|
||||
assertEquals(null, struct.set)
|
||||
struct.set = setOf("hello", "world")
|
||||
assertEquals(setOf("hello", "world"), struct.set)
|
||||
|
||||
struct.dictionary = null
|
||||
assertEquals(null, struct.dictionary)
|
||||
struct.dictionary = mapOf("k1" to "v1", "k2" to "v2")
|
||||
assertEquals(mapOf("k1" to "v1", "k2" to "v2"), struct.dictionary)
|
||||
|
||||
struct.mutableArray = null
|
||||
assertEquals(null, struct.mutableArray)
|
||||
struct.mutableArray = mutableListOf(1, 2)
|
||||
struct.mutableArray!! += 3
|
||||
assertEquals(mutableListOf(1, 2, 3), struct.mutableArray)
|
||||
|
||||
// Check that subtyping via Nothing-returning functions does not break compiler.
|
||||
assertFailsWith<NotImplementedError> {
|
||||
struct.any = TODO()
|
||||
struct.nsString = TODO()
|
||||
struct.nonNullString = TODO()
|
||||
struct.`object` = TODO()
|
||||
struct.array = TODO()
|
||||
struct.set = TODO()
|
||||
struct.dictionary = TODO()
|
||||
struct.mutableArray = TODO()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user