mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
All Swift-defined nominal types have their runtime metadata recorded in a special section, so it can be found later. This recording is suppressed when that type is stated to conform to a protocol, because the runtime can find nominal types in either place. Imported types would get their conformances recorded, but would not get recorded in the runtime metadata record otherwose. Therefore, the runtime would not be able to find such types by name. For any foreign type whose metadata we emit, make sure that metadata can be found by a runtime lookup.
67 lines
1.8 KiB
Swift
67 lines
1.8 KiB
Swift
// RUN: %target-run-simple-swift
|
|
// REQUIRES: executable_test
|
|
// REQUIRES: objc_interop
|
|
|
|
import StdlibUnittest
|
|
import Foundation
|
|
import CoreFoundation
|
|
|
|
let DemangleToMetadataTests = TestSuite("DemangleToMetadataObjC")
|
|
|
|
@objc class C : NSObject { }
|
|
@objc enum E: Int { case a }
|
|
@objc protocol P1 { }
|
|
protocol P2 { }
|
|
|
|
DemangleToMetadataTests.test("@objc classes") {
|
|
expectEqual(type(of: C()), _typeByMangledName("4main1CC")!)
|
|
}
|
|
|
|
DemangleToMetadataTests.test("@objc enums") {
|
|
expectEqual(type(of: E.a), _typeByMangledName("4main1EO")!)
|
|
}
|
|
|
|
func f1_composition_objc_protocol(_: P1) { }
|
|
|
|
DemangleToMetadataTests.test("@objc protocols") {
|
|
expectEqual(type(of: f1_composition_objc_protocol),
|
|
_typeByMangledName("yy4main2P1_pc")!)
|
|
}
|
|
|
|
DemangleToMetadataTests.test("Objective-C classes") {
|
|
expectEqual(type(of: NSObject()), _typeByMangledName("So8NSObjectC")!)
|
|
}
|
|
|
|
func f1_composition_NSCoding(_: NSCoding) { }
|
|
|
|
DemangleToMetadataTests.test("Objective-C protocols") {
|
|
expectEqual(type(of: f1_composition_NSCoding), _typeByMangledName("yySo8NSCoding_pc")!)
|
|
}
|
|
|
|
DemangleToMetadataTests.test("Classes that don't exist") {
|
|
expectNil(_typeByMangledName("4main4BoomC"))
|
|
}
|
|
|
|
DemangleToMetadataTests.test("CoreFoundation classes") {
|
|
expectEqual(CFArray.self, _typeByMangledName("So10CFArrayRefa")!)
|
|
}
|
|
|
|
DemangleToMetadataTests.test("Imported error types") {
|
|
expectEqual(URLError.self, _typeByMangledName("10Foundation8URLErrorV")!)
|
|
expectEqual(URLError.Code.self,
|
|
_typeByMangledName("10Foundation8URLErrorV4CodeV")!)
|
|
}
|
|
|
|
DemangleToMetadataTests.test("Imported swift_wrapper types") {
|
|
expectEqual(URLFileResourceType.self,
|
|
_typeByMangledName("So21NSURLFileResourceTypea")!)
|
|
}
|
|
|
|
DemangleToMetadataTests.test("Imported enum types") {
|
|
expectEqual(NSURLSessionTask.State.self,
|
|
_typeByMangledName("So21NSURLSessionTaskStateV")!)
|
|
}
|
|
|
|
runAllTests()
|
|
|