瀏覽代碼

Add allItems and allKeys tests

kishikawa katsumi 10 年之前
父節點
當前提交
4fa671abcc
共有 1 個文件被更改,包括 144 次插入0 次删除
  1. 144 0
      Lib/KeychainAccessTests/KeychainAccessTests.swift

+ 144 - 0
Lib/KeychainAccessTests/KeychainAccessTests.swift

@@ -665,6 +665,150 @@ class KeychainAccessTests: XCTestCase {
 
     // MARK:
 
+#if os(iOS)
+    func testAllKeys() {
+        do {
+            let keychain = Keychain()
+            keychain["key1"] = "value1"
+            keychain["key2"] = "value2"
+            keychain["key3"] = "value3"
+
+            let allKeys = keychain.allKeys()
+            print(allKeys)
+            XCTAssertEqual(allKeys.count, 3)
+            XCTAssertEqual(allKeys.sort(), ["key1", "key2", "key3"])
+
+            let allItems = keychain.allItems()
+            XCTAssertEqual(allItems.count, 3)
+
+            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
+            }
+
+            XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
+            XCTAssertEqual(sortedItems[0]["service"] as? String, "")
+            XCTAssertEqual(sortedItems[0]["value"] as? String, "value1")
+            XCTAssertEqual(sortedItems[0]["key"] as? String, "key1")
+            XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
+            XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "AfterFirstUnlock")
+
+            XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
+            XCTAssertEqual(sortedItems[1]["service"] as? String, "")
+            XCTAssertEqual(sortedItems[1]["value"] as? String, "value2")
+            XCTAssertEqual(sortedItems[1]["key"] as? String, "key2")
+            XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
+            XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlock")
+
+            XCTAssertEqual(sortedItems[2]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[2]["synchronizable"] as? String, "false")
+            XCTAssertEqual(sortedItems[2]["service"] as? String, "")
+            XCTAssertEqual(sortedItems[2]["value"] as? String, "value3")
+            XCTAssertEqual(sortedItems[2]["key"] as? String, "key3")
+            XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword")
+            XCTAssertEqual(sortedItems[2]["accessibility"] as? String, "AfterFirstUnlock")
+        }
+        do {
+            let keychain = Keychain(service: "service1")
+            try! keychain
+                .synchronizable(true)
+                .accessibility(.WhenUnlockedThisDeviceOnly)
+                .set("service1_value1", key: "service1_key1")
+
+            try! keychain
+                .synchronizable(false)
+                .accessibility(.AfterFirstUnlockThisDeviceOnly)
+                .set("service1_value2", key: "service1_key2")
+
+            let allKeys = keychain.allKeys()
+            XCTAssertEqual(allKeys.count, 2)
+            XCTAssertEqual(allKeys.sort(), ["service1_key1", "service1_key2"])
+
+            let allItems = keychain.allItems()
+            XCTAssertEqual(allItems.count, 2)
+
+            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
+            }
+
+            XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "true")
+            XCTAssertEqual(sortedItems[0]["service"] as? String, "service1")
+            XCTAssertEqual(sortedItems[0]["value"] as? String, "service1_value1")
+            XCTAssertEqual(sortedItems[0]["key"] as? String, "service1_key1")
+            XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
+            XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "WhenUnlockedThisDeviceOnly")
+
+            XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "")
+            XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
+            XCTAssertEqual(sortedItems[1]["service"] as? String, "service1")
+            XCTAssertEqual(sortedItems[1]["value"] as? String, "service1_value2")
+            XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2")
+            XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
+            XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlockThisDeviceOnly")
+        }
+        do {
+            let keychain = Keychain(server: "https://google.com", protocolType: .HTTPS)
+            try! keychain
+                .synchronizable(false)
+                .accessibility(.AlwaysThisDeviceOnly)
+                .set("google.com_value1", key: "google.com_key1")
+
+            try! keychain
+                .synchronizable(true)
+                .accessibility(.Always)
+                .set("google.com_value2", key: "google.com_key2")
+
+            let allKeys = keychain.allKeys()
+            XCTAssertEqual(allKeys.count, 2)
+            XCTAssertEqual(allKeys.sort(), ["google.com_key1", "google.com_key2"])
+
+            let allItems = keychain.allItems()
+            XCTAssertEqual(allItems.count, 2)
+
+            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
+            }
+
+            XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
+            XCTAssertEqual(sortedItems[0]["value"] as? String, "google.com_value1")
+            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[0]["accessibility"] as? String, "AlwaysThisDeviceOnly")
+
+            XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "true")
+            XCTAssertEqual(sortedItems[1]["value"] as? String, "google.com_value2")
+            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")
+            XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "Always")
+        }
+    }
+
+    func testDescription() {
+        do {
+            let keychain = Keychain()
+
+            XCTAssertEqual(keychain.description, "[]")
+            XCTAssertEqual(keychain.debugDescription, "[]")
+        }
+    }
+#endif
+
+    // MARK:
+
     func testAuthenticationPolicy() {
         guard #available(iOS 9.0, OSX 10.11, *) else {
             return