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
1721static 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{
0 commit comments