// RUN: %target-run-simple-swift // REQUIRES: executable_test // REQUIRES: objc_interop import Foundation import StdlibUnittest let testSuite = TestSuite("SwiftNativeNSXXXCoding") // Ensure that the class named `name`, subclass of T, gracefully handles // being decoded. It doesn't have to work, just not crash. private func test(type: T.Type, name: String) { if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { let archiver = NSKeyedArchiver(requiringSecureCoding: true) archiver.setClassName(name, for: T.self) archiver.encode(T(), forKey: "key") archiver.finishEncoding() let d = archiver.encodedData let unarchiver = try! NSKeyedUnarchiver(forReadingFrom: d) _ = unarchiver.decodeObject(of: T.self, forKey: "key") } } private func test(type: T.Type) { test(type: type, name: "__SwiftNative\(type)Base") test(type: type, name: "Swift.__SwiftNative\(type)") } // Test all the classes listed in SwiftNativeNSXXXBase.mm.gyb except for // NSEnumerator (which doesn't conform to NSCoding). if #available(iOS 13, macOS 10.15, tvOS 13, watchOS 6, *) { testSuite.test("NSArray") { test(type: NSArray.self) } testSuite.test("NSDictionary") { test(type: NSDictionary.self) } testSuite.test("NSSet") { test(type: NSSet.self) } testSuite.test("NSString") { test(type: NSString.self) } } runAllTests()