@@ -55,6 +55,7 @@ - (void)stopLoading
5555
5656@end
5757
58+
5859@interface CCPackageDownloadManagerTests : XCTestCase <CCPackageDownloadManagerDelegate>
5960
6061@property (nonatomic , strong ) CCPackageDownloadManager *downloadManager;
@@ -99,6 +100,8 @@ - (void)deleteOldDownloads
99100 [fileManager removeItemAtPath: _downloadPath error: nil ];
100101}
101102
103+ #pragma mark - Tests
104+
102105- (void )testSetDownloadPath
103106{
104107 NSString *newPath = [NSTemporaryDirectory () stringByAppendingPathComponent: @" NewDownloads" ];
@@ -114,35 +117,21 @@ - (void)testSetDownloadPath
114117
115118- (void )testTwoDownloads
116119{
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" ]];
124121
125- [_downloadManager enqueuePackageForDownload: package1];
126- [_downloadManager enqueuePackageForDownload: package2];
127-
128- while (!_allDownloadsReturned)
122+ for (CCPackage *aPackage in packages)
129123 {
130- [[ NSRunLoop currentRunLoop ] runMode: NSDefaultRunLoopMode beforeDate: [ NSDate distantFuture ] ];
124+ [_downloadManager enqueuePackageForDownload: aPackage ];
131125 }
132126
133- NSFileManager *fileManager = [NSFileManager defaultManager ];
134- XCTAssertTrue ([fileManager fileExistsAtPath: [package1 installData ].localDownloadURL.path]);
135- XCTAssertTrue ([fileManager fileExistsAtPath: [package2 installData ].localDownloadURL.path]);
127+ [self waitUntilDelegateReturns ];
136128
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];
139130}
140131
141132- (void )testCancelDownload
142133{
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" ];
146135
147136 [_downloadManager enqueuePackageForDownload: package1];
148137 [_downloadManager cancelDownloadOfPackage: package1];
@@ -155,8 +144,72 @@ - (void)testCancelDownload
155144 XCTAssertFalse ([fileManager fileExistsAtPath: [package1 installData ].localDownloadURL.path]);
156145}
157146
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+ }
158211
159- #pragma mark -
212+ #pragma mark - CCPackageDownloadManagerDelegate
160213
161214- (void )downloadFinishedOfPackage : (CCPackage *)package
162215{
0 commit comments