Skip to content

Commit 74400e5

Browse files
committed
Unit tests added for more downloading and setting the installPath.
Bugfix: setting install path would not change in certain situations. Simplified download package method of CCPackageManager, doesn't return success anymore. Adjusted documentation header. CCPackageCocos2dEnabler using CCPackage private header.
1 parent b7b73d9 commit 74400e5

File tree

4 files changed

+90
-42
lines changed

4 files changed

+90
-42
lines changed

UnitTests/CCPackageManagerTests.m

Lines changed: 81 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
#import "CCPackage_private.h"
1414
#import "CCPackageConstants.h"
1515
#import "CCPackageManagerDelegate.h"
16+
#import "CCUnitTestAssertions.h"
17+
#import "CCDirector.h"
18+
#import "AppDelegate.h"
19+
1620

1721
static NSString *const PACKAGE_BASE_URL = @"http://manager.test";
1822

@@ -73,6 +77,7 @@ @interface CCPackageManagerTests : XCTestCase <CCPackageManagerDelegate>
7377
@property (nonatomic) BOOL managerReturnedFailed;
7478
@property (nonatomic, copy) NSString *customFolderName;
7579
@property (nonatomic, strong) NSError *managerReturnedWithError;
80+
@property (nonatomic, strong) NSMutableSet *cleanPathsArrayOnTearDown;
7681

7782
@end
7883

@@ -82,9 +87,27 @@ @implementation CCPackageManagerTests
8287
- (void)setUp
8388
{
8489
[super setUp];
90+
91+
[(AppController *)[UIApplication sharedApplication].delegate configureCocos2d];
92+
[[CCDirector sharedDirector] stopAnimation];
93+
8594
self.packageManager = [[CCPackageManager alloc] init];
95+
_packageManager.delegate = self;
96+
8697
self.managerReturnedSuccessfully = NO;
8798
self.managerReturnedFailed = NO;
99+
self.managerReturnedWithError = nil;
100+
self.customFolderName = nil;
101+
102+
// A set of paths to be removed on tear down
103+
self.cleanPathsArrayOnTearDown = [NSMutableSet set];
104+
[_cleanPathsArrayOnTearDown addObject:[NSTemporaryDirectory() stringByAppendingPathComponent:PACKAGE_REL_UNZIP_FOLDER]];
105+
[_cleanPathsArrayOnTearDown addObject:[NSTemporaryDirectory() stringByAppendingPathComponent:PACKAGE_REL_DOWNLOAD_FOLDER]];
106+
[_cleanPathsArrayOnTearDown addObject:_packageManager.installedPackagesPath];
107+
108+
// Important for the standard identifier of packages which most often determined internally instead
109+
// of provided by the user. In this case resolution will default to phonehd.
110+
[CCFileUtils sharedFileUtils].searchResolutionsOrder = [@[CCFileUtilsSuffixiPhoneHD] mutableCopy];
88111

89112
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:PACKAGE_STORAGE_USERDEFAULTS_KEY];
90113

@@ -95,11 +118,11 @@ - (void)tearDown
95118
{
96119
[NSURLProtocol unregisterClass:[CCPackageManagerTestURLProtocol class]];
97120

98-
// Delete all relevant folders: Download, unzip, install
99121
NSFileManager *fileManager = [NSFileManager defaultManager];
100-
[fileManager removeItemAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:PACKAGE_REL_UNZIP_FOLDER] error:nil];
101-
[fileManager removeItemAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:PACKAGE_REL_DOWNLOAD_FOLDER] error:nil];
102-
[fileManager removeItemAtPath:_packageManager.installedPackagesPath error:nil];
122+
for (NSString *path in _cleanPathsArrayOnTearDown)
123+
{
124+
[fileManager removeItemAtPath:path error:nil];
125+
}
103126

104127
[super tearDown];
105128
}
@@ -151,23 +174,20 @@ - (void)testSavePackages
151174
// Note: Persistency of CCPackage is tested in CCPackageTests
152175
}
153176

154-
- (void)testLoadPackages
177+
- (void)testDownloadWithNameAndBaseURLAndUnzipOnCustomQueue
155178
{
156-
XCTFail(@"Not implemented yet.");
157-
}
158-
159-
- (void)testDownloadWithNameAndBaseURL
160-
{
161-
[CCFileUtils sharedFileUtils].searchResolutionsOrder = [@[CCFileUtilsSuffixiPhoneHD] mutableCopy];
162-
163179
_packageManager.baseURL = [NSURL URLWithString:PACKAGE_BASE_URL];
164-
_packageManager.delegate = self;
180+
165181
CCPackage *package = [_packageManager downloadPackageWithName:@"testpackage" enableAfterDownload:YES];
166182

183+
dispatch_queue_t queue = dispatch_queue_create("testqueue", DISPATCH_QUEUE_CONCURRENT);
184+
_packageManager.unzippingQueue = queue;
185+
167186
[self waitForDelegateToReturn];
168187

169188
XCTAssertNotNil(package);
170189
XCTAssertTrue(_managerReturnedSuccessfully);
190+
XCTAssertEqual(package.status, CCPackageStatusInstalledEnabled);
171191
}
172192

173193
- (void)testDownloadWithCustomFolderNameInPackage
@@ -179,7 +199,6 @@ - (void)testDownloadWithCustomFolderNameInPackage
179199
[CCFileUtils sharedFileUtils].searchResolutionsOrder = [@[CCFileUtilsSuffixiPhoneHD] mutableCopy];
180200

181201
_packageManager.baseURL = [NSURL URLWithString:PACKAGE_BASE_URL];
182-
_packageManager.delegate = self;
183202

184203
self.customFolderName = @"testpackage-iOS-phonehd";
185204

@@ -196,7 +215,6 @@ - (void)testCannotDetermineFolderNameWhenUnzipping
196215
// Like in testDownloadWithCustomFolderNameInPackage but this time we expect an error and a failing delegate method
197216

198217
_packageManager.baseURL = [NSURL URLWithString:PACKAGE_BASE_URL];
199-
_packageManager.delegate = self;
200218

201219
CCPackage *package = [_packageManager downloadPackageWithName:@"Foo" enableAfterDownload:YES];
202220

@@ -209,7 +227,6 @@ - (void)testCannotDetermineFolderNameWhenUnzipping
209227

210228
- (void)testDownloadWithoutBaseURLShouldFail
211229
{
212-
_packageManager.delegate = self;
213230
CCPackage *package = [_packageManager downloadPackageWithName:@"testpackage" enableAfterDownload:YES];
214231

215232
[self waitForDelegateToReturn];
@@ -219,17 +236,59 @@ - (void)testDownloadWithoutBaseURLShouldFail
219236
XCTAssertEqual(_managerReturnedWithError.code, PACKAGE_ERROR_MANAGER_NO_BASE_URL_SET);
220237
}
221238

222-
- (void)testDownloadWithNameAndWithoutBaseURLUnzipOnACustomQueue
239+
- (void)testSetInstallPath
223240
{
224-
// Use a custom queue for unzipping
225-
XCTFail(@"Not implemented yet.");
241+
// Test: set a non existing path
242+
NSFileManager *fileManager = [NSFileManager defaultManager];
243+
244+
NSString *customInstallPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"FooBar"];
245+
[_cleanPathsArrayOnTearDown addObject:customInstallPath];
246+
247+
_packageManager.installedPackagesPath = customInstallPath;
248+
249+
XCTAssertTrue([fileManager fileExistsAtPath:customInstallPath]);
250+
CCAssertEqualStrings(customInstallPath, _packageManager.installedPackagesPath);
251+
252+
253+
// Test2: set an existing path
254+
NSString *customInstallPath2 = [NSTemporaryDirectory() stringByAppendingPathComponent:@"FooBar2"];
255+
[_cleanPathsArrayOnTearDown addObject:customInstallPath2];
256+
257+
[fileManager createDirectoryAtPath:customInstallPath2 withIntermediateDirectories:YES attributes:nil error:nil];
258+
259+
_packageManager.installedPackagesPath = customInstallPath2;
260+
XCTAssertTrue([fileManager fileExistsAtPath:customInstallPath]);
261+
CCAssertEqualStrings(customInstallPath2, _packageManager.installedPackagesPath);
226262
}
227263

228264
- (void)testDownloadOfPackageWithDifferentInstallPath
229265
{
230-
// add CCPackage and download:package
231-
// use different installPath
266+
NSString *customInstallPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"PackagesInstall"];
267+
268+
NSFileManager *fileManager = [NSFileManager defaultManager];
269+
[fileManager removeItemAtPath:customInstallPath error:nil];
270+
[_cleanPathsArrayOnTearDown addObject:customInstallPath];
232271

272+
_packageManager.installedPackagesPath = customInstallPath;
273+
274+
CCPackage *package = [[CCPackage alloc] initWithName:@"testpackage"
275+
resolution:@"phonehd"
276+
os:@"iOS"
277+
remoteURL:[[NSURL URLWithString:PACKAGE_BASE_URL]
278+
URLByAppendingPathComponent:@"testpackage-iOS-phonehd.zip"]];
279+
280+
[_packageManager downloadPackage:package enableAfterDownload:NO];
281+
282+
[self waitForDelegateToReturn];
283+
284+
XCTAssertNotNil(package);
285+
XCTAssertTrue(_managerReturnedSuccessfully);
286+
XCTAssertEqual(package.status, CCPackageStatusInstalledDisabled);
287+
}
288+
289+
/*
290+
- (void)testLoadPackages
291+
{
233292
XCTFail(@"Not implemented yet.");
234293
}
235294
@@ -252,6 +311,7 @@ - (void)testCancelDownload
252311
{
253312
XCTFail(@"Not implemented yet.");
254313
}
314+
*/
255315

256316
- (void)testAllOtherDownloadRelatedMethods
257317
{

cocos2d/CCPackageCocos2dEnabler.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#import "CCPackage.h"
44
#import "CCFileUtils.h"
55
#import "CCSpriteFrameCache.h"
6+
#import "CCPackage_private.h"
67

78

89
@implementation CCPackageCocos2dEnabler
@@ -46,7 +47,7 @@ - (BOOL)addPackagestoSearchPath:(NSArray *)packages
4647

4748
if (![newSearchPath containsObject:newPackagePath])
4849
{
49-
[aPackage setValue:@(CCPackageStatusInstalledEnabled) forKey:NSStringFromSelector(@selector(status))];
50+
aPackage.status = CCPackageStatusInstalledEnabled;
5051

5152
[newSearchPath insertObject:newPackagePath atIndex:0];
5253
[CCFileUtils sharedFileUtils].searchPath = newSearchPath;

cocos2d/CCPackageManager.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,14 @@
126126
enableAfterDownload:(BOOL)enableAfterDownload;
127127

128128
/**
129-
* Downloads a package. This is supposed to work in conjunction with addPackage where a package is created without the package manager
130-
* and should become managed.
129+
* Downloads a package. If the package was not managed before it will be added to the managed packages.
131130
* A download will only start if the status is CCPackageStatusInitial, CCPackageStatusDownloadFailed.
132131
* A package with status CCPackageStatusDownloadPaused will be resumed if possible.
133132
*
134133
* @param name The package to be manager by the package manager
135134
* @param enableAfterDownload If the package should be enabled in cocos2d after download. You can enable it with the enablePackage: method later on.
136135
*/
137-
- (BOOL)downloadPackage:(CCPackage *)package enableAfterDownload:(BOOL)enableAfterDownload;
136+
- (void)downloadPackage:(CCPackage *)package enableAfterDownload:(BOOL)enableAfterDownload;
138137

139138
/**
140139
* Disables a package. Only packages with state CCPackageStatusInstalledEnabled can be disabled.

cocos2d/CCPackageManager.m

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ - (void)setInstalledPackagesPath:(NSString *)installedPackagesPath
176176
}
177177

178178
NSFileManager *fileManager = [NSFileManager defaultManager];
179-
if (![fileManager fileExistsAtPath:_installedPackagesPath])
179+
if (![fileManager fileExistsAtPath:installedPackagesPath])
180180
{
181181
NSError *error;
182182
if (![fileManager createDirectoryAtPath:installedPackagesPath
@@ -239,35 +239,23 @@ - (CCPackage *)downloadPackageWithName:(NSString *)name resolution:(NSString *)r
239239
return [self downloadPackageWithName:name resolution:resolution remoteURL:remoteURL enableAfterDownload:enableAfterDownload];
240240
}
241241

242-
- (BOOL)downloadPackage:(CCPackage *)package enableAfterDownload:(BOOL)enableAfterDownload
242+
- (void)downloadPackage:(CCPackage *)package enableAfterDownload:(BOOL)enableAfterDownload
243243
{
244-
if (![_packages containsObject:package])
245-
{
246-
return NO;
247-
}
248-
249244
NSAssert(package, @"package must not be nil");
250245
NSAssert(package.name, @"package.name must not be nil");
251246
NSAssert(package.resolution, @"package.resolution must not be nil");
247+
NSAssert(package.remoteURL, @"package.remoteURL must not be nil");
252248

253-
if (!package.remoteURL && !_baseURL)
254-
{
255-
return NO;
256-
}
257-
else if (!package.remoteURL)
249+
if (![_packages containsObject:package])
258250
{
259-
NSString *packageName = [NSString stringWithFormat:@"%@-%@-%@.zip", package.name, package.os, package.resolution];
260-
NSURL *remoteURL = [_baseURL URLByAppendingPathComponent:packageName];
261-
[package setValue:remoteURL forKey:@"remoteURL"];
251+
[self addPackage:package];
262252
}
263253

264254
package.enableOnDownload = enableAfterDownload;
265255

266256
CCLOGINFO(@"[PACKAGE][INFO]: adding package to download queue: %@", package);
267257

268258
[_downloadManager enqueuePackageForDownload:package];
269-
270-
return YES;
271259
}
272260

273261
- (CCPackage *)downloadPackageWithName:(NSString *)name remoteURL:(NSURL *)remoteURL enableAfterDownload:(BOOL)enableAfterDownload

0 commit comments

Comments
 (0)