1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
// RUN: %empty-directory(%t)
// RUN: %target-swiftc_driver -Xfrontend -disable-availability-checking %s -o %t/out
// RUN: %target-codesign %t/out
// RUN: %target-run %t/out
// REQUIRES: concurrency
// REQUIRES: objc_interop
// REQUIRES: executable_test
// UNSUPPORTED: use_os_stdlib
// UNSUPPORTED: back_deployment_runtime
import ObjectiveC
import _Concurrency
import StdlibUnittest
defer { runAllTests() }
var Tests = TestSuite("Actor.AssocObject")
@available(SwiftStdlib 5.0, *)
final actor Actor {
}
if #available(SwiftStdlib 5.0, *) {
Tests.test("final class crash when set assoc object")
.crashOutputMatches("objc_setAssociatedObject called on instance")
.code {
expectCrashLater()
let x = Actor()
objc_setAssociatedObject(x, "myKey", "myValue", .OBJC_ASSOCIATION_RETAIN)
}
}
@available(SwiftStdlib 5.0, *)
actor Actor2 {
}
if #available(SwiftStdlib 5.0, *) {
Tests.test("non-final class crash when set assoc object")
.crashOutputMatches("objc_setAssociatedObject called on instance")
.code {
expectCrashLater()
let x = Actor2()
objc_setAssociatedObject(x, "myKey", "myValue", .OBJC_ASSOCIATION_RETAIN)
}
}
@available(SwiftStdlib 5.0, *)
actor Actor5<T> {
var state: T
init(state: T) { self.state = state }
}
if #available(SwiftStdlib 5.0, *) {
Tests.test("base generic class crash when set assoc object")
.crashOutputMatches("objc_setAssociatedObject called on instance")
.code {
expectCrashLater()
let x = Actor5(state: 5)
objc_setAssociatedObject(x, "myKey", "myValue", .OBJC_ASSOCIATION_RETAIN)
}
Tests.test("base generic class metatype crash when set assoc object")
.crashOutputMatches("objc_setAssociatedObject called on instance")
.code {
expectCrashLater()
let x = Actor5<Int>.self
objc_setAssociatedObject(x, "myKey", "myValue", .OBJC_ASSOCIATION_RETAIN)
}
}
@available(SwiftStdlib 5.0, *)
actor ActorNSObjectSubKlass : NSObject {}
if #available(SwiftStdlib 5.0, *) {
Tests.test("no crash when inherit from nsobject")
.code {
let x = ActorNSObjectSubKlass()
objc_setAssociatedObject(x, "myKey", "myValue", .OBJC_ASSOCIATION_RETAIN)
}
}
@available(SwiftStdlib 5.0, *)
actor ActorNSObjectSubKlassGeneric<T> : NSObject {
var state: T
init(state: T) { self.state = state }
}
if #available(SwiftStdlib 5.0, *) {
Tests.test("no crash when generic inherit from nsobject")
.code {
let x = ActorNSObjectSubKlassGeneric(state: 5)
objc_setAssociatedObject(x, "myKey", "myValue", .OBJC_ASSOCIATION_RETAIN)
}
}
|