// 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 { } extension C : P1 { } extension C : P2 { } class D: P2 { } DemangleToMetadataTests.test("@objc protocol conformances") { expectEqual(CG4.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()