| // RUN: %target-run-simple-swiftgyb |
| // REQUIRES: executable_test |
| // REQUIRES: objc_interop |
| |
| import Foundation |
| import StdlibUnittest |
| |
| let NSStringTests = TestSuite("NSString") |
| |
| NSStringTests.test("String.init(_: NSString)") |
| .forEach(in: ["", "a", "abc", "a\u{0301}", "\u{e1}"]) { |
| input in |
| let nss: NSString = NSString(utf8String: input)! |
| expectEqual(input, String(nss)) |
| } |
| |
| NSStringTests.test("NSString bridges to String with custom AnyHashable") |
| .forEach(in: ["", "a", "abc", "a\u{0301}", "\u{e1}"]) { |
| input in |
| let s = input._bridgeToObjectiveC() |
| expectNotNil(s._toCustomAnyHashable()) |
| expectEqual(String.self, type(of: AnyHashable(s).base)) |
| } |
| |
| NSStringTests.test("AnyHashable(NSString) uses Swift String comparison rules") { |
| // U+0301 COMBINING ACUTE ACCENT |
| // U+00E1 LATIN SMALL LETTER A WITH ACUTE |
| let nss1: NSString = NSString(utf8String: "a\u{0301}")! |
| let nss2: NSString = NSString(utf8String: "\u{e1}")! |
| let ah1 = AnyHashable(nss1) |
| let ah2 = AnyHashable(nss2) |
| expectEqual(String.self, type(of: ah1.base)) |
| expectEqual(String.self, type(of: ah2.base)) |
| checkHashable([ah1, ah2], equalityOracle: { _, _ in true }) |
| } |
| |
| runAllTests() |
| |