// RUN: %target-run-simple-swift // REQUIRES: executable_test // REQUIRES: objc_interop import Foundation import StdlibUnittest var URLSessionConfigurationUsage = TestSuite("URLSessionConfigurationUsage") // URLSessionConfiguration.protocolClasses is a prominent example of an // NSArray * in Foundation. Make sure it works. URLSessionConfigurationUsage.test("protocolClasses") { if let protocols = URLSessionConfiguration .default .protocolClasses { for proto in protocols { // The protocol classes should all be subclasses of URLProtocol. _ = proto as! URLProtocol.Type } } } // Validate that Swift arrays of class objects can be bridged to NSArray // and recovered as arrays of class objects. var ArrayOfClassObjectBridging = TestSuite("ArrayOfClassObjectBridging") ArrayOfClassObjectBridging.test("bridging class object array to NSArray") { let classes: [NSObject.Type] = [NSObject.self, NSString.self, NSArray.self] let classesBridged: NSArray = classes as NSArray expectTrue(classesBridged.count == 3) expectTrue(classesBridged[0] as AnyObject === NSObject.self) expectTrue(classesBridged[1] as AnyObject === NSString.self) expectTrue(classesBridged[2] as AnyObject === NSArray.self) } ArrayOfClassObjectBridging.test("bridging NSArray of class objects to [AnyObject]") { let classes: [NSObject.Type] = [NSObject.self, NSString.self, NSArray.self] let classesBridged: NSArray = classes as NSArray let classesUnbridgedAsAnyObject = classesBridged as [AnyObject] expectTrue(classesUnbridgedAsAnyObject.count == 3) expectTrue(classesUnbridgedAsAnyObject[0] === NSObject.self) expectTrue(classesUnbridgedAsAnyObject[1] === NSString.self) expectTrue(classesUnbridgedAsAnyObject[2] === NSArray.self) } ArrayOfClassObjectBridging.test("bridging NSArray of class objects to [AnyClass]") { let classes: [NSObject.Type] = [NSObject.self, NSString.self, NSArray.self] let classesBridged: NSArray = classes as NSArray if let classesUnbridgedAsAnyClass = classesBridged as? [AnyClass] { expectTrue(classesUnbridgedAsAnyClass.count == 3) expectTrue(classesUnbridgedAsAnyClass[0] == NSObject.self) expectTrue(classesUnbridgedAsAnyClass[1] == NSString.self) expectTrue(classesUnbridgedAsAnyClass[2] == NSArray.self) } else { expectUnreachable() } } ArrayOfClassObjectBridging.test("bridging NSArray of class objects to [NSObject.Type]") { let classes: [NSObject.Type] = [NSObject.self, NSString.self, NSArray.self] let classesBridged: NSArray = classes as NSArray if let classesUnbridgedAsNSObjectType = classesBridged as? [NSObject.Type] { expectTrue(classesUnbridgedAsNSObjectType.count == 3) expectTrue(classesUnbridgedAsNSObjectType[0] == NSObject.self) expectTrue(classesUnbridgedAsNSObjectType[1] == NSString.self) expectTrue(classesUnbridgedAsNSObjectType[2] == NSArray.self) } else { expectUnreachable() } } runAllTests()