Authored by Bogdan Poplauschi

Prefetcher tests

@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 433BBBB71D7EF8200086B6E9 /* TestImage.gif in Resources */ = {isa = PBXBuildFile; fileRef = 433BBBB61D7EF8200086B6E9 /* TestImage.gif */; }; 13 433BBBB71D7EF8200086B6E9 /* TestImage.gif in Resources */ = {isa = PBXBuildFile; fileRef = 433BBBB61D7EF8200086B6E9 /* TestImage.gif */; };
14 433BBBB91D7EF8260086B6E9 /* TestImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 433BBBB81D7EF8260086B6E9 /* TestImage.png */; }; 14 433BBBB91D7EF8260086B6E9 /* TestImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 433BBBB81D7EF8260086B6E9 /* TestImage.png */; };
15 433BBBBB1D7EFA8B0086B6E9 /* MonochromeTestImage.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 433BBBBA1D7EFA8B0086B6E9 /* MonochromeTestImage.jpg */; }; 15 433BBBBB1D7EFA8B0086B6E9 /* MonochromeTestImage.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 433BBBBA1D7EFA8B0086B6E9 /* MonochromeTestImage.jpg */; };
  16 + 4369C1D11D97F80F007E863A /* SDWebImagePrefetcherTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4369C1D01D97F80F007E863A /* SDWebImagePrefetcherTests.m */; };
16 5F7F38AD1AE2A77A00B0E330 /* TestImage.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 5F7F38AC1AE2A77A00B0E330 /* TestImage.jpg */; }; 17 5F7F38AD1AE2A77A00B0E330 /* TestImage.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 5F7F38AC1AE2A77A00B0E330 /* TestImage.jpg */; };
17 DA248D57195472AA00390AB0 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA248D56195472AA00390AB0 /* XCTest.framework */; }; 18 DA248D57195472AA00390AB0 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA248D56195472AA00390AB0 /* XCTest.framework */; };
18 DA248D59195472AA00390AB0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA248D58195472AA00390AB0 /* Foundation.framework */; }; 19 DA248D59195472AA00390AB0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA248D58195472AA00390AB0 /* Foundation.framework */; };
@@ -30,6 +31,7 @@ @@ -30,6 +31,7 @@
30 433BBBB61D7EF8200086B6E9 /* TestImage.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = TestImage.gif; sourceTree = "<group>"; }; 31 433BBBB61D7EF8200086B6E9 /* TestImage.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = TestImage.gif; sourceTree = "<group>"; };
31 433BBBB81D7EF8260086B6E9 /* TestImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TestImage.png; sourceTree = "<group>"; }; 32 433BBBB81D7EF8260086B6E9 /* TestImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TestImage.png; sourceTree = "<group>"; };
32 433BBBBA1D7EFA8B0086B6E9 /* MonochromeTestImage.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = MonochromeTestImage.jpg; sourceTree = "<group>"; }; 33 433BBBBA1D7EFA8B0086B6E9 /* MonochromeTestImage.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = MonochromeTestImage.jpg; sourceTree = "<group>"; };
  34 + 4369C1D01D97F80F007E863A /* SDWebImagePrefetcherTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImagePrefetcherTests.m; sourceTree = "<group>"; };
33 5F7F38AC1AE2A77A00B0E330 /* TestImage.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = TestImage.jpg; sourceTree = "<group>"; }; 35 5F7F38AC1AE2A77A00B0E330 /* TestImage.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = TestImage.jpg; sourceTree = "<group>"; };
34 700B00151041D7EE118B1ABD /* Pods-Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig"; sourceTree = "<group>"; }; 36 700B00151041D7EE118B1ABD /* Pods-Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig"; sourceTree = "<group>"; };
35 A0085854E7D88C98F2F6C9FC /* Pods-Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig"; sourceTree = "<group>"; }; 37 A0085854E7D88C98F2F6C9FC /* Pods-Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig"; sourceTree = "<group>"; };
@@ -111,6 +113,7 @@ @@ -111,6 +113,7 @@
111 DA91BEBB19795BC9006F2536 /* UIImageMultiFormatTests.m */, 113 DA91BEBB19795BC9006F2536 /* UIImageMultiFormatTests.m */,
112 1E3C51E819B46E370092B5E6 /* SDWebImageDownloaderTests.m */, 114 1E3C51E819B46E370092B5E6 /* SDWebImageDownloaderTests.m */,
113 433BBBB41D7EF5C00086B6E9 /* SDWebImageDecoderTests.m */, 115 433BBBB41D7EF5C00086B6E9 /* SDWebImageDecoderTests.m */,
  116 + 4369C1D01D97F80F007E863A /* SDWebImagePrefetcherTests.m */,
114 ); 117 );
115 path = Tests; 118 path = Tests;
116 sourceTree = "<group>"; 119 sourceTree = "<group>";
@@ -242,6 +245,7 @@ @@ -242,6 +245,7 @@
242 buildActionMask = 2147483647; 245 buildActionMask = 2147483647;
243 files = ( 246 files = (
244 1E3C51E919B46E370092B5E6 /* SDWebImageDownloaderTests.m in Sources */, 247 1E3C51E919B46E370092B5E6 /* SDWebImageDownloaderTests.m in Sources */,
  248 + 4369C1D11D97F80F007E863A /* SDWebImagePrefetcherTests.m in Sources */,
245 DA248D69195475D800390AB0 /* SDImageCacheTests.m in Sources */, 249 DA248D69195475D800390AB0 /* SDImageCacheTests.m in Sources */,
246 DA248D6B195476AC00390AB0 /* SDWebImageManagerTests.m in Sources */, 250 DA248D6B195476AC00390AB0 /* SDWebImageManagerTests.m in Sources */,
247 433BBBB51D7EF5C00086B6E9 /* SDWebImageDecoderTests.m in Sources */, 251 433BBBB51D7EF5C00086B6E9 /* SDWebImageDecoderTests.m in Sources */,
  1 +/*
  2 + * This file is part of the SDWebImage package.
  3 + * (c) Olivier Poitrey <rs@dailymotion.com>
  4 + * (c) Matt Galloway
  5 + *
  6 + * For the full copyright and license information, please view the LICENSE
  7 + * file that was distributed with this source code.
  8 + */
  9 +
  10 +#define EXP_SHORTHAND // required by Expecta
  11 +
  12 +
  13 +#import <XCTest/XCTest.h>
  14 +#import <Expecta.h>
  15 +
  16 +#import "SDWebImagePrefetcher.h"
  17 +
  18 +@interface SDWebImagePrefetcherTests : XCTestCase
  19 +
  20 +@end
  21 +
  22 +@implementation SDWebImagePrefetcherTests
  23 +
  24 +- (void)test01ThatSharedPrefetcherIsNotEqualToInitPrefetcher {
  25 + SDWebImagePrefetcher *prefetcher = [[SDWebImagePrefetcher alloc] init];
  26 + expect(prefetcher).toNot.equal([SDWebImagePrefetcher sharedImagePrefetcher]);
  27 +}
  28 +
  29 +- (void)test02PrefetchMultipleImages {
  30 + XCTestExpectation *expectation = [self expectationWithDescription:@"Correct prefetch of multiple images"];
  31 +
  32 + NSMutableArray *imageURLs = [NSMutableArray array];
  33 +
  34 + for (int i=40; i<43; i++) {
  35 + NSString *imageURLString = [NSString stringWithFormat:@"https://s3.amazonaws.com/fast-image-cache/demo-images/FICDDemoImage%03d.jpg", i];
  36 + NSURL *imageURL = [NSURL URLWithString:imageURLString];
  37 + [imageURLs addObject:imageURL];
  38 + }
  39 +
  40 + __block int numberOfPrefetched = 0;
  41 +
  42 + [[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:imageURLs progress:^(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls) {
  43 + numberOfPrefetched += 1;
  44 + expect(numberOfPrefetched).to.equal(noOfFinishedUrls);
  45 + expect(noOfFinishedUrls).to.beLessThanOrEqualTo(noOfTotalUrls);
  46 + expect(noOfTotalUrls).to.equal(imageURLs.count);
  47 + } completed:^(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls) {
  48 + expect(numberOfPrefetched).to.equal(noOfFinishedUrls);
  49 + expect(noOfFinishedUrls).to.equal(imageURLs.count);
  50 + expect(noOfSkippedUrls).to.equal(0);
  51 + [expectation fulfill];
  52 + }];
  53 +
  54 + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil];
  55 +}
  56 +
  57 +- (void)test03PrefetchWithEmptyArrayWillCallTheCompletionWithAllZeros {
  58 + XCTestExpectation *expectation = [self expectationWithDescription:@"Prefetch with empty array"];
  59 +
  60 + [[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:@[] progress:nil completed:^(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls) {
  61 + expect(noOfFinishedUrls).to.equal(0);
  62 + expect(noOfSkippedUrls).to.equal(0);
  63 + [expectation fulfill];
  64 + }];
  65 +
  66 + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil];
  67 +}
  68 +
  69 +// TODO: test the prefetcher delegate works
  70 +
  71 +@end