Skip to content

Commit 33dc17b

Browse files
committed
Delete package tests added.
Private header for package manager added to access internal array for tests. New error added: Unzipping packages cannot be deleted. Disable and enable package unit tests added. Disable and enable package will add package to management if not managed yet. Updated documentation headers.
1 parent 74400e5 commit 33dc17b

File tree

7 files changed

+178
-24
lines changed

7 files changed

+178
-24
lines changed

UnitTests/CCPackageManagerTests.m

Lines changed: 136 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#import "CCUnitTestAssertions.h"
1717
#import "CCDirector.h"
1818
#import "AppDelegate.h"
19+
#import "CCPackageCocos2dEnabler.h"
20+
#import "CCPackageManager_private.h"
1921

2022

2123
static NSString *const PACKAGE_BASE_URL = @"http://manager.test";
@@ -271,11 +273,7 @@ - (void)testDownloadOfPackageWithDifferentInstallPath
271273

272274
_packageManager.installedPackagesPath = customInstallPath;
273275

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"]];
276+
CCPackage *package = [self testPackage];
279277

280278
[_packageManager downloadPackage:package enableAfterDownload:NO];
281279

@@ -286,31 +284,117 @@ - (void)testDownloadOfPackageWithDifferentInstallPath
286284
XCTAssertEqual(package.status, CCPackageStatusInstalledDisabled);
287285
}
288286

289-
/*
290-
- (void)testLoadPackages
287+
- (void)testEnablePackage
291288
{
292-
XCTFail(@"Not implemented yet.");
289+
CCPackage *package = [self testPackage];
290+
291+
NSString *pathToPackage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Resources-shared/Packages/testpackage-iOS-phonehd_unzipped"];
292+
package.installURL = [[NSURL fileURLWithPath:pathToPackage] URLByAppendingPathComponent:@"testpackage-iOS-phonehd"];
293+
package.status = CCPackageStatusInstalledDisabled;
294+
295+
NSError *error;
296+
BOOL success = [_packageManager enablePackage:package error:&error];
297+
298+
XCTAssertTrue(success);
299+
XCTAssertNil(error);
300+
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
301+
XCTAssertEqual(package.status, CCPackageStatusInstalledEnabled);
302+
}
303+
304+
- (void)testEnableNonDisabledPackage
305+
{
306+
CCPackage *package = [self testPackageWithStatus:CCPackageStatusDownloaded];
307+
308+
NSError *error;
309+
BOOL success = [_packageManager enablePackage:package error:&error];
310+
311+
XCTAssertFalse(success);
312+
XCTAssertEqual(error.code, PACKAGE_ERROR_MANAGER_CANNOT_ENABLE_NON_DISABLED_PACKAGE);
313+
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
314+
XCTAssertEqual(package.status, CCPackageStatusDownloaded);
293315
}
294316

295317
- (void)testDisablePackage
296318
{
297-
XCTFail(@"Not implemented yet.");
319+
CCPackage *package = [self testPackageWithStatus:CCPackageStatusInstalledEnabled];
320+
321+
NSError *error;
322+
BOOL success = [_packageManager disablePackage:package error:&error];
323+
324+
XCTAssertTrue(success);
325+
XCTAssertNil(error);
326+
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
327+
XCTAssertEqual(package.status, CCPackageStatusInstalledDisabled);
298328
}
299329

300-
- (void)testEnablePackage
330+
- (void)testDisableNonEnabledPackage
301331
{
302-
XCTFail(@"Not implemented yet.");
332+
CCPackage *package = [self testPackageWithStatus:CCPackageStatusUnzipped];
333+
334+
NSError *error;
335+
BOOL success = [_packageManager disablePackage:package error:&error];
336+
337+
XCTAssertFalse(success);
338+
XCTAssertEqual(error.code, PACKAGE_ERROR_MANAGER_CANNOT_DISABLE_NON_ENABLED_PACKAGE);
339+
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
340+
XCTAssertEqual(package.status, CCPackageStatusUnzipped);
303341
}
304342

305-
- (void)testDeletePackage
343+
- (void)testDeleteInstalledPackage
306344
{
307-
XCTFail(@"Not implemented yet.");
345+
CCPackage *package = [self testPackageWithStatus:CCPackageStatusInstalledEnabled];
346+
[_packageManager.packages addObject:package];
347+
348+
NSError *error;
349+
BOOL success = [_packageManager deletePackage:package error:&error];
350+
351+
XCTAssertTrue(success);
352+
353+
BOOL isInSearchPath = NO;
354+
for (NSString *aSearchPath in [CCFileUtils sharedFileUtils].searchPath)
355+
{
356+
if ([aSearchPath isEqualToString:package.installURL.path])
357+
{
358+
isInSearchPath = YES;
359+
}
360+
}
361+
362+
XCTAssertFalse(isInSearchPath);
363+
364+
NSFileManager *fileManager = [NSFileManager defaultManager];
365+
XCTAssertFalse([fileManager fileExistsAtPath:package.installURL.path]);
366+
XCTAssertNil([_packageManager packageWithName:@"testpackage"]);
308367
}
309368

369+
- (void)testDeleteUnzippingPackage
370+
{
371+
CCPackage *package = [self testPackage];
372+
package.status = CCPackageStatusUnzipping;
373+
[_packageManager.packages addObject:package];
374+
375+
NSError *error;
376+
BOOL success = [_packageManager deletePackage:package error:&error];
377+
378+
XCTAssertFalse(success);
379+
XCTAssertEqual(error.code, PACKAGE_ERROR_MANAGER_CANNOT_DELETE_UNZIPPING_PACKAGE);
380+
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
381+
}
382+
383+
- (void)testDeleteDownloadingPackage
384+
{
385+
386+
}
387+
388+
/*
310389
- (void)testCancelDownload
311390
{
312391
XCTFail(@"Not implemented yet.");
313392
}
393+
394+
- (void)testLoadPackages
395+
{
396+
XCTFail(@"Not implemented yet.");
397+
}
314398
*/
315399

316400
- (void)testAllOtherDownloadRelatedMethods
@@ -367,7 +451,45 @@ - (NSString *)customFolderName:(CCPackage *)package packageContents:(NSArray *)p
367451

368452

369453

370-
#pragma mark - helper
454+
455+
#pragma mark - Fixtures
456+
457+
- (CCPackage *)testPackage
458+
{
459+
return [self testPackageWithStatus:CCPackageStatusInitial];
460+
}
461+
462+
- (CCPackage *)testPackageWithStatus:(CCPackageStatus)status
463+
{
464+
CCPackage *package = [[CCPackage alloc] initWithName:@"testpackage"
465+
resolution:@"phonehd"
466+
os:@"iOS"
467+
remoteURL:[[NSURL URLWithString:PACKAGE_BASE_URL]
468+
URLByAppendingPathComponent:@"testpackage-iOS-phonehd.zip"]];
469+
package.status = status;
470+
471+
if (status == CCPackageStatusInstalledDisabled
472+
|| status == CCPackageStatusInstalledEnabled)
473+
{
474+
NSString *pathToPackage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Resources-shared/Packages/testpackage-iOS-phonehd_unzipped/testpackage-iOS-phonehd"];
475+
476+
NSFileManager *fileManager = [NSFileManager defaultManager];
477+
478+
package.installURL = [NSURL fileURLWithPath:[_packageManager.installedPackagesPath stringByAppendingPathComponent:@"testpackage-iOS-phonehd"]];
479+
480+
[fileManager copyItemAtPath:pathToPackage toPath:package.installURL.path error:nil];
481+
}
482+
483+
if (status == CCPackageStatusInstalledEnabled)
484+
{
485+
CCPackageCocos2dEnabler *packageEnabler = [[CCPackageCocos2dEnabler alloc] init];
486+
[packageEnabler enablePackages:@[package]];
487+
}
488+
489+
return package;
490+
}
491+
492+
#pragma mark - Helper
371493

372494
- (void)waitForDelegateToReturn
373495
{

cocos2d-ios.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,7 @@
629629
E525F0F74C7C69C4371E20EE /* CCPackageHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E525F9EA4B5DD37D0418869E /* CCPackageHelper.m */; };
630630
E525F3A2BBCBB446B67D8260 /* CCPackage_private.h in Headers */ = {isa = PBXBuildFile; fileRef = E525FE4C98BCF1228ECC9623 /* CCPackage_private.h */; };
631631
E525FCC2CF72D3667DE4D71B /* CCPackageHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = E525FF8C7C018BF691F36044 /* CCPackageHelper.h */; };
632+
E525FF1A60724C91275720C5 /* CCPackageManager_private.h in Headers */ = {isa = PBXBuildFile; fileRef = E525F94C08B1D716E9173061 /* CCPackageManager_private.h */; };
632633
FC39962219C3BBCF00C93E5E /* libObjectAL (Android).a in Frameworks */ = {isa = PBXBuildFile; fileRef = FC39961F19C3B92F00C93E5E /* libObjectAL (Android).a */; };
633634
FC64014019C79716003E595A /* libObjectAL.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FC39961B19C3B92F00C93E5E /* libObjectAL.a */; };
634635
/* End PBXBuildFile section */
@@ -1107,6 +1108,7 @@
11071108
E0F9246F1224140400EF2362 /* CCTexturePVR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCTexturePVR.h; sourceTree = "<group>"; };
11081109
E0F924701224140400EF2362 /* CCTexturePVR.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCTexturePVR.m; sourceTree = "<group>"; };
11091110
E0F92AC31224559800EF2362 /* CCNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCNS.h; sourceTree = "<group>"; };
1111+
E525F94C08B1D716E9173061 /* CCPackageManager_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCPackageManager_private.h; sourceTree = "<group>"; };
11101112
E525F9EA4B5DD37D0418869E /* CCPackageHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCPackageHelper.m; sourceTree = "<group>"; };
11111113
E525FE4C98BCF1228ECC9623 /* CCPackage_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCPackage_private.h; sourceTree = "<group>"; };
11121114
E525FF8C7C018BF691F36044 /* CCPackageHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCPackageHelper.h; sourceTree = "<group>"; };
@@ -1569,6 +1571,7 @@
15691571
E525FF8C7C018BF691F36044 /* CCPackageHelper.h */,
15701572
E525F9EA4B5DD37D0418869E /* CCPackageHelper.m */,
15711573
E525FE4C98BCF1228ECC9623 /* CCPackage_private.h */,
1574+
E525F94C08B1D716E9173061 /* CCPackageManager_private.h */,
15721575
);
15731576
name = Packages;
15741577
sourceTree = "<group>";
@@ -2081,6 +2084,7 @@
20812084
B7D2730F1822F4AA0054849B /* CCBKeyframe.h in Headers */,
20822085
E525FCC2CF72D3667DE4D71B /* CCPackageHelper.h in Headers */,
20832086
E525F3A2BBCBB446B67D8260 /* CCPackage_private.h in Headers */,
2087+
E525FF1A60724C91275720C5 /* CCPackageManager_private.h in Headers */,
20842088
);
20852089
runOnlyForDeploymentPostprocessing = 0;
20862090
};

cocos2d/CCPackageConstants.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ extern NSUInteger const PACKAGE_ERROR_MANAGER_CANNOT_DISABLE_NON_ENABLED_PACKAGE
1515

1616
extern NSUInteger const PACKAGE_ERROR_MANAGER_NO_BASE_URL_SET;
1717

18+
extern NSUInteger const PACKAGE_ERROR_MANAGER_CANNOT_DELETE_UNZIPPING_PACKAGE;
19+
1820

1921

2022
// Misc

cocos2d/CCPackageConstants.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
NSUInteger const PACKAGE_ERROR_MANAGER_NO_BASE_URL_SET = 10022;
1919

20+
NSUInteger const PACKAGE_ERROR_MANAGER_CANNOT_DELETE_UNZIPPING_PACKAGE = 10023;
21+
2022
// Misc
2123
NSString *const PACKAGE_REL_DOWNLOAD_FOLDER = @"com.cocos2d/Packages/Downloads";
2224

cocos2d/CCPackageManager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
/**
139139
* Disables a package. Only packages with state CCPackageStatusInstalledEnabled can be disabled.
140140
* The package is removed from cocos2d's search, sprite sheets and filename lookups are reloaded.
141+
* Package will be added to managed packages if it was not.
141142
*
142143
* @param package The package to be disabled
143144
* @param error Error pointer with details about a failed operation
@@ -148,6 +149,7 @@
148149

149150
/**
150151
* Enables a package. Only packages with state CCPackageStatusInstalledDisabled can be enabled.
152+
* Package will be added to managed packages if it was not.
151153
*
152154
* The package is added to cocos2d's search, sprite sheets getting loaded as well as filename lookups
153155
*
@@ -168,6 +170,7 @@
168170
/**
169171
* Deletes a package.
170172
* Will disable the package first and delete it from disk. Temp download and unzip files will be removed as well.
173+
* A package that is being unzipped cannot be deleted. Try after the unzipping finished.
171174
*
172175
* @param package The package to be deleted
173176
* @param error Error pointer with details about a failed operation

cocos2d/CCPackageManager.m

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,9 @@ - (CCPackage *)downloadPackageWithName:(NSString *)name resolution:(NSString *)r
232232

233233
if (!_baseURL)
234234
{
235-
[_delegate packageDownloadFailed:nil error:[NSError errorWithDomain:@"cocos2d" code:PACKAGE_ERROR_MANAGER_NO_BASE_URL_SET userInfo:nil]];
235+
[_delegate packageDownloadFailed:nil error:[NSError errorWithDomain:@"cocos2d"
236+
code:PACKAGE_ERROR_MANAGER_NO_BASE_URL_SET
237+
userInfo:@{NSLocalizedDescriptionKey: @"No baseURL set for package manager."}]];
236238
return nil;
237239
}
238240

@@ -570,6 +572,11 @@ - (BOOL)searchForStandardFolderNameFiles:(NSArray *)files package:(CCPackage *)p
570572

571573
- (BOOL)disablePackage:(CCPackage *)package error:(NSError **)error
572574
{
575+
if (![_packages containsObject:package])
576+
{
577+
[_packages addObject:package];
578+
}
579+
573580
if (package.status == CCPackageStatusInstalledDisabled)
574581
{
575582
return YES;
@@ -589,15 +596,16 @@ - (BOOL)disablePackage:(CCPackage *)package error:(NSError **)error
589596
CCPackageCocos2dEnabler *packageCocos2dEnabler = [[CCPackageCocos2dEnabler alloc] init];
590597
[packageCocos2dEnabler disablePackages:@[package]];
591598

592-
if (![_packages containsObject:package])
593-
{
594-
[_packages addObject:package];
595-
}
596599
return YES;
597600
}
598601

599602
- (BOOL)enablePackage:(CCPackage *)package error:(NSError **)error
600603
{
604+
if (![_packages containsObject:package])
605+
{
606+
[_packages addObject:package];
607+
}
608+
601609
if (package.status == CCPackageStatusInstalledEnabled)
602610
{
603611
return YES;
@@ -617,10 +625,6 @@ - (BOOL)enablePackage:(CCPackage *)package error:(NSError **)error
617625
CCPackageCocos2dEnabler *packageCocos2dEnabler = [[CCPackageCocos2dEnabler alloc] init];
618626
[packageCocos2dEnabler enablePackages:@[package]];
619627

620-
if (![_packages containsObject:package])
621-
{
622-
[_packages addObject:package];
623-
}
624628
return YES;
625629
}
626630

@@ -640,11 +644,21 @@ - (void)addPackage:(CCPackage *)package;
640644

641645
- (BOOL)deletePackage:(CCPackage *)package error:(NSError **)error
642646
{
647+
if (package.status == CCPackageStatusUnzipping)
648+
{
649+
if (error)
650+
{
651+
*error = [NSError errorWithDomain:@"cocos2d"
652+
code:PACKAGE_ERROR_MANAGER_CANNOT_DELETE_UNZIPPING_PACKAGE
653+
userInfo:@{NSLocalizedDescriptionKey:@"Cannot delete a package being unzipped. Please try after unzipping finished"}];
654+
}
655+
return NO;
656+
}
657+
643658
CCPackageCocos2dEnabler *packageCocos2dEnabler = [[CCPackageCocos2dEnabler alloc] init];
644659
[packageCocos2dEnabler disablePackages:@[package]];
645660

646661
[_packages removeObject:package];
647-
[self savePackages];
648662

649663
[_downloadManager cancelDownloadOfPackage:package];
650664

cocos2d/CCPackageManager_private.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#import "CCPackageManager.h"
2+
3+
@interface CCPackageManager()
4+
5+
@property (nonatomic, strong, readwrite) NSMutableArray *packages;
6+
7+
@end

0 commit comments

Comments
 (0)