forked from TextureGroup/Texture
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathASNetworkImageNodeTests.m
116 lines (94 loc) · 3.96 KB
/
ASNetworkImageNodeTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//
// ASNetworkImageNodeTests.m
// Texture
//
// Created by Adlai Holler on 10/14/16.
// Copyright © 2016 Facebook. All rights reserved.
//
#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
#import <AsyncDisplayKit/AsyncDisplayKit.h>
#import <AsyncDisplayKit/ASDisplayNode+FrameworkPrivate.h>
@interface ASNetworkImageNodeTests : XCTestCase
@end
@interface ASTestImageDownloader : NSObject <ASImageDownloaderProtocol>
@end
@interface ASTestImageCache : NSObject <ASImageCacheProtocol>
@end
@implementation ASNetworkImageNodeTests {
ASNetworkImageNode *node;
id downloader;
id cache;
}
- (void)setUp
{
[super setUp];
cache = [OCMockObject partialMockForObject:[[ASTestImageCache alloc] init]];
downloader = [OCMockObject partialMockForObject:[[ASTestImageDownloader alloc] init]];
node = [[ASNetworkImageNode alloc] initWithCache:cache downloader:downloader];
}
/// Test is flaky: https://github.com/facebook/AsyncDisplayKit/issues/2898
- (void)DISABLED_testThatProgressBlockIsSetAndClearedCorrectlyOnVisibility
{
node.URL = [NSURL URLWithString:@"http://imageA"];
// Enter preload range, wait for download start.
[[[downloader expect] andForwardToRealObject] downloadImageWithURL:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY downloadProgress:OCMOCK_ANY completion:OCMOCK_ANY];
[node enterInterfaceState:ASInterfaceStatePreload];
[downloader verifyWithDelay:5];
// Make the node visible.
[[downloader expect] setProgressImageBlock:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0];
[node enterInterfaceState:ASInterfaceStateInHierarchy];
[downloader verify];
// Make the node invisible.
[[downloader expect] setProgressImageBlock:[OCMArg isNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0];
[node exitInterfaceState:ASInterfaceStateInHierarchy];
[downloader verify];
}
- (void)testThatProgressBlockIsSetAndClearedCorrectlyOnChangeURL
{
[node enterInterfaceState:ASInterfaceStateInHierarchy];
// Set URL while visible, should set progress block
[[downloader expect] setProgressImageBlock:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0];
node.URL = [NSURL URLWithString:@"http://imageA"];
[downloader verifyWithDelay:5];
// Change URL while visible, should clear prior block and set new one
[[downloader expect] setProgressImageBlock:[OCMArg isNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0];
[[downloader expect] cancelImageDownloadForIdentifier:@0];
[[downloader expect] setProgressImageBlock:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@1];
node.URL = [NSURL URLWithString:@"http://imageB"];
[downloader verifyWithDelay:5];
}
- (void)testThatSettingAnImageWillStayForEnteringAndExitingPreloadState
{
UIImage *image = [[UIImage alloc] init];
ASNetworkImageNode *networkImageNode = [[ASNetworkImageNode alloc] init];
networkImageNode.image = image;
[networkImageNode enterInterfaceState:ASInterfaceStatePreload];
XCTAssertEqualObjects(image, networkImageNode.image);
[networkImageNode exitInterfaceState:ASInterfaceStatePreload];
XCTAssertEqualObjects(image, networkImageNode.image);
}
@end
@implementation ASTestImageCache
- (void)cachedImageWithURL:(NSURL *)URL callbackQueue:(dispatch_queue_t)callbackQueue completion:(ASImageCacherCompletion)completion
{
ASDisplayNodeAssert(callbackQueue == dispatch_get_main_queue(), @"ASTestImageCache expects main queue for callback.");
completion(nil);
}
@end
@implementation ASTestImageDownloader {
NSInteger _currentDownloadID;
}
- (void)cancelImageDownloadForIdentifier:(id)downloadIdentifier
{
// nop
}
- (id)downloadImageWithURL:(NSURL *)URL callbackQueue:(dispatch_queue_t)callbackQueue downloadProgress:(ASImageDownloaderProgress)downloadProgress completion:(ASImageDownloaderCompletion)completion
{
return @(_currentDownloadID++);
}
- (void)setProgressImageBlock:(ASImageDownloaderProgressImage)progressBlock callbackQueue:(dispatch_queue_t)callbackQueue withDownloadIdentifier:(id)downloadIdentifier
{
// nop
}
@end