-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1008 from danhd123/develop
Nicky's Pull Request plus android fixes.
- Loading branch information
Showing
59 changed files
with
5,041 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
// | ||
// CCPackageCocos2dEnablerTests.m | ||
// cocos2d-tests-ios | ||
// | ||
// Created by Nicky Weber on 23.09.14. | ||
// Copyright (c) 2014 Cocos2d. All rights reserved. | ||
// | ||
|
||
#import <XCTest/XCTest.h> | ||
#import "CCPackageCocos2dEnabler.h" | ||
#import "CCPackage.h" | ||
#import "CCFileUtils.h" | ||
#import "CCSprite.h" | ||
#import "CCBReader.h" | ||
#import "AppDelegate.h" | ||
#import "CCPackage_private.h" | ||
|
||
@interface CCPackageCocos2dEnablerTests : XCTestCase | ||
|
||
@property (nonatomic, strong) CCPackage *package; | ||
@property (nonatomic, copy) NSURL *installURL; | ||
|
||
@end | ||
|
||
|
||
@implementation CCPackageCocos2dEnablerTests | ||
|
||
- (void)setUp | ||
{ | ||
[super setUp]; | ||
[(AppController *)[UIApplication sharedApplication].delegate configureCocos2d]; | ||
|
||
self.package = [[CCPackage alloc] initWithName:@"Foo" | ||
resolution:@"phonehd" | ||
os:@"iOS" | ||
remoteURL:[NSURL URLWithString:@"http://foo.fake/Foo-iOS-phonehd.zip"]]; | ||
|
||
NSString *pathToPackage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Resources-shared/Packages/testpackage-iOS-phonehd_unzipped"]; | ||
self.installURL = [[NSURL fileURLWithPath:pathToPackage] URLByAppendingPathComponent:@"testpackage-iOS-phonehd"]; | ||
_package.installURL = _installURL; | ||
} | ||
|
||
|
||
#pragma mark - Tests | ||
|
||
- (void)testEnablePackage | ||
{ | ||
CCPackageCocos2dEnabler *packageEnabler = [[CCPackageCocos2dEnabler alloc] init]; | ||
[packageEnabler enablePackages:@[_package]]; | ||
|
||
XCTAssertTrue([self isPackageInSearchPath]); | ||
XCTAssertEqual(_package.status, CCPackageStatusInstalledEnabled); | ||
|
||
CCSprite *sprite = [CCSprite spriteWithImageNamed:@"boredSmiley.png"]; | ||
XCTAssertNotNil(sprite); | ||
} | ||
|
||
- (void)testDisablePackage | ||
{ | ||
[self testEnablePackage]; | ||
|
||
CCPackageCocos2dEnabler *packageEnabler = [[CCPackageCocos2dEnabler alloc] init]; | ||
[packageEnabler disablePackages:@[_package]]; | ||
|
||
XCTAssertEqual(_package.status, CCPackageStatusInstalledDisabled); | ||
|
||
XCTAssertFalse([self isPackageInSearchPath]); | ||
|
||
// Can't use [CCSprite spriteWithImageNamed:@"boredSmiley.png"], assertion exception is screwing up test result | ||
CGFloat *scale; | ||
NSString *path = [[CCFileUtils sharedFileUtils] fullPathForFilename:@"boredSmiley.png" contentScale:&scale]; | ||
XCTAssertNil(path); | ||
} | ||
|
||
|
||
#pragma mark - Helper | ||
|
||
- (BOOL)isPackageInSearchPath | ||
{ | ||
for (NSString *aSearchPath in [CCFileUtils sharedFileUtils].searchPath) | ||
{ | ||
if ([aSearchPath isEqualToString:_package.installURL.path]) | ||
{ | ||
return YES; | ||
} | ||
} | ||
return NO; | ||
} | ||
|
||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,223 @@ | ||
// | ||
// CCPackageDownloadManagerTests.m | ||
// cocos2d-tests-ios | ||
// | ||
// Created by Nicky Weber on 23.09.14. | ||
// Copyright (c) 2014 Cocos2d. All rights reserved. | ||
// | ||
|
||
#import <XCTest/XCTest.h> | ||
#import "CCPackageDownloadManager.h" | ||
#import "CCPackageDownloadManagerDelegate.h" | ||
#import "CCPackage.h" | ||
#import "CCDirector.h" | ||
#import "AppDelegate.h" | ||
#import "CCUnitTestAssertions.h" | ||
|
||
@interface CCPackageDownloadManagerTestURLProtocol : NSURLProtocol @end | ||
|
||
@implementation CCPackageDownloadManagerTestURLProtocol | ||
|
||
+ (BOOL)canInitWithRequest:(NSURLRequest*)theRequest | ||
{ | ||
return [theRequest.URL.scheme caseInsensitiveCompare:@"http"] == NSOrderedSame; | ||
} | ||
|
||
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)theRequest | ||
{ | ||
return theRequest; | ||
} | ||
|
||
- (void)startLoading | ||
{ | ||
// just send back what was received in URL as last path component | ||
NSString *payload = [self.request.URL lastPathComponent]; | ||
NSData *data = [payload dataUsingEncoding:NSUTF8StringEncoding]; | ||
|
||
NSHTTPURLResponse *response; | ||
response = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL | ||
statusCode:200 | ||
HTTPVersion:@"HTTP/1.1" | ||
headerFields:nil]; | ||
|
||
id<NSURLProtocolClient> client = [self client]; | ||
[client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; | ||
[client URLProtocol:self didLoadData:data]; | ||
[client URLProtocolDidFinishLoading:self]; | ||
} | ||
|
||
- (void)stopLoading | ||
{ | ||
// Nothing to do | ||
} | ||
|
||
@end | ||
|
||
|
||
@interface CCPackageDownloadManagerTests : XCTestCase <CCPackageDownloadManagerDelegate> | ||
|
||
@property (nonatomic, strong) CCPackageDownloadManager *downloadManager; | ||
@property (nonatomic) BOOL allDownloadsReturned; | ||
@property (nonatomic, copy) NSString *downloadPath; | ||
|
||
@end | ||
|
||
@implementation CCPackageDownloadManagerTests | ||
|
||
- (void)setUp | ||
{ | ||
[super setUp]; | ||
|
||
[(AppController *)[UIApplication sharedApplication].delegate configureCocos2d]; | ||
[[CCDirector sharedDirector] stopAnimation]; | ||
// Spin the runloop a bit otherwise nondeterministic exceptions are thrown in the CCScheduler. | ||
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeInterval:0.2 sinceDate:[NSDate date]]]; | ||
|
||
[NSURLProtocol registerClass:[CCPackageDownloadManagerTestURLProtocol class]]; | ||
|
||
self.downloadManager = [[CCPackageDownloadManager alloc] init]; | ||
self.allDownloadsReturned = NO; | ||
|
||
self.downloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Downloads"]; | ||
|
||
[self deleteOldDownloads]; | ||
|
||
_downloadManager.downloadPath = _downloadPath; | ||
_downloadManager.delegate = self; | ||
} | ||
|
||
- (void)tearDown | ||
{ | ||
[NSURLProtocol unregisterClass:[CCPackageDownloadManagerTestURLProtocol class]]; | ||
[super tearDown]; | ||
} | ||
|
||
- (void)deleteOldDownloads | ||
{ | ||
NSFileManager *fileManager = [NSFileManager defaultManager]; | ||
[fileManager removeItemAtPath:_downloadPath error:nil]; | ||
} | ||
|
||
|
||
#pragma mark - Tests | ||
|
||
- (void)testSetDownloadPath | ||
{ | ||
NSString *newPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"NewDownloads"]; | ||
_downloadManager.downloadPath = newPath; | ||
|
||
NSFileManager *fileManager = [NSFileManager defaultManager]; | ||
BOOL isDir; | ||
|
||
XCTAssert([fileManager fileExistsAtPath:newPath isDirectory:&isDir]); | ||
XCTAssertTrue(isDir); | ||
CCAssertEqualStrings(newPath, _downloadManager.downloadPath); | ||
} | ||
|
||
- (void)testTwoDownloads | ||
{ | ||
NSArray *packages = @[[self completePackageWithName:@"package1"], [self completePackageWithName:@"package2"]]; | ||
|
||
for (CCPackage *aPackage in packages) | ||
{ | ||
[_downloadManager enqueuePackageForDownload:aPackage]; | ||
} | ||
|
||
[self waitUntilDelegateReturns]; | ||
|
||
[self assertPackagesDownloadedAndContentsAreAsExpected:packages]; | ||
} | ||
|
||
- (void)testCancelDownload | ||
{ | ||
CCPackage *package1 = [self completePackageWithName:@"package1"]; | ||
|
||
[_downloadManager enqueuePackageForDownload:package1]; | ||
[_downloadManager cancelDownloadOfPackage:package1]; | ||
|
||
// Can't wait for delegate since cancelling won't trigger them | ||
// Just wait a short amount of time and see if nothing has been written to disk | ||
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeInterval:0.5 sinceDate:[NSDate date]]]; | ||
|
||
NSFileManager *fileManager = [NSFileManager defaultManager]; | ||
XCTAssertFalse([fileManager fileExistsAtPath:package1.localDownloadURL.path]); | ||
} | ||
|
||
- (void)testPauseAndResumeAllDownloads | ||
{ | ||
NSArray *packages = @[[self completePackageWithName:@"package1"], | ||
[self completePackageWithName:@"package2"], | ||
[self completePackageWithName:@"package3"]]; | ||
|
||
for (CCPackage *aPackage in packages) | ||
{ | ||
[_downloadManager enqueuePackageForDownload:aPackage]; | ||
} | ||
|
||
[_downloadManager pauseAllDownloads]; | ||
[_downloadManager resumeAllDownloads]; | ||
|
||
[self waitUntilDelegateReturns]; | ||
|
||
[self assertPackagesDownloadedAndContentsAreAsExpected:packages]; | ||
} | ||
|
||
- (void)testEnqueuePausedPackage | ||
{ | ||
CCPackage *package1 = [self completePackageWithName:@"package1"]; | ||
|
||
[_downloadManager enqueuePackageForDownload:package1]; | ||
[_downloadManager pauseDownloadOfPackage:package1]; | ||
[_downloadManager enqueuePackageForDownload:package1]; | ||
|
||
[self waitUntilDelegateReturns]; | ||
|
||
[self assertPackagesDownloadedAndContentsAreAsExpected:@[package1]]; | ||
} | ||
|
||
- (void)waitUntilDelegateReturns | ||
{ | ||
while (!_allDownloadsReturned) | ||
{ | ||
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; | ||
} | ||
} | ||
|
||
|
||
#pragma mark - Helpers | ||
|
||
- (void)assertPackagesDownloadedAndContentsAreAsExpected:(NSArray *)packages | ||
{ | ||
NSFileManager *fileManager = [NSFileManager defaultManager]; | ||
for (CCPackage *aPackage in packages) | ||
{ | ||
XCTAssertTrue([fileManager fileExistsAtPath:aPackage.localDownloadURL.path]); | ||
CCAssertEqualStrings(aPackage.name, [NSString stringWithContentsOfFile:aPackage.localDownloadURL.path encoding:NSUTF8StringEncoding error:nil]); | ||
} | ||
} | ||
|
||
|
||
#pragma mark - Fixtures | ||
|
||
- (CCPackage *)completePackageWithName:(NSString *)name | ||
{ | ||
CCPackage *package = [[CCPackage alloc] initWithName:name resolution:@"phonehd" os:@"iOS" remoteURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://package.fake/%@", name]]]; | ||
return package; | ||
} | ||
|
||
|
||
#pragma mark - CCPackageDownloadManagerDelegate | ||
|
||
- (void)downloadFinishedOfPackage:(CCPackage *)package | ||
{ | ||
NSLog(@"%@ finished", package); | ||
self.allDownloadsReturned = _downloadManager.allDownloads.count == 0; | ||
} | ||
|
||
- (void)downloadFailedOfPackage:(CCPackage *)package error:(NSError *)error | ||
{ | ||
NSLog(@"%@ failed", package); | ||
self.allDownloadsReturned = _downloadManager.allDownloads.count == 0; | ||
} | ||
|
||
@end |
Oops, something went wrong.