Skip to content

Commit fdef185

Browse files
committed
CCPackageManager delete package tests finished.
Fixture class added to create setups with ease for packages tests. Bugfix for delete package, not completely tidying up the disk. New status for packages added: CCPackageStatusDeleted, which will be set after a successful deletion.
1 parent ff214a2 commit fdef185

File tree

8 files changed

+222
-53
lines changed

8 files changed

+222
-53
lines changed

UnitTests/CCPackageHelperTests.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ @interface CCPackageHelperTests : XCTestCase
2020

2121
@implementation CCPackageHelperTests
2222

23-
2423
- (void)testDefaultResolution
2524
{
2625
// Standard test

UnitTests/CCPackageManagerTests.m

Lines changed: 89 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#import "AppDelegate.h"
1919
#import "CCPackageCocos2dEnabler.h"
2020
#import "CCPackageManager_private.h"
21+
#import "CCPackagesTestFixtures.h"
2122

2223

2324
static NSString *const PACKAGE_BASE_URL = @"http://manager.test";
@@ -273,7 +274,7 @@ - (void)testDownloadOfPackageWithDifferentInstallPath
273274

274275
_packageManager.installedPackagesPath = customInstallPath;
275276

276-
CCPackage *package = [self testPackage];
277+
CCPackage *package = [CCPackagesTestFixtures testPackageWithInstallFolderPath:_packageManager.installedPackagesPath];
277278

278279
[_packageManager downloadPackage:package enableAfterDownload:NO];
279280

@@ -286,7 +287,7 @@ - (void)testDownloadOfPackageWithDifferentInstallPath
286287

287288
- (void)testEnablePackage
288289
{
289-
CCPackage *package = [self testPackage];
290+
CCPackage *package = [CCPackagesTestFixtures testPackageWithInstallFolderPath:_packageManager.installedPackagesPath];
290291

291292
NSString *pathToPackage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Resources-shared/Packages/testpackage-iOS-phonehd_unzipped"];
292293
package.installURL = [[NSURL fileURLWithPath:pathToPackage] URLByAppendingPathComponent:@"testpackage-iOS-phonehd"];
@@ -303,20 +304,20 @@ - (void)testEnablePackage
303304

304305
- (void)testEnableNonDisabledPackage
305306
{
306-
CCPackage *package = [self testPackageWithStatus:CCPackageStatusDownloaded];
307+
CCPackage *package = [CCPackagesTestFixtures testPackageWithStatus:CCPackageStatusInitial installFolderPath:_packageManager.installedPackagesPath];
307308

308309
NSError *error;
309310
BOOL success = [_packageManager enablePackage:package error:&error];
310311

311312
XCTAssertFalse(success);
312313
XCTAssertEqual(error.code, PACKAGE_ERROR_MANAGER_CANNOT_ENABLE_NON_DISABLED_PACKAGE);
313314
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
314-
XCTAssertEqual(package.status, CCPackageStatusDownloaded);
315+
XCTAssertEqual(package.status, CCPackageStatusInitial);
315316
}
316317

317318
- (void)testDisablePackage
318319
{
319-
CCPackage *package = [self testPackageWithStatus:CCPackageStatusInstalledEnabled];
320+
CCPackage *package = [CCPackagesTestFixtures testPackageWithStatus:CCPackageStatusInstalledEnabled installFolderPath:_packageManager.installedPackagesPath];
320321

321322
NSError *error;
322323
BOOL success = [_packageManager disablePackage:package error:&error];
@@ -329,22 +330,24 @@ - (void)testDisablePackage
329330

330331
- (void)testDisableNonEnabledPackage
331332
{
332-
CCPackage *package = [self testPackageWithStatus:CCPackageStatusUnzipped];
333+
CCPackage *package = [CCPackagesTestFixtures testPackageWithStatus:CCPackageStatusInitial installFolderPath:_packageManager.installedPackagesPath];
333334

334335
NSError *error;
335336
BOOL success = [_packageManager disablePackage:package error:&error];
336337

337338
XCTAssertFalse(success);
338339
XCTAssertEqual(error.code, PACKAGE_ERROR_MANAGER_CANNOT_DISABLE_NON_ENABLED_PACKAGE);
339340
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
340-
XCTAssertEqual(package.status, CCPackageStatusUnzipped);
341+
XCTAssertEqual(package.status, CCPackageStatusInitial);
341342
}
342343

343344
- (void)testDeleteInstalledPackage
344345
{
345-
CCPackage *package = [self testPackageWithStatus:CCPackageStatusInstalledEnabled];
346+
CCPackage *package = [CCPackagesTestFixtures testPackageWithStatus:CCPackageStatusInstalledEnabled installFolderPath:_packageManager.installedPackagesPath];
346347
[_packageManager.packages addObject:package];
347348

349+
NSArray *urls = [self copyOfURLsOfPackage:package];
350+
348351
NSError *error;
349352
BOOL success = [_packageManager deletePackage:package error:&error];
350353

@@ -364,12 +367,61 @@ - (void)testDeleteInstalledPackage
364367
NSFileManager *fileManager = [NSFileManager defaultManager];
365368
XCTAssertFalse([fileManager fileExistsAtPath:package.installURL.path]);
366369
XCTAssertNil([_packageManager packageWithName:@"testpackage"]);
370+
XCTAssertTrue([self allURLsInArrayDontExistOnDisk:urls]);
371+
372+
[self assertURLsAreNilledStatusIsDeleted:package];
373+
}
374+
375+
- (void)testDeleteUnzippedPackage
376+
{
377+
CCPackage *package = [CCPackagesTestFixtures testPackageWithStatus:CCPackageStatusUnzipped installFolderPath:_packageManager.installedPackagesPath];
378+
[_packageManager.packages addObject:package];
379+
380+
NSArray *urls = [self copyOfURLsOfPackage:package];
381+
382+
NSError *error;
383+
BOOL success = [_packageManager deletePackage:package error:&error];
384+
385+
XCTAssertTrue(success);
386+
XCTAssertNil([_packageManager packageWithName:@"testpackage"]);
387+
XCTAssertTrue([self allURLsInArrayDontExistOnDisk:urls]);
388+
389+
[self assertURLsAreNilledStatusIsDeleted:package];
390+
}
391+
392+
- (void)testDeleteDownloadedPackage
393+
{
394+
CCPackage *package = [CCPackagesTestFixtures testPackageWithStatus:CCPackageStatusDownloaded installFolderPath:_packageManager.installedPackagesPath];
395+
[_packageManager.packages addObject:package];
396+
397+
NSArray *urls = [self copyOfURLsOfPackage:package];
398+
399+
NSError *error;
400+
BOOL success = [_packageManager deletePackage:package error:&error];
401+
402+
XCTAssertTrue(success);
403+
XCTAssertNil([_packageManager packageWithName:@"testpackage"]);
404+
XCTAssertTrue([self allURLsInArrayDontExistOnDisk:urls]);
405+
406+
[self assertURLsAreNilledStatusIsDeleted:package];
407+
}
408+
409+
- (void)assertURLsAreNilledStatusIsDeleted:(CCPackage *)package
410+
{
411+
XCTAssertNil(package.localDownloadURL);
412+
XCTAssertNil(package.unzipURL);
413+
XCTAssertNil(package.installURL);
414+
XCTAssertEqual(package.status, CCPackageStatusDeleted);
367415
}
368416

369417
- (void)testDeleteUnzippingPackage
370418
{
371-
CCPackage *package = [self testPackage];
419+
CCPackage *package = [CCPackagesTestFixtures testPackageWithInstallFolderPath:_packageManager.installedPackagesPath];
372420
package.status = CCPackageStatusUnzipping;
421+
package.localDownloadURL = [NSURL fileURLWithPath:@"/Foo"];
422+
package.unzipURL = [NSURL fileURLWithPath:@"/Baa"];
423+
package.installURL = [NSURL fileURLWithPath:@"/Fubar"];
424+
373425
[_packageManager.packages addObject:package];
374426

375427
NSError *error;
@@ -378,11 +430,10 @@ - (void)testDeleteUnzippingPackage
378430
XCTAssertFalse(success);
379431
XCTAssertEqual(error.code, PACKAGE_ERROR_MANAGER_CANNOT_DELETE_UNZIPPING_PACKAGE);
380432
XCTAssertNotNil([_packageManager packageWithName:@"testpackage"]);
381-
}
382-
383-
- (void)testDeleteDownloadingPackage
384-
{
385-
433+
XCTAssertNotNil(package.localDownloadURL);
434+
XCTAssertNotNil(package.unzipURL);
435+
XCTAssertNotNil(package.installURL);
436+
XCTAssertEqual(package.status, CCPackageStatusUnzipping);
386437
}
387438

388439
/*
@@ -450,54 +501,48 @@ - (NSString *)customFolderName:(CCPackage *)package packageContents:(NSArray *)p
450501
}
451502

452503

504+
#pragma mark - Helper
453505

454-
455-
#pragma mark - Fixtures
456-
457-
- (CCPackage *)testPackage
506+
- (void)waitForDelegateToReturn
458507
{
459-
return [self testPackageWithStatus:CCPackageStatusInitial];
508+
[CCPackagesTestFixtures waitForCondition:^bool {
509+
return !_managerReturnedFailed && !_managerReturnedSuccessfully;
510+
}];
460511
}
461512

462-
- (CCPackage *)testPackageWithStatus:(CCPackageStatus)status
513+
- (NSArray *)copyOfURLsOfPackage:(CCPackage *)package
463514
{
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;
515+
NSMutableArray *result = [NSMutableArray array];
470516

471-
if (status == CCPackageStatusInstalledDisabled
472-
|| status == CCPackageStatusInstalledEnabled)
517+
if (package.installURL)
473518
{
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"]];
519+
[result addObject:[package.installURL copy]];
520+
}
479521

480-
[fileManager copyItemAtPath:pathToPackage toPath:package.installURL.path error:nil];
522+
if (package.localDownloadURL)
523+
{
524+
[result addObject:[package.localDownloadURL copy]];
481525
}
482526

483-
if (status == CCPackageStatusInstalledEnabled)
527+
if (package.unzipURL)
484528
{
485-
CCPackageCocos2dEnabler *packageEnabler = [[CCPackageCocos2dEnabler alloc] init];
486-
[packageEnabler enablePackages:@[package]];
529+
[result addObject:[package.unzipURL copy]];
487530
}
488531

489-
return package;
532+
return result;
490533
}
491534

492-
#pragma mark - Helper
493-
494-
- (void)waitForDelegateToReturn
535+
- (BOOL)allURLsInArrayDontExistOnDisk:(NSArray *)urls
495536
{
496-
while (!_managerReturnedFailed
497-
&& !_managerReturnedSuccessfully)
537+
for (NSURL *url in urls)
498538
{
499-
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
539+
NSFileManager *fileManager = [NSFileManager defaultManager];
540+
if ([fileManager fileExistsAtPath:url.path])
541+
{
542+
return NO;
543+
}
500544
}
545+
return YES;
501546
}
502547

503548
@end

UnitTests/CCPackagesTestFixtures.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#import <Foundation/Foundation.h>
2+
#import "CCPackageTypes.h"
3+
4+
@class CCPackage;
5+
6+
typedef bool(^WaitConditionBlock)(void);
7+
8+
9+
@interface CCPackagesTestFixtures : NSObject
10+
11+
+ (CCPackage *)testPackageWithInstallFolderPath:(NSString *)installFolderPath;
12+
13+
+ (CCPackage *)testPackageWithStatus:(CCPackageStatus)status installFolderPath:(NSString *)installFolderPath;
14+
15+
+ (void)waitForCondition:(WaitConditionBlock)waitConditionBlock;
16+
17+
@end

UnitTests/CCPackagesTestFixtures.m

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#import "CCPackagesTestFixtures.h"
2+
#import "CCPackageTypes.h"
3+
#import "CCPackage.h"
4+
#import "CCPackageCocos2dEnabler.h"
5+
#import "CCPackage_private.h"
6+
7+
8+
9+
@implementation CCPackagesTestFixtures
10+
11+
+ (CCPackage *)testPackageWithInstallFolderPath:(NSString *)installFolderPath
12+
{
13+
return [self testPackageWithStatus:CCPackageStatusInitial installFolderPath:installFolderPath];
14+
}
15+
16+
+ (CCPackage *)testPackageWithStatus:(CCPackageStatus)status installFolderPath:(NSString *)installFolderPath
17+
{
18+
NSString *pathToUnzippedPackage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Resources-shared/Packages/testpackage-iOS-phonehd_unzipped/testpackage-iOS-phonehd"];
19+
NSString *pathToZippedPackage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Resources-shared/Packages/testpackage-iOS-phonehd.zip"];
20+
NSFileManager *fileManager = [NSFileManager defaultManager];
21+
22+
CCPackage *package = [[CCPackage alloc] initWithName:@"testpackage"
23+
resolution:@"phonehd"
24+
os:@"iOS"
25+
remoteURL:[[NSURL URLWithString:@"http://manager.test"]
26+
URLByAppendingPathComponent:@"testpackage-iOS-phonehd.zip"]];
27+
package.status = status;
28+
29+
if (status == CCPackageStatusInstalledDisabled
30+
|| status == CCPackageStatusInstalledEnabled)
31+
{
32+
package.installURL = [NSURL fileURLWithPath:[installFolderPath stringByAppendingPathComponent:@"testpackage-iOS-phonehd"]];
33+
34+
[fileManager copyItemAtPath:pathToUnzippedPackage toPath:package.installURL.path error:nil];
35+
}
36+
37+
if (status == CCPackageStatusInstalledEnabled)
38+
{
39+
CCPackageCocos2dEnabler *packageEnabler = [[CCPackageCocos2dEnabler alloc] init];
40+
[packageEnabler enablePackages:@[package]];
41+
}
42+
43+
if (status == CCPackageStatusDownloaded)
44+
{
45+
NSString *pathDownloadFolder = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Downloads"];
46+
[fileManager createDirectoryAtPath:pathDownloadFolder withIntermediateDirectories:YES attributes:nil error:nil];
47+
48+
package.localDownloadURL = [NSURL fileURLWithPath:[pathDownloadFolder stringByAppendingPathComponent:@"testpackage-iOS-phonehd"]];
49+
50+
[fileManager copyItemAtPath:pathToZippedPackage toPath:package.localDownloadURL.path error:nil];
51+
}
52+
53+
if (status == CCPackageStatusUnzipped)
54+
{
55+
NSString *pathUnzipFolder = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Unzipped"];
56+
[fileManager createDirectoryAtPath:pathUnzipFolder withIntermediateDirectories:YES attributes:nil error:nil];
57+
58+
package.unzipURL = [NSURL fileURLWithPath:[pathUnzipFolder stringByAppendingPathComponent:@"testpackage-iOS-phonehd"]];
59+
60+
[fileManager copyItemAtPath:pathToUnzippedPackage toPath:package.unzipURL.path error:nil];
61+
}
62+
63+
return package;
64+
}
65+
66+
+ (void)waitForCondition:(WaitConditionBlock)waitConditionBlock
67+
{
68+
while (waitConditionBlock())
69+
{
70+
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
71+
}
72+
}
73+
74+
@end

cocos2d-tests-ios.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
E525F81797DA5573FC26BEBB /* CCPackageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E525F771C583AAF68EB42E15 /* CCPackageTests.m */; };
152152
E525FA44681404CC22A3A8D9 /* CCPackageUnzipperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E525F30DA34A6712527102E5 /* CCPackageUnzipperTests.m */; };
153153
E525FCAF2CC6D200B8065E2E /* CCPackageCocos2dEnablerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E525FB8A3CC89D071A8377B1 /* CCPackageCocos2dEnablerTests.m */; };
154+
E525FCD390330D4F4EBD76CC /* CCPackagesTestFixtures.m in Sources */ = {isa = PBXBuildFile; fileRef = E525FF94F200689F83438E37 /* CCPackagesTestFixtures.m */; };
154155
E525FF2E8351476CDD7DEAC4 /* CCPackageManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E525F395FE85323D86232416 /* CCPackageManagerTests.m */; };
155156
E525FFABB4646A7446269A98 /* CCUnitTestAssertions.h in Resources */ = {isa = PBXBuildFile; fileRef = E525F832B569117922DA339E /* CCUnitTestAssertions.h */; };
156157
/* End PBXBuildFile section */
@@ -370,6 +371,8 @@
370371
E525F99055258F35DFF00ECD /* CCPackageHelperTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCPackageHelperTests.m; sourceTree = "<group>"; };
371372
E525FB8A3CC89D071A8377B1 /* CCPackageCocos2dEnablerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCPackageCocos2dEnablerTests.m; sourceTree = "<group>"; };
372373
E525FBF58DFECF27272F5D6F /* CCPackageInstallerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCPackageInstallerTests.m; sourceTree = "<group>"; };
374+
E525FCB52B23A4F29E8D6D64 /* CCPackagesTestFixtures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCPackagesTestFixtures.h; sourceTree = "<group>"; };
375+
E525FF94F200689F83438E37 /* CCPackagesTestFixtures.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCPackagesTestFixtures.m; sourceTree = "<group>"; };
373376
/* End PBXFileReference section */
374377

375378
/* Begin PBXFrameworksBuildPhase section */
@@ -770,6 +773,8 @@
770773
E525F771C583AAF68EB42E15 /* CCPackageTests.m */,
771774
E525F395FE85323D86232416 /* CCPackageManagerTests.m */,
772775
E525F99055258F35DFF00ECD /* CCPackageHelperTests.m */,
776+
E525FF94F200689F83438E37 /* CCPackagesTestFixtures.m */,
777+
E525FCB52B23A4F29E8D6D64 /* CCPackagesTestFixtures.h */,
773778
);
774779
name = Packages;
775780
sourceTree = "<group>";
@@ -1017,6 +1022,7 @@
10171022
E525FF2E8351476CDD7DEAC4 /* CCPackageManagerTests.m in Sources */,
10181023
E525F033EECC363CA8EAF2A6 /* CCPackageDownloadManagerTests.m in Sources */,
10191024
E525F4D0568A8A4176684936 /* CCPackageHelperTests.m in Sources */,
1025+
E525FCD390330D4F4EBD76CC /* CCPackagesTestFixtures.m in Sources */,
10201026
);
10211027
runOnlyForDeploymentPostprocessing = 0;
10221028
};

cocos2d/CCPackageManager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@
171171
* Deletes a package.
172172
* Will disable the package first and delete it from disk. Temp download and unzip files will be removed as well.
173173
* A package that is being unzipped cannot be deleted. Try after the unzipping finished.
174+
* The status will become CCPackageStatusDeleted in case you still hold a reference to the object.
175+
* localDownloURL, unzipURL and installURL will be nil after a succesful deletion.
174176
*
175177
* @param package The package to be deleted
176178
* @param error Error pointer with details about a failed operation

0 commit comments

Comments
 (0)