瀏覽代碼

Fix tests for using test host

- Specify access group because the tests is running on the host app
- Also Specify service name the default is bundle identifier
kishikawa katsumi 9 年之前
父節點
當前提交
bc6f294276
共有 1 個文件被更改,包括 149 次插入100 次删除
  1. 149 100
      Lib/KeychainAccessTests/KeychainAccessTests.swift

+ 149 - 100
Lib/KeychainAccessTests/KeychainAccessTests.swift

@@ -33,7 +33,7 @@ class KeychainAccessTests: XCTestCase {
     override func setUp() {
     override func setUp() {
         super.setUp()
         super.setUp()
 
 
-        do { try Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared").removeAll() } catch {}
+        do { try Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared").removeAll() } catch {}
         do { try Keychain(service: "Twitter").removeAll() } catch {}
         do { try Keychain(service: "Twitter").removeAll() } catch {}
         
         
         do { try Keychain(server: NSURL(string: "https://example.com")!, protocolType: .HTTPS).removeAll() } catch {}
         do { try Keychain(server: NSURL(string: "https://example.com")!, protocolType: .HTTPS).removeAll() } catch {}
@@ -88,11 +88,11 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertNil(try! keychain.get("password"))
             XCTAssertNil(try! keychain.get("password"))
         }
         }
     }
     }
-    
+
     func testGenericPasswordSubscripting() {
     func testGenericPasswordSubscripting() {
         do {
         do {
             // Add Keychain items
             // Add Keychain items
-            let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
+            let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
             
             
             keychain["username"] = "kishikawa_katsumi"
             keychain["username"] = "kishikawa_katsumi"
             keychain["password"] = "password_1234"
             keychain["password"] = "password_1234"
@@ -106,7 +106,7 @@ class KeychainAccessTests: XCTestCase {
         
         
         do {
         do {
             // Update Keychain items
             // Update Keychain items
-            let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
+            let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
             
             
             keychain["username"] = "katsumi_kishikawa"
             keychain["username"] = "katsumi_kishikawa"
             keychain["password"] = "1234_password"
             keychain["password"] = "1234_password"
@@ -120,7 +120,7 @@ class KeychainAccessTests: XCTestCase {
         
         
         do {
         do {
             // Remove Keychain items
             // Remove Keychain items
-            let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
+            let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
             
             
             keychain["username"] = nil
             keychain["username"] = nil
             keychain["password"] = nil
             keychain["password"] = nil
@@ -218,7 +218,8 @@ class KeychainAccessTests: XCTestCase {
     
     
     func testDefaultInitializer() {
     func testDefaultInitializer() {
         let keychain = Keychain()
         let keychain = Keychain()
-        XCTAssertEqual(keychain.service, "")
+        XCTAssertEqual(keychain.service, NSBundle.mainBundle().bundleIdentifier)
+        XCTAssertEqual(keychain.service, "com.kishikawakatsumi.TestHost")
         XCTAssertNil(keychain.accessGroup)
         XCTAssertNil(keychain.accessGroup)
     }
     }
     
     
@@ -229,15 +230,15 @@ class KeychainAccessTests: XCTestCase {
     }
     }
     
     
     func testInitializerWithAccessGroup() {
     func testInitializerWithAccessGroup() {
-        let keychain = Keychain(accessGroup: "12ABCD3E4F.shared")
-        XCTAssertEqual(keychain.service, "")
-        XCTAssertEqual(keychain.accessGroup, "12ABCD3E4F.shared")
+        let keychain = Keychain(accessGroup: "27AEDK3C9F.shared")
+        XCTAssertEqual(keychain.service, "com.kishikawakatsumi.TestHost")
+        XCTAssertEqual(keychain.accessGroup, "27AEDK3C9F.shared")
     }
     }
     
     
     func testInitializerWithServiceAndAccessGroup() {
     func testInitializerWithServiceAndAccessGroup() {
-        let keychain = Keychain(service: "com.example.github-token", accessGroup: "12ABCD3E4F.shared")
+        let keychain = Keychain(service: "com.example.github-token", accessGroup: "27AEDK3C9F.shared")
         XCTAssertEqual(keychain.service, "com.example.github-token")
         XCTAssertEqual(keychain.service, "com.example.github-token")
-        XCTAssertEqual(keychain.accessGroup, "12ABCD3E4F.shared")
+        XCTAssertEqual(keychain.accessGroup, "27AEDK3C9F.shared")
     }
     }
     
     
     func testInitializerWithServer() {
     func testInitializerWithServer() {
@@ -458,67 +459,74 @@ class KeychainAccessTests: XCTestCase {
 
 
     #if os(iOS) || os(tvOS)
     #if os(iOS) || os(tvOS)
     func testSetAttributes() {
     func testSetAttributes() {
-        do {
-            var attributes = [String: AnyObject]()
-            attributes[String(kSecAttrDescription)] = "Description Test"
-            attributes[String(kSecAttrComment)] = "Comment Test"
-            attributes[String(kSecAttrCreator)] = "Creator Test"
-            attributes[String(kSecAttrType)] = "Type Test"
-            attributes[String(kSecAttrLabel)] = "Label Test"
-            attributes[String(kSecAttrIsInvisible)] = true
-            attributes[String(kSecAttrIsNegative)] = true
-
-            let keychain = Keychain(service: "Twitter")
-                .attributes(attributes)
-                .accessibility(.WhenPasscodeSetThisDeviceOnly, authenticationPolicy: .UserPresence)
-
-            XCTAssertNil(keychain["kishikawakatsumi"], "not stored password")
+        let expectation = expectationWithDescription("Touch ID authentication")
 
 
+        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
             do {
             do {
-                let attributes = try keychain.get("kishikawakatsumi") { $0 }
-                XCTAssertNil(attributes)
-            } catch {
-                XCTFail("error occurred")
-            }
+                var attributes = [String: AnyObject]()
+                attributes[String(kSecAttrDescription)] = "Description Test"
+                attributes[String(kSecAttrComment)] = "Comment Test"
+                attributes[String(kSecAttrCreator)] = "Creator Test"
+                attributes[String(kSecAttrType)] = "Type Test"
+                attributes[String(kSecAttrLabel)] = "Label Test"
+                attributes[String(kSecAttrIsInvisible)] = true
+                attributes[String(kSecAttrIsNegative)] = true
+
+                let keychain = Keychain(service: "Twitter")
+                    .attributes(attributes)
+                    .accessibility(.WhenPasscodeSetThisDeviceOnly, authenticationPolicy: .UserPresence)
+
+                XCTAssertNil(keychain["kishikawakatsumi"], "not stored password")
+
+                do {
+                    let attributes = try keychain.get("kishikawakatsumi") { $0 }
+                    XCTAssertNil(attributes)
+                } catch {
+                    XCTFail("error occurred")
+                }
 
 
-            keychain["kishikawakatsumi"] = "password1234"
-            XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password")
+                keychain["kishikawakatsumi"] = "password1234"
+                XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password")
 
 
-            do {
-                let attributes = try keychain.get("kishikawakatsumi") { $0 }
-                XCTAssertEqual(attributes?.`class`, ItemClass.GenericPassword.rawValue)
-                XCTAssertEqual(attributes?.data, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
-                XCTAssertNil(attributes?.ref)
-                XCTAssertNotNil(attributes?.persistentRef)
-                XCTAssertEqual(attributes?.accessible, Accessibility.WhenPasscodeSetThisDeviceOnly.rawValue)
-                XCTAssertNotNil(attributes?.accessControl)
-                XCTAssertEqual(attributes?.accessGroup, "")
-                XCTAssertNotNil(attributes?.synchronizable)
-                XCTAssertNotNil(attributes?.creationDate)
-                XCTAssertNotNil(attributes?.modificationDate)
-                XCTAssertEqual(attributes?.attributeDescription, "Description Test")
-                XCTAssertEqual(attributes?.comment, "Comment Test")
-                XCTAssertEqual(attributes?.creator, "Creator Test")
-                XCTAssertEqual(attributes?.type, "Type Test")
-                XCTAssertEqual(attributes?.label, "Label Test")
-                XCTAssertEqual(attributes?.isInvisible, true)
-                XCTAssertEqual(attributes?.isNegative, true)
-                XCTAssertEqual(attributes?.account, "kishikawakatsumi")
-                XCTAssertEqual(attributes?.service, "Twitter")
-                XCTAssertNil(attributes?.generic)
-                XCTAssertNil(attributes?.securityDomain)
-                XCTAssertNil(attributes?.server)
-                XCTAssertNil(attributes?.`protocol`)
-                XCTAssertNil(attributes?.authenticationType)
-                XCTAssertNil(attributes?.port)
-                XCTAssertNil(attributes?.path)
-
-                XCTAssertEqual(attributes![String(kSecClass)] as? String, ItemClass.GenericPassword.rawValue)
-                XCTAssertEqual(attributes![String(kSecValueData)] as? NSData, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
-            } catch {
-                XCTFail("error occurred")
+                do {
+                    let attributes = try keychain.get("kishikawakatsumi") { $0 }
+                    XCTAssertEqual(attributes?.`class`, ItemClass.GenericPassword.rawValue)
+                    XCTAssertEqual(attributes?.data, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
+                    XCTAssertNil(attributes?.ref)
+                    XCTAssertNotNil(attributes?.persistentRef)
+                    XCTAssertEqual(attributes?.accessible, Accessibility.WhenPasscodeSetThisDeviceOnly.rawValue)
+                    XCTAssertNotNil(attributes?.accessControl)
+                    XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
+                    XCTAssertNotNil(attributes?.synchronizable)
+                    XCTAssertNotNil(attributes?.creationDate)
+                    XCTAssertNotNil(attributes?.modificationDate)
+                    XCTAssertEqual(attributes?.attributeDescription, "Description Test")
+                    XCTAssertEqual(attributes?.comment, "Comment Test")
+                    XCTAssertEqual(attributes?.creator, "Creator Test")
+                    XCTAssertEqual(attributes?.type, "Type Test")
+                    XCTAssertEqual(attributes?.label, "Label Test")
+                    XCTAssertEqual(attributes?.isInvisible, true)
+                    XCTAssertEqual(attributes?.isNegative, true)
+                    XCTAssertEqual(attributes?.account, "kishikawakatsumi")
+                    XCTAssertEqual(attributes?.service, "Twitter")
+                    XCTAssertNil(attributes?.generic)
+                    XCTAssertNil(attributes?.securityDomain)
+                    XCTAssertNil(attributes?.server)
+                    XCTAssertNil(attributes?.`protocol`)
+                    XCTAssertNil(attributes?.authenticationType)
+                    XCTAssertNil(attributes?.port)
+                    XCTAssertNil(attributes?.path)
+
+                    XCTAssertEqual(attributes![String(kSecClass)] as? String, ItemClass.GenericPassword.rawValue)
+                    XCTAssertEqual(attributes![String(kSecValueData)] as? NSData, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
+
+                    expectation.fulfill()
+                } catch {
+                    XCTFail("error occurred")
+                }
             }
             }
         }
         }
+        waitForExpectationsWithTimeout(10.0, handler: nil)
 
 
         do {
         do {
             var attributes = [String: AnyObject]()
             var attributes = [String: AnyObject]()
@@ -558,7 +566,7 @@ class KeychainAccessTests: XCTestCase {
                 } else {
                 } else {
                     XCTAssertNotNil(attributes?.accessControl)
                     XCTAssertNotNil(attributes?.accessControl)
                 }
                 }
-                XCTAssertEqual(attributes?.accessGroup, "")
+                XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
                 XCTAssertNotNil(attributes?.synchronizable)
                 XCTAssertNotNil(attributes?.synchronizable)
                 XCTAssertNotNil(attributes?.creationDate)
                 XCTAssertNotNil(attributes?.creationDate)
                 XCTAssertNotNil(attributes?.modificationDate)
                 XCTAssertNotNil(attributes?.modificationDate)
@@ -600,7 +608,7 @@ class KeychainAccessTests: XCTestCase {
                 } else {
                 } else {
                     XCTAssertNotNil(attributes?.accessControl)
                     XCTAssertNotNil(attributes?.accessControl)
                 }
                 }
-                XCTAssertEqual(attributes?.accessGroup, "")
+                XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
                 XCTAssertNotNil(attributes?.synchronizable)
                 XCTAssertNotNil(attributes?.synchronizable)
                 XCTAssertNotNil(attributes?.creationDate)
                 XCTAssertNotNil(attributes?.creationDate)
                 XCTAssertNotNil(attributes?.modificationDate)
                 XCTAssertNotNil(attributes?.modificationDate)
@@ -643,7 +651,7 @@ class KeychainAccessTests: XCTestCase {
                 } else {
                 } else {
                     XCTAssertNotNil(attributes?.accessControl)
                     XCTAssertNotNil(attributes?.accessControl)
                 }
                 }
-                XCTAssertEqual(attributes?.accessGroup, "")
+                XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
                 XCTAssertNotNil(attributes?.synchronizable)
                 XCTAssertNotNil(attributes?.synchronizable)
                 XCTAssertNotNil(attributes?.creationDate)
                 XCTAssertNotNil(attributes?.creationDate)
                 XCTAssertNotNil(attributes?.modificationDate)
                 XCTAssertNotNil(attributes?.modificationDate)
@@ -747,11 +755,11 @@ class KeychainAccessTests: XCTestCase {
     }
     }
     
     
     // MARK:
     // MARK:
-    
-    #if os(iOS)
+
+    #if !os(OSX) // Disable on CI
     func testErrorHandling() {
     func testErrorHandling() {
         do {
         do {
-            let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
+            let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
             try keychain.removeAll()
             try keychain.removeAll()
             XCTAssertTrue(true, "no error occurred")
             XCTAssertTrue(true, "no error occurred")
         } catch {
         } catch {
@@ -894,7 +902,7 @@ class KeychainAccessTests: XCTestCase {
         
         
         do { try Keychain().set(username_1, key: "username") } catch {}
         do { try Keychain().set(username_1, key: "username") } catch {}
         XCTAssertEqual(try! Keychain().get("username"), username_1, "stored username")
         XCTAssertEqual(try! Keychain().get("username"), username_1, "stored username")
-        XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "stored username")
+        XCTAssertNil(try! Keychain(service: service_1).get("password"), "not stored password")
         XCTAssertNil(try! Keychain(service: service_2).get("username"), "not stored username")
         XCTAssertNil(try! Keychain(service: service_2).get("username"), "not stored username")
         XCTAssertNil(try! Keychain(service: service_3).get("username"), "not stored username")
         XCTAssertNil(try! Keychain(service: service_3).get("username"), "not stored username")
         
         
@@ -918,7 +926,7 @@ class KeychainAccessTests: XCTestCase {
 
 
         do { try Keychain().set(password_1, key: "password") } catch {}
         do { try Keychain().set(password_1, key: "password") } catch {}
         XCTAssertEqual(try! Keychain().get("password"), password_1, "stored password")
         XCTAssertEqual(try! Keychain().get("password"), password_1, "stored password")
-        XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "stored password")
+        XCTAssertNil(try! Keychain(service: service_1).get("password"), "not stored password")
         XCTAssertNil(try! Keychain(service: service_2).get("password"), "not stored password")
         XCTAssertNil(try! Keychain(service: service_2).get("password"), "not stored password")
         XCTAssertNil(try! Keychain(service: service_3).get("password"), "not stored password")
         XCTAssertNil(try! Keychain(service: service_3).get("password"), "not stored password")
         
         
@@ -942,7 +950,7 @@ class KeychainAccessTests: XCTestCase {
         
         
         do { try Keychain().remove("username") } catch {}
         do { try Keychain().remove("username") } catch {}
         XCTAssertNil(try! Keychain().get("username"), "removed username")
         XCTAssertNil(try! Keychain().get("username"), "removed username")
-        XCTAssertNil(try! Keychain(service: service_1).get("username"), "removed username")
+        XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "left username")
         XCTAssertEqual(try! Keychain(service: service_2).get("username"), username_2, "left username")
         XCTAssertEqual(try! Keychain(service: service_2).get("username"), username_2, "left username")
         XCTAssertEqual(try! Keychain(service: service_3).get("username"), username_3, "left username")
         XCTAssertEqual(try! Keychain(service: service_3).get("username"), username_3, "left username")
         
         
@@ -966,7 +974,7 @@ class KeychainAccessTests: XCTestCase {
         
         
         do { try Keychain().remove("password") } catch {}
         do { try Keychain().remove("password") } catch {}
         XCTAssertNil(try! Keychain().get("password"), "removed password")
         XCTAssertNil(try! Keychain().get("password"), "removed password")
-        XCTAssertNil(try! Keychain(service: service_1).get("password"), "removed password")
+        XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "left password")
         XCTAssertEqual(try! Keychain(service: service_2).get("password"), password_2, "left password")
         XCTAssertEqual(try! Keychain(service: service_2).get("password"), password_2, "left password")
         XCTAssertEqual(try! Keychain(service: service_3).get("password"), password_3, "left password")
         XCTAssertEqual(try! Keychain(service: service_3).get("password"), password_3, "left password")
         
         
@@ -1013,7 +1021,7 @@ class KeychainAccessTests: XCTestCase {
 
 
     // MARK:
     // MARK:
 
 
-#if os(iOS)
+    #if !os(OSX) // Disable on CI
     func testAllKeys() {
     func testAllKeys() {
         do {
         do {
             let keychain = Keychain()
             let keychain = Keychain()
@@ -1029,34 +1037,48 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertEqual(allItems.count, 3)
             XCTAssertEqual(allItems.count, 3)
 
 
             let sortedItems = allItems.sort { (item1, item2) -> Bool in
             let sortedItems = allItems.sort { (item1, item2) -> Bool in
-                let value1 = item1["value"] as! String
-                let value2 = item2["value"] as! String
-                return value1.compare(value2) == NSComparisonResult.OrderedAscending || value1.compare(value2) == NSComparisonResult.OrderedSame
+                let key1 = item1["key"] as! String
+                let key2 = item2["key"] as! String
+                return key1.compare(key2) == .OrderedAscending || key1.compare(key2) == .OrderedSame
             }
             }
 
 
-            XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "")
+            #if !os(OSX)
+            XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
             XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
-            XCTAssertEqual(sortedItems[0]["service"] as? String, "")
+            XCTAssertEqual(sortedItems[0]["service"] as? String, "com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[0]["value"] as? String, "value1")
             XCTAssertEqual(sortedItems[0]["value"] as? String, "value1")
             XCTAssertEqual(sortedItems[0]["key"] as? String, "key1")
             XCTAssertEqual(sortedItems[0]["key"] as? String, "key1")
             XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "AfterFirstUnlock")
             XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "AfterFirstUnlock")
 
 
-            XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
             XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
-            XCTAssertEqual(sortedItems[1]["service"] as? String, "")
+            XCTAssertEqual(sortedItems[1]["service"] as? String, "com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[1]["value"] as? String, "value2")
             XCTAssertEqual(sortedItems[1]["value"] as? String, "value2")
             XCTAssertEqual(sortedItems[1]["key"] as? String, "key2")
             XCTAssertEqual(sortedItems[1]["key"] as? String, "key2")
             XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlock")
             XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlock")
 
 
-            XCTAssertEqual(sortedItems[2]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[2]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[2]["synchronizable"] as? String, "false")
             XCTAssertEqual(sortedItems[2]["synchronizable"] as? String, "false")
-            XCTAssertEqual(sortedItems[2]["service"] as? String, "")
+            XCTAssertEqual(sortedItems[2]["service"] as? String, "com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[2]["value"] as? String, "value3")
             XCTAssertEqual(sortedItems[2]["value"] as? String, "value3")
             XCTAssertEqual(sortedItems[2]["key"] as? String, "key3")
             XCTAssertEqual(sortedItems[2]["key"] as? String, "key3")
             XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[2]["accessibility"] as? String, "AfterFirstUnlock")
             XCTAssertEqual(sortedItems[2]["accessibility"] as? String, "AfterFirstUnlock")
+            #else
+            XCTAssertEqual(sortedItems[0]["service"] as? String, "com.kishikawakatsumi.TestHost")
+            XCTAssertEqual(sortedItems[0]["key"] as? String, "key1")
+            XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
+
+            XCTAssertEqual(sortedItems[1]["service"] as? String, "com.kishikawakatsumi.TestHost")
+            XCTAssertEqual(sortedItems[1]["key"] as? String, "key2")
+            XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
+
+            XCTAssertEqual(sortedItems[2]["service"] as? String, "com.kishikawakatsumi.TestHost")
+            XCTAssertEqual(sortedItems[2]["key"] as? String, "key3")
+            XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword")
+            #endif
         }
         }
         do {
         do {
             let keychain = Keychain(service: "service1")
             let keychain = Keychain(service: "service1")
@@ -1078,12 +1100,13 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertEqual(allItems.count, 2)
             XCTAssertEqual(allItems.count, 2)
 
 
             let sortedItems = allItems.sort { (item1, item2) -> Bool in
             let sortedItems = allItems.sort { (item1, item2) -> Bool in
-                let value1 = item1["value"] as! String
-                let value2 = item2["value"] as! String
-                return value1.compare(value2) == NSComparisonResult.OrderedAscending || value1.compare(value2) == NSComparisonResult.OrderedSame
+                let key1 = item1["key"] as! String
+                let key2 = item2["key"] as! String
+                return key1.compare(key2) == .OrderedAscending || key1.compare(key2) == .OrderedSame
             }
             }
 
 
-            XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "")
+            #if !os(OSX)
+            XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "true")
             XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "true")
             XCTAssertEqual(sortedItems[0]["service"] as? String, "service1")
             XCTAssertEqual(sortedItems[0]["service"] as? String, "service1")
             XCTAssertEqual(sortedItems[0]["value"] as? String, "service1_value1")
             XCTAssertEqual(sortedItems[0]["value"] as? String, "service1_value1")
@@ -1091,13 +1114,22 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "WhenUnlockedThisDeviceOnly")
             XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "WhenUnlockedThisDeviceOnly")
 
 
-            XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
             XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
             XCTAssertEqual(sortedItems[1]["service"] as? String, "service1")
             XCTAssertEqual(sortedItems[1]["service"] as? String, "service1")
             XCTAssertEqual(sortedItems[1]["value"] as? String, "service1_value2")
             XCTAssertEqual(sortedItems[1]["value"] as? String, "service1_value2")
             XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2")
             XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2")
             XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
             XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlockThisDeviceOnly")
             XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlockThisDeviceOnly")
+            #else
+            XCTAssertEqual(sortedItems[0]["service"] as? String, "service1")
+            XCTAssertEqual(sortedItems[0]["key"] as? String, "service1_key1")
+            XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
+
+            XCTAssertEqual(sortedItems[1]["service"] as? String, "service1")
+            XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2")
+            XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
+            #endif
         }
         }
         do {
         do {
             let keychain = Keychain(server: "https://google.com", protocolType: .HTTPS)
             let keychain = Keychain(server: "https://google.com", protocolType: .HTTPS)
@@ -1119,11 +1151,12 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertEqual(allItems.count, 2)
             XCTAssertEqual(allItems.count, 2)
 
 
             let sortedItems = allItems.sort { (item1, item2) -> Bool in
             let sortedItems = allItems.sort { (item1, item2) -> Bool in
-                let value1 = item1["value"] as! String
-                let value2 = item2["value"] as! String
-                return value1.compare(value2) == NSComparisonResult.OrderedAscending || value1.compare(value2) == NSComparisonResult.OrderedSame
+                let key1 = item1["key"] as! String
+                let key2 = item2["key"] as! String
+                return key1.compare(key2) == .OrderedAscending || key1.compare(key2) == .OrderedSame
             }
             }
 
 
+            #if !os(OSX)
             XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
             XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
             XCTAssertEqual(sortedItems[0]["value"] as? String, "google.com_value1")
             XCTAssertEqual(sortedItems[0]["value"] as? String, "google.com_value1")
             XCTAssertEqual(sortedItems[0]["key"] as? String, "google.com_key1")
             XCTAssertEqual(sortedItems[0]["key"] as? String, "google.com_key1")
@@ -1141,19 +1174,34 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertEqual(sortedItems[1]["authenticationType"] as? String, "Default")
             XCTAssertEqual(sortedItems[1]["authenticationType"] as? String, "Default")
             XCTAssertEqual(sortedItems[1]["protocol"] as? String, "HTTPS")
             XCTAssertEqual(sortedItems[1]["protocol"] as? String, "HTTPS")
             XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "Always")
             XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "Always")
+            #else
+            XCTAssertEqual(sortedItems[0]["key"] as? String, "google.com_key1")
+            XCTAssertEqual(sortedItems[0]["server"] as? String, "google.com")
+            XCTAssertEqual(sortedItems[0]["class"] as? String, "InternetPassword")
+            XCTAssertEqual(sortedItems[0]["authenticationType"] as? String, "Default")
+            XCTAssertEqual(sortedItems[0]["protocol"] as? String, "HTTPS")
+
+            XCTAssertEqual(sortedItems[1]["key"] as? String, "google.com_key2")
+            XCTAssertEqual(sortedItems[1]["server"] as? String, "google.com")
+            XCTAssertEqual(sortedItems[1]["class"] as? String, "InternetPassword")
+            XCTAssertEqual(sortedItems[1]["authenticationType"] as? String, "Default")
+            XCTAssertEqual(sortedItems[1]["protocol"] as? String, "HTTPS")
+            #endif
         }
         }
+
+        #if !os(OSX)
         do {
         do {
             let allKeys = Keychain.allKeys(.GenericPassword)
             let allKeys = Keychain.allKeys(.GenericPassword)
             XCTAssertEqual(allKeys.count, 5)
             XCTAssertEqual(allKeys.count, 5)
 
 
             let sortedKeys = allKeys.sort { (key1, key2) -> Bool in
             let sortedKeys = allKeys.sort { (key1, key2) -> Bool in
-                return key1.1.compare(key2.1) == NSComparisonResult.OrderedAscending || key1.1.compare(key2.1) == NSComparisonResult.OrderedSame
+                return key1.1.compare(key2.1) == .OrderedAscending || key1.1.compare(key2.1) == .OrderedSame
             }
             }
-            XCTAssertEqual(sortedKeys[0].0, "")
+            XCTAssertEqual(sortedKeys[0].0, "com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedKeys[0].1, "key1")
             XCTAssertEqual(sortedKeys[0].1, "key1")
-            XCTAssertEqual(sortedKeys[1].0, "")
+            XCTAssertEqual(sortedKeys[1].0, "com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedKeys[1].1, "key2")
             XCTAssertEqual(sortedKeys[1].1, "key2")
-            XCTAssertEqual(sortedKeys[2].0, "")
+            XCTAssertEqual(sortedKeys[2].0, "com.kishikawakatsumi.TestHost")
             XCTAssertEqual(sortedKeys[2].1, "key3")
             XCTAssertEqual(sortedKeys[2].1, "key3")
             XCTAssertEqual(sortedKeys[3].0, "service1")
             XCTAssertEqual(sortedKeys[3].0, "service1")
             XCTAssertEqual(sortedKeys[3].1, "service1_key1")
             XCTAssertEqual(sortedKeys[3].1, "service1_key1")
@@ -1165,14 +1213,16 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertEqual(allKeys.count, 2)
             XCTAssertEqual(allKeys.count, 2)
 
 
             let sortedKeys = allKeys.sort { (key1, key2) -> Bool in
             let sortedKeys = allKeys.sort { (key1, key2) -> Bool in
-                return key1.1.compare(key2.1) == NSComparisonResult.OrderedAscending || key1.1.compare(key2.1) == NSComparisonResult.OrderedSame
+                return key1.1.compare(key2.1) == .OrderedAscending || key1.1.compare(key2.1) == .OrderedSame
             }
             }
             XCTAssertEqual(sortedKeys[0].0, "google.com")
             XCTAssertEqual(sortedKeys[0].0, "google.com")
             XCTAssertEqual(sortedKeys[0].1, "google.com_key1")
             XCTAssertEqual(sortedKeys[0].1, "google.com_key1")
             XCTAssertEqual(sortedKeys[1].0, "google.com")
             XCTAssertEqual(sortedKeys[1].0, "google.com")
             XCTAssertEqual(sortedKeys[1].1, "google.com_key2")
             XCTAssertEqual(sortedKeys[1].1, "google.com_key2")
         }
         }
+        #endif
     }
     }
+    #endif
 
 
     func testDescription() {
     func testDescription() {
         do {
         do {
@@ -1182,7 +1232,6 @@ class KeychainAccessTests: XCTestCase {
             XCTAssertEqual(keychain.debugDescription, "[]")
             XCTAssertEqual(keychain.debugDescription, "[]")
         }
         }
     }
     }
-#endif
 
 
     // MARK:
     // MARK: