@@ -55,6 +55,7 @@ - (void)stopLoading
55
55
56
56
@end
57
57
58
+
58
59
@interface CCPackageDownloadManagerTests : XCTestCase <CCPackageDownloadManagerDelegate>
59
60
60
61
@property (nonatomic , strong ) CCPackageDownloadManager *downloadManager;
@@ -99,6 +100,8 @@ - (void)deleteOldDownloads
99
100
[fileManager removeItemAtPath: _downloadPath error: nil ];
100
101
}
101
102
103
+ #pragma mark - Tests
104
+
102
105
- (void )testSetDownloadPath
103
106
{
104
107
NSString *newPath = [NSTemporaryDirectory () stringByAppendingPathComponent: @" NewDownloads" ];
@@ -114,35 +117,21 @@ - (void)testSetDownloadPath
114
117
115
118
- (void )testTwoDownloads
116
119
{
117
- CCPackage *package1 = [[CCPackage alloc ] initWithName: @" package1" resolution: @" phonehd" os: @" iOS" remoteURL: [NSURL URLWithString: @" http://package.fake/package1" ]];
118
- CCPackageInstallData *installData1 = [[CCPackageInstallData alloc ] init ];
119
- [package1 setInstallData: installData1];
120
-
121
- CCPackage *package2 = [[CCPackage alloc ] initWithName: @" package2" resolution: @" phonehd" os: @" iOS" remoteURL: [NSURL URLWithString: @" http://package.fake/package2" ]];
122
- CCPackageInstallData *installData2 = [[CCPackageInstallData alloc ] init ];
123
- [package2 setInstallData: installData2];
120
+ NSArray *packages = @[[self completePackageWithName: @" package1" ], [self completePackageWithName: @" package2" ]];
124
121
125
- [_downloadManager enqueuePackageForDownload: package1];
126
- [_downloadManager enqueuePackageForDownload: package2];
127
-
128
- while (!_allDownloadsReturned)
122
+ for (CCPackage *aPackage in packages)
129
123
{
130
- [[ NSRunLoop currentRunLoop ] runMode: NSDefaultRunLoopMode beforeDate: [ NSDate distantFuture ] ];
124
+ [_downloadManager enqueuePackageForDownload: aPackage ];
131
125
}
132
126
133
- NSFileManager *fileManager = [NSFileManager defaultManager ];
134
- XCTAssertTrue ([fileManager fileExistsAtPath: [package1 installData ].localDownloadURL.path]);
135
- XCTAssertTrue ([fileManager fileExistsAtPath: [package2 installData ].localDownloadURL.path]);
127
+ [self waitUntilDelegateReturns ];
136
128
137
- CCAssertEqualStrings (@" package1" , [NSString stringWithContentsOfFile: [package1 installData ].localDownloadURL.path encoding: NSUTF8StringEncoding error: nil ]);
138
- CCAssertEqualStrings (@" package2" , [NSString stringWithContentsOfFile: [package2 installData ].localDownloadURL.path encoding: NSUTF8StringEncoding error: nil ]);
129
+ [self assertPackagesDownloadedAndContentsAreAsExpected: packages];
139
130
}
140
131
141
132
- (void )testCancelDownload
142
133
{
143
- CCPackage *package1 = [[CCPackage alloc ] initWithName: @" package1" resolution: @" phonehd" os: @" iOS" remoteURL: [NSURL URLWithString: @" http://package.fake/package1" ]];
144
- CCPackageInstallData *installData1 = [[CCPackageInstallData alloc ] init ];
145
- [package1 setInstallData: installData1];
134
+ CCPackage *package1 = [self completePackageWithName: @" package1" ];
146
135
147
136
[_downloadManager enqueuePackageForDownload: package1];
148
137
[_downloadManager cancelDownloadOfPackage: package1];
@@ -155,8 +144,72 @@ - (void)testCancelDownload
155
144
XCTAssertFalse ([fileManager fileExistsAtPath: [package1 installData ].localDownloadURL.path]);
156
145
}
157
146
147
+ - (void )testPauseAndResumeAllDownloads
148
+ {
149
+ NSArray *packages = @[[self completePackageWithName: @" package1" ],
150
+ [self completePackageWithName: @" package2" ],
151
+ [self completePackageWithName: @" package3" ]];
152
+
153
+ for (CCPackage *aPackage in packages)
154
+ {
155
+ [_downloadManager enqueuePackageForDownload: aPackage];
156
+ }
157
+
158
+ [_downloadManager pauseAllDownloads ];
159
+ [_downloadManager resumeAllDownloads ];
160
+
161
+ [self waitUntilDelegateReturns ];
162
+
163
+ [self assertPackagesDownloadedAndContentsAreAsExpected: packages];
164
+ }
165
+
166
+ - (void )testEnqueuePausedPackage
167
+ {
168
+ CCPackage *package1 = [self completePackageWithName: @" package1" ];
169
+
170
+ [_downloadManager enqueuePackageForDownload: package1];
171
+ [_downloadManager pauseDownloadOfPackage: package1];
172
+ [_downloadManager enqueuePackageForDownload: package1];
173
+
174
+ [self waitUntilDelegateReturns ];
175
+
176
+ [self assertPackagesDownloadedAndContentsAreAsExpected: @[package1]];
177
+ }
178
+
179
+ - (void )waitUntilDelegateReturns
180
+ {
181
+ while (!_allDownloadsReturned)
182
+ {
183
+ [[NSRunLoop currentRunLoop ] runMode: NSDefaultRunLoopMode beforeDate: [NSDate distantFuture ]];
184
+ }
185
+ }
186
+
187
+
188
+ #pragma mark - Helpers
189
+
190
+ - (void )assertPackagesDownloadedAndContentsAreAsExpected : (NSArray *)packages
191
+ {
192
+ NSFileManager *fileManager = [NSFileManager defaultManager ];
193
+ for (CCPackage *aPackage in packages)
194
+ {
195
+ XCTAssertTrue ([fileManager fileExistsAtPath: [aPackage installData ].localDownloadURL.path]);
196
+ CCAssertEqualStrings (aPackage.name , [NSString stringWithContentsOfFile: [aPackage installData ].localDownloadURL.path encoding: NSUTF8StringEncoding error: nil ]);
197
+ }
198
+ }
199
+
200
+
201
+ #pragma mark - Fixtures
202
+
203
+ - (CCPackage *)completePackageWithName : (NSString *)name
204
+ {
205
+ CCPackage *package = [[CCPackage alloc ] initWithName: name resolution: @" phonehd" os: @" iOS" remoteURL: [NSURL URLWithString: [NSString stringWithFormat: @" http://package.fake/%@ " , name]]];
206
+ CCPackageInstallData *installData = [[CCPackageInstallData alloc ] init ];
207
+ [package setInstallData: installData];
208
+
209
+ return package;
210
+ }
158
211
159
- #pragma mark -
212
+ #pragma mark - CCPackageDownloadManagerDelegate
160
213
161
214
- (void )downloadFinishedOfPackage : (CCPackage *)package
162
215
{
0 commit comments