Skip to content

Commit 911a9a8

Browse files
committed
Fix the wrong test because now ioQueue and encodeQueue is different thing, we should not assume calling storeImage and queryDiskCache get the data (they are not guarded by the same serial queue)
1 parent e083ab2 commit 911a9a8

File tree

2 files changed

+88
-67
lines changed

2 files changed

+88
-67
lines changed

Tests/Tests/SDImageCacheTests.m

Lines changed: 80 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,21 @@ - (void)test03ImageCacheCanBeInstantiated {
3636
- (void)test04ClearDiskCache{
3737
XCTestExpectation *expectation = [self expectationWithDescription:@"Clear disk cache"];
3838

39-
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:nil];
40-
[[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
41-
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal([self testJPEGImage]);
42-
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
43-
if (!isInCache) {
44-
[[SDImageCache sharedImageCache] calculateSizeWithCompletionBlock:^(NSUInteger fileCount, NSUInteger totalSize) {
45-
expect(fileCount).to.equal(0);
46-
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
47-
[expectation fulfill];
39+
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:^{
40+
[[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
41+
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal([self testJPEGImage]);
42+
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
43+
if (!isInCache) {
44+
[[SDImageCache sharedImageCache] calculateSizeWithCompletionBlock:^(NSUInteger fileCount, NSUInteger totalSize) {
45+
expect(fileCount).to.equal(0);
46+
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
47+
[expectation fulfill];
48+
}];
4849
}];
49-
}];
50-
} else {
51-
XCTFail(@"Image should not be in cache");
52-
}
50+
} else {
51+
XCTFail(@"Image should not be in cache");
52+
}
53+
}];
5354
}];
5455
}];
5556
[self waitForExpectationsWithCommonTimeout];
@@ -79,17 +80,22 @@ - (void)test06InsertionOfImage {
7980
XCTestExpectation *expectation = [self expectationWithDescription:@"storeImage forKey"];
8081

8182
UIImage *image = [self testJPEGImage];
82-
[[SDImageCache sharedImageCache] storeImage:image forKey:kTestImageKeyJPEG completion:nil];
83-
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal(image);
84-
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
85-
if (isInCache) {
86-
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
87-
[expectation fulfill];
88-
}];
89-
} else {
90-
XCTFail(@"Image should be in cache");
91-
}
83+
[[SDImageCache sharedImageCache] removeImageFromDiskForKey:kTestImageKeyJPEG];
84+
[[SDImageCache sharedImageCache] removeImageFromMemoryForKey:kTestImageKeyJPEG];
85+
[[SDImageCache sharedImageCache] storeImage:image forKey:kTestImageKeyJPEG completion:^{
86+
// Disk cache store in async
87+
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
88+
if (isInCache) {
89+
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
90+
[expectation fulfill];
91+
}];
92+
} else {
93+
XCTFail(@"Image should be in cache");
94+
}
95+
}];
9296
}];
97+
// Memory cache store in sync
98+
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal(image);
9399
[self waitForExpectationsWithCommonTimeout];
94100
}
95101

@@ -98,34 +104,41 @@ - (void)test07InsertionOfImageForcingDiskStorage {
98104
XCTestExpectation *expectation = [self expectationWithDescription:@"storeImage forKey toDisk=YES"];
99105

100106
UIImage *image = [self testJPEGImage];
101-
[[SDImageCache sharedImageCache] storeImage:image forKey:kTestImageKeyJPEG toDisk:YES completion:nil];
102-
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal(image);
103-
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
104-
if (isInCache) {
105-
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
106-
[expectation fulfill];
107-
}];
108-
} else {
109-
XCTFail(@"Image should be in cache");
110-
}
107+
[[SDImageCache sharedImageCache] storeImage:image forKey:kTestImageKeyJPEG toDisk:YES completion:^{
108+
// Disk cache store in async
109+
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
110+
if (isInCache) {
111+
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
112+
[expectation fulfill];
113+
}];
114+
} else {
115+
XCTFail(@"Image should be in cache");
116+
}
117+
}];
111118
}];
119+
// Memory cache store in sync
120+
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal(image);
112121
[self waitForExpectationsWithCommonTimeout];
113122
}
114123

115124
// Testing storeImage:forKey:toDisk:NO
116125
- (void)test08InsertionOfImageOnlyInMemory {
117126
XCTestExpectation *expectation = [self expectationWithDescription:@"storeImage forKey toDisk=NO"];
118127
UIImage *image = [self testJPEGImage];
119-
[[SDImageCache sharedImageCache] storeImage:image forKey:kTestImageKeyJPEG toDisk:NO completion:nil];
120-
121-
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal([self testJPEGImage]);
122-
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
123-
if (!isInCache) {
124-
[expectation fulfill];
125-
} else {
126-
XCTFail(@"Image should not be in cache");
127-
}
128+
[[SDImageCache sharedImageCache] removeImageFromDiskForKey:kTestImageKeyJPEG];
129+
[[SDImageCache sharedImageCache] removeImageFromMemoryForKey:kTestImageKeyJPEG];
130+
[[SDImageCache sharedImageCache] storeImage:image forKey:kTestImageKeyJPEG toDisk:NO completion:^{
131+
// Disk cache store in async
132+
[[SDImageCache sharedImageCache] diskImageExistsWithKey:kTestImageKeyJPEG completion:^(BOOL isInCache) {
133+
if (!isInCache) {
134+
[expectation fulfill];
135+
} else {
136+
XCTFail(@"Image should not be in cache");
137+
}
138+
}];
128139
}];
140+
// Memory cache store in sync
141+
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.equal([self testJPEGImage]);
129142
[[SDImageCache sharedImageCache] storeImageToMemory:image forKey:kTestImageKeyJPEG];
130143
[[SDImageCache sharedImageCache] clearMemory];
131144
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.beNil();
@@ -135,46 +148,50 @@ - (void)test08InsertionOfImageOnlyInMemory {
135148
- (void)test09RetrieveImageThroughNSOperation {
136149
XCTestExpectation *expectation = [self expectationWithDescription:@"queryCacheOperationForKey"];
137150
UIImage *imageForTesting = [self testJPEGImage];
138-
[[SDImageCache sharedImageCache] storeImage:imageForTesting forKey:kTestImageKeyJPEG completion:nil];
139-
id<SDWebImageOperation> operation = [[SDImageCache sharedImageCache] queryCacheOperationForKey:kTestImageKeyJPEG done:^(UIImage *image, NSData *data, SDImageCacheType cacheType) {
140-
expect(image).to.equal(imageForTesting);
141-
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
142-
[expectation fulfill];
151+
[[SDImageCache sharedImageCache] storeImage:imageForTesting forKey:kTestImageKeyJPEG completion:^{
152+
id<SDWebImageOperation> operation = [[SDImageCache sharedImageCache] queryCacheOperationForKey:kTestImageKeyJPEG done:^(UIImage *image, NSData *data, SDImageCacheType cacheType) {
153+
expect(image).to.equal(imageForTesting);
154+
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
155+
[expectation fulfill];
156+
}];
143157
}];
158+
expect(operation).toNot.beNil;
144159
}];
145-
expect(operation).toNot.beNil;
146160
[self waitForExpectationsWithCommonTimeout];
147161
}
148162

149163
- (void)test10RemoveImageForKeyWithCompletion {
150164
XCTestExpectation *expectation = [self expectationWithDescription:@"removeImageForKey"];
151-
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:nil];
152-
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
153-
expect([[SDImageCache sharedImageCache] imageFromDiskCacheForKey:kTestImageKeyJPEG]).to.beNil;
154-
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.beNil;
155-
[expectation fulfill];
165+
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:^{
166+
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG withCompletion:^{
167+
expect([[SDImageCache sharedImageCache] imageFromDiskCacheForKey:kTestImageKeyJPEG]).to.beNil;
168+
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.beNil;
169+
[expectation fulfill];
170+
}];
156171
}];
157172
[self waitForExpectationsWithCommonTimeout];
158173
}
159174

160175
- (void)test11RemoveImageforKeyNotFromDiskWithCompletion{
161176
XCTestExpectation *expectation = [self expectationWithDescription:@"removeImageForKey fromDisk:NO"];
162-
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:nil];
163-
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG fromDisk:NO withCompletion:^{
164-
expect([[SDImageCache sharedImageCache] imageFromDiskCacheForKey:kTestImageKeyJPEG]).toNot.beNil;
165-
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.beNil;
166-
[expectation fulfill];
177+
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:^{
178+
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG fromDisk:NO withCompletion:^{
179+
expect([[SDImageCache sharedImageCache] imageFromDiskCacheForKey:kTestImageKeyJPEG]).toNot.beNil;
180+
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.beNil;
181+
[expectation fulfill];
182+
}];
167183
}];
168184
[self waitForExpectationsWithCommonTimeout];
169185
}
170186

171187
- (void)test12RemoveImageforKeyFromDiskWithCompletion{
172188
XCTestExpectation *expectation = [self expectationWithDescription:@"removeImageForKey fromDisk:YES"];
173-
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:nil];
174-
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG fromDisk:YES withCompletion:^{
175-
expect([[SDImageCache sharedImageCache] imageFromDiskCacheForKey:kTestImageKeyJPEG]).to.beNil;
176-
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.beNil;
177-
[expectation fulfill];
189+
[[SDImageCache sharedImageCache] storeImage:[self testJPEGImage] forKey:kTestImageKeyJPEG completion:^{
190+
[[SDImageCache sharedImageCache] removeImageForKey:kTestImageKeyJPEG fromDisk:YES withCompletion:^{
191+
expect([[SDImageCache sharedImageCache] imageFromDiskCacheForKey:kTestImageKeyJPEG]).to.beNil;
192+
expect([[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:kTestImageKeyJPEG]).to.beNil;
193+
[expectation fulfill];
194+
}];
178195
}];
179196
[self waitForExpectationsWithCommonTimeout];
180197
}

Tests/Tests/SDWebImageManagerTests.m

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,11 @@ - (void)test15ThatOriginalQueryCacheTypeWork {
389389
NSString *originalKey = [SDWebImageManager.sharedManager cacheKeyForURL:url];
390390
NSString *transformedKey = [SDWebImageManager.sharedManager cacheKeyForURL:url context:@{SDWebImageContextImageTransformer : transformer}];
391391

392-
[[SDWebImageManager sharedManager] loadImageWithURL:url options:0 context:@{SDWebImageContextImageTransformer : transformer, SDWebImageContextOriginalStoreCacheType : @(SDImageCacheTypeAll)} progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
392+
[[SDImageCache sharedImageCache] removeImageFromDiskForKey:originalKey];
393+
[[SDImageCache sharedImageCache] removeImageFromMemoryForKey:originalKey];
394+
[[SDImageCache sharedImageCache] removeImageFromDiskForKey:transformedKey];
395+
[[SDImageCache sharedImageCache] removeImageFromMemoryForKey:transformedKey];
396+
[[SDWebImageManager sharedManager] loadImageWithURL:url options:SDWebImageWaitStoreCache context:@{SDWebImageContextImageTransformer : transformer, SDWebImageContextOriginalStoreCacheType : @(SDImageCacheTypeAll)} progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
393397
// Get the transformed image
394398
expect(image).equal(transformer.testImage);
395399
// Now, the original image is stored into memory/disk cache
@@ -400,7 +404,7 @@ - (void)test15ThatOriginalQueryCacheTypeWork {
400404
expect(image).equal(transformedImage);
401405
[SDImageCache.sharedImageCache removeImageFromDiskForKey:transformedKey];
402406
[SDImageCache.sharedImageCache removeImageFromMemoryForKey:transformedKey];
403-
[SDWebImageManager.sharedManager loadImageWithURL:url options:SDWebImageFromCacheOnly context:@{SDWebImageContextImageTransformer : transformer, SDWebImageContextOriginalQueryCacheType : @(SDImageCacheTypeAll)} progress:nil completed:^(UIImage * _Nullable image2, NSData * _Nullable data2, NSError * _Nullable error2, SDImageCacheType cacheType2, BOOL finished2, NSURL * _Nullable imageURL2) {
407+
[SDWebImageManager.sharedManager loadImageWithURL:url options:SDWebImageWaitStoreCache | SDWebImageFromCacheOnly context:@{SDWebImageContextImageTransformer : transformer, SDWebImageContextOriginalQueryCacheType : @(SDImageCacheTypeAll)} progress:nil completed:^(UIImage * _Nullable image2, NSData * _Nullable data2, NSError * _Nullable error2, SDImageCacheType cacheType2, BOOL finished2, NSURL * _Nullable imageURL2) {
404408
// Get the transformed image
405409
expect(image2).equal(transformer.testImage);
406410
expect(data).beNil(); // Currently, the thumbnailed and transformed image always data is nil, to avoid confuse user (the image and data represent no longer match)
@@ -510,7 +514,7 @@ - (void)test18ThatThumbnailLoadingCanUseFullSizeCache {
510514
NSString *thumbnailKey = SDThumbnailedKeyForKey(fullSizeKey, thumbnailSize, YES);
511515
[SDImageCache.sharedImageCache removeImageFromDiskForKey:thumbnailKey];
512516
// Load with thumbnail, should use full size cache instead to decode and scale down
513-
[SDWebImageManager.sharedManager loadImageWithURL:url options:0 context:@{SDWebImageContextImageThumbnailPixelSize : @(thumbnailSize)} progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
517+
[SDWebImageManager.sharedManager loadImageWithURL:url options:SDWebImageWaitStoreCache context:@{SDWebImageContextImageThumbnailPixelSize : @(thumbnailSize)} progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
514518
expect(image.size).equal(thumbnailSize);
515519
expect(data).beNil(); // Currently, the thumbnailed and transformed image always data is nil, to avoid confuse user (the image and data represent no longer match)
516520
expect(cacheType).equal(SDImageCacheTypeDisk);
@@ -598,7 +602,7 @@ - (void)test21ThatQueryOriginalDiskCacheFromThumbnailShouldNotWriteBackDiskCache
598602
};
599603
NSString *key = [SDWebImageManager.sharedManager cacheKeyForURL:url context:context]; // Thumbnail key
600604
[SDImageCache.sharedImageCache removeImageFromDiskForKey:key];
601-
[SDWebImageManager.sharedManager loadImageWithURL:url options:0 context:context progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
605+
[SDWebImageManager.sharedManager loadImageWithURL:url options:SDWebImageWaitStoreCache context:context progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
602606
expect(cacheType).equal(SDImageCacheTypeDisk);
603607
expect(data).beNil(); // Currently, the thumbnailed and transformed image always data is nil, to avoid confuse user (the image and data represent no longer match)
604608
expect(image.size.width).equal(100);

0 commit comments

Comments
 (0)