Переглянути джерело

Add test for prefetch with processor

onevcat 9 роки тому
батько
коміт
5da7886346
1 змінених файлів з 55 додано та 0 видалено
  1. 55 0
      Tests/KingfisherTests/ImagePrefetcherTests.swift

+ 55 - 0
Tests/KingfisherTests/ImagePrefetcherTests.swift

@@ -190,4 +190,59 @@ class ImagePrefetcherTests: XCTestCase {
         prefetcher.start()
         waitForExpectations(timeout: 5, handler: nil)
     }
+    
+    func testFetchWithProcessor() {
+        let expectation = self.expectation(description: "wait for prefetching images")
+        
+        var urls = [URL]()
+        for URLString in testKeys {
+            _ = stubRequest("GET", URLString).andReturn(200)?.withBody(testImageData)
+            urls.append(URL(string: URLString)!)
+        }
+        
+        let p = RoundCornerImageProcessor(cornerRadius: 20)
+        
+        func prefetchAgain() {
+            var progressCalledCount = 0
+            let prefetcher = ImagePrefetcher(urls: urls, options: [.processor(p)],
+                                             progressBlock: { (skippedResources, failedResources, completedResources) -> () in
+                                                progressCalledCount += 1
+            },
+                                             completionHandler: {(skippedResources, failedResources, completedResources) -> () in
+                                                
+                                                XCTAssertEqual(skippedResources.count, urls.count, "There should be one item skipped since it is just prefetched.")
+                                                XCTAssertEqual(failedResources.count, 0, "There should be no failed downloading.")
+                                                XCTAssertEqual(completedResources.count, 0, "No need to prefetch anymore")
+                                                XCTAssertEqual(progressCalledCount, urls.count, "Progress should be called the same time of download count.")
+                                                for url in urls {
+                                                    XCTAssertTrue(KingfisherManager.shared.cache.isImageCached(forKey: url.absoluteString, processorIdentifier: p.identifier).cached)
+                                                }
+                                                expectation.fulfill()
+
+            })
+            prefetcher.start()
+        }
+        
+        
+        var progressCalledCount = 0
+        let prefetcher = ImagePrefetcher(urls: urls, options: [.processor(p)],
+                                         progressBlock: { (skippedResources, failedResources, completedResources) -> () in
+                                            progressCalledCount += 1
+        },
+                                         completionHandler: {(skippedResources, failedResources, completedResources) -> () in
+                                            
+                                            XCTAssertEqual(skippedResources.count, 0, "There should be no items skipped.")
+                                            XCTAssertEqual(failedResources.count, 0, "There should be no failed downloading.")
+                                            XCTAssertEqual(completedResources.count, urls.count, "All resources prefetching should be completed.")
+                                            XCTAssertEqual(progressCalledCount, urls.count, "Progress should be called the same time of download count.")
+                                            for url in urls {
+                                                XCTAssertTrue(KingfisherManager.shared.cache.isImageCached(forKey: url.absoluteString, processorIdentifier: p.identifier).cached)
+                                            }
+                                            
+                                            prefetchAgain()
+        })
+        prefetcher.start()
+        
+        waitForExpectations(timeout: 5, handler: nil)
+    }
 }