| // RUN: %target-run-simple-swift-swift3 |
| // REQUIRES: executable_test |
| // REQUIRES: objc_interop |
| |
| import StdlibUnittest |
| import Foundation |
| import CoreFoundation |
| import CoreLocation |
| |
| 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")!) |
| } |
| |
| class CG4<T: P1, U: P2> { } |
| extension C : P1 { } |
| extension C : P2 { } |
| |
| class D: P2 { } |
| |
| DemangleToMetadataTests.test("@objc protocol conformances") { |
| expectEqual(CG4<C, C>.self, |
| _typeByMangledName("4main3CG4CyAA1CCAA1CCG")!) |
| expectNil(_typeByMangledName("4main3CG4CyAA1DCAA1DCG")) |
| } |
| |
| DemangleToMetadataTests.test("synthesized declarations") { |
| expectEqual(CLError.self, _typeByMangledName("SC7CLErrorLeV")!) |
| expectNil(_typeByMangledName("SC7CLErrorV")) |
| expectEqual(CLError.Code.self, _typeByMangledName("So7CLErrorV")!) |
| |
| let error = NSError(domain: NSCocoaErrorDomain, code: 0) |
| let reflectionString = String(reflecting: CLError(_nsError: error)) |
| expectTrue(reflectionString.hasPrefix("__C_Synthesized.related decl 'e' for CLError(_nsError:")) |
| } |
| |
| runAllTests() |
| |