Skip to content

Commit 7908afc

Browse files
committed
Merge pull request #1008 from danhd123/develop
Nicky's Pull Request plus android fixes.
2 parents eb86136 + ce8cbe2 commit 7908afc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+5041
-20
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,6 @@ url=https://github.com/slembcke/Chipmunk2D.git
55
path = external/ObjectAL
66
url = https://github.com/spritebuilder/ObjectAL-for-Cocos2D.git
77
branch = apportable
8+
[submodule "external/SSZipArchive"]
9+
path = external/SSZipArchive
10+
url = https://github.com/spritebuilder/ssziparchive.git
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
//
2+
// CCPackageCocos2dEnablerTests.m
3+
// cocos2d-tests-ios
4+
//
5+
// Created by Nicky Weber on 23.09.14.
6+
// Copyright (c) 2014 Cocos2d. All rights reserved.
7+
//
8+
9+
#import <XCTest/XCTest.h>
10+
#import "CCPackageCocos2dEnabler.h"
11+
#import "CCPackage.h"
12+
#import "CCFileUtils.h"
13+
#import "CCSprite.h"
14+
#import "CCBReader.h"
15+
#import "AppDelegate.h"
16+
#import "CCPackage_private.h"
17+
18+
@interface CCPackageCocos2dEnablerTests : XCTestCase
19+
20+
@property (nonatomic, strong) CCPackage *package;
21+
@property (nonatomic, copy) NSURL *installURL;
22+
23+
@end
24+
25+
26+
@implementation CCPackageCocos2dEnablerTests
27+
28+
- (void)setUp
29+
{
30+
[super setUp];
31+
[(AppController *)[UIApplication sharedApplication].delegate configureCocos2d];
32+
33+
self.package = [[CCPackage alloc] initWithName:@"Foo"
34+
resolution:@"phonehd"
35+
os:@"iOS"
36+
remoteURL:[NSURL URLWithString:@"http://foo.fake/Foo-iOS-phonehd.zip"]];
37+
38+
NSString *pathToPackage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Resources-shared/Packages/testpackage-iOS-phonehd_unzipped"];
39+
self.installURL = [[NSURL fileURLWithPath:pathToPackage] URLByAppendingPathComponent:@"testpackage-iOS-phonehd"];
40+
_package.installURL = _installURL;
41+
}
42+
43+
44+
#pragma mark - Tests
45+
46+
- (void)testEnablePackage
47+
{
48+
CCPackageCocos2dEnabler *packageEnabler = [[CCPackageCocos2dEnabler alloc] init];
49+
[packageEnabler enablePackages:@[_package]];
50+
51+
XCTAssertTrue([self isPackageInSearchPath]);
52+
XCTAssertEqual(_package.status, CCPackageStatusInstalledEnabled);
53+
54+
CCSprite *sprite = [CCSprite spriteWithImageNamed:@"boredSmiley.png"];
55+
XCTAssertNotNil(sprite);
56+
}
57+
58+
- (void)testDisablePackage
59+
{
60+
[self testEnablePackage];
61+
62+
CCPackageCocos2dEnabler *packageEnabler = [[CCPackageCocos2dEnabler alloc] init];
63+
[packageEnabler disablePackages:@[_package]];
64+
65+
XCTAssertEqual(_package.status, CCPackageStatusInstalledDisabled);
66+
67+
XCTAssertFalse([self isPackageInSearchPath]);
68+
69+
// Can't use [CCSprite spriteWithImageNamed:@"boredSmiley.png"], assertion exception is screwing up test result
70+
CGFloat *scale;
71+
NSString *path = [[CCFileUtils sharedFileUtils] fullPathForFilename:@"boredSmiley.png" contentScale:&scale];
72+
XCTAssertNil(path);
73+
}
74+
75+
76+
#pragma mark - Helper
77+
78+
- (BOOL)isPackageInSearchPath
79+
{
80+
for (NSString *aSearchPath in [CCFileUtils sharedFileUtils].searchPath)
81+
{
82+
if ([aSearchPath isEqualToString:_package.installURL.path])
83+
{
84+
return YES;
85+
}
86+
}
87+
return NO;
88+
}
89+
90+
@end
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
//
2+
// CCPackageDownloadManagerTests.m
3+
// cocos2d-tests-ios
4+
//
5+
// Created by Nicky Weber on 23.09.14.
6+
// Copyright (c) 2014 Cocos2d. All rights reserved.
7+
//
8+
9+
#import <XCTest/XCTest.h>
10+
#import "CCPackageDownloadManager.h"
11+
#import "CCPackageDownloadManagerDelegate.h"
12+
#import "CCPackage.h"
13+
#import "CCDirector.h"
14+
#import "AppDelegate.h"
15+
#import "CCUnitTestAssertions.h"
16+
17+
@interface CCPackageDownloadManagerTestURLProtocol : NSURLProtocol @end
18+
19+
@implementation CCPackageDownloadManagerTestURLProtocol
20+
21+
+ (BOOL)canInitWithRequest:(NSURLRequest*)theRequest
22+
{
23+
return [theRequest.URL.scheme caseInsensitiveCompare:@"http"] == NSOrderedSame;
24+
}
25+
26+
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)theRequest
27+
{
28+
return theRequest;
29+
}
30+
31+
- (void)startLoading
32+
{
33+
// just send back what was received in URL as last path component
34+
NSString *payload = [self.request.URL lastPathComponent];
35+
NSData *data = [payload dataUsingEncoding:NSUTF8StringEncoding];
36+
37+
NSHTTPURLResponse *response;
38+
response = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL
39+
statusCode:200
40+
HTTPVersion:@"HTTP/1.1"
41+
headerFields:nil];
42+
43+
id<NSURLProtocolClient> client = [self client];
44+
[client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
45+
[client URLProtocol:self didLoadData:data];
46+
[client URLProtocolDidFinishLoading:self];
47+
}
48+
49+
- (void)stopLoading
50+
{
51+
// Nothing to do
52+
}
53+
54+
@end
55+
56+
57+
@interface CCPackageDownloadManagerTests : XCTestCase <CCPackageDownloadManagerDelegate>
58+
59+
@property (nonatomic, strong) CCPackageDownloadManager *downloadManager;
60+
@property (nonatomic) BOOL allDownloadsReturned;
61+
@property (nonatomic, copy) NSString *downloadPath;
62+
63+
@end
64+
65+
@implementation CCPackageDownloadManagerTests
66+
67+
- (void)setUp
68+
{
69+
[super setUp];
70+
71+
[(AppController *)[UIApplication sharedApplication].delegate configureCocos2d];
72+
[[CCDirector sharedDirector] stopAnimation];
73+
// Spin the runloop a bit otherwise nondeterministic exceptions are thrown in the CCScheduler.
74+
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeInterval:0.2 sinceDate:[NSDate date]]];
75+
76+
[NSURLProtocol registerClass:[CCPackageDownloadManagerTestURLProtocol class]];
77+
78+
self.downloadManager = [[CCPackageDownloadManager alloc] init];
79+
self.allDownloadsReturned = NO;
80+
81+
self.downloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Downloads"];
82+
83+
[self deleteOldDownloads];
84+
85+
_downloadManager.downloadPath = _downloadPath;
86+
_downloadManager.delegate = self;
87+
}
88+
89+
- (void)tearDown
90+
{
91+
[NSURLProtocol unregisterClass:[CCPackageDownloadManagerTestURLProtocol class]];
92+
[super tearDown];
93+
}
94+
95+
- (void)deleteOldDownloads
96+
{
97+
NSFileManager *fileManager = [NSFileManager defaultManager];
98+
[fileManager removeItemAtPath:_downloadPath error:nil];
99+
}
100+
101+
102+
#pragma mark - Tests
103+
104+
- (void)testSetDownloadPath
105+
{
106+
NSString *newPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"NewDownloads"];
107+
_downloadManager.downloadPath = newPath;
108+
109+
NSFileManager *fileManager = [NSFileManager defaultManager];
110+
BOOL isDir;
111+
112+
XCTAssert([fileManager fileExistsAtPath:newPath isDirectory:&isDir]);
113+
XCTAssertTrue(isDir);
114+
CCAssertEqualStrings(newPath, _downloadManager.downloadPath);
115+
}
116+
117+
- (void)testTwoDownloads
118+
{
119+
NSArray *packages = @[[self completePackageWithName:@"package1"], [self completePackageWithName:@"package2"]];
120+
121+
for (CCPackage *aPackage in packages)
122+
{
123+
[_downloadManager enqueuePackageForDownload:aPackage];
124+
}
125+
126+
[self waitUntilDelegateReturns];
127+
128+
[self assertPackagesDownloadedAndContentsAreAsExpected:packages];
129+
}
130+
131+
- (void)testCancelDownload
132+
{
133+
CCPackage *package1 = [self completePackageWithName:@"package1"];
134+
135+
[_downloadManager enqueuePackageForDownload:package1];
136+
[_downloadManager cancelDownloadOfPackage:package1];
137+
138+
// Can't wait for delegate since cancelling won't trigger them
139+
// Just wait a short amount of time and see if nothing has been written to disk
140+
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeInterval:0.5 sinceDate:[NSDate date]]];
141+
142+
NSFileManager *fileManager = [NSFileManager defaultManager];
143+
XCTAssertFalse([fileManager fileExistsAtPath:package1.localDownloadURL.path]);
144+
}
145+
146+
- (void)testPauseAndResumeAllDownloads
147+
{
148+
NSArray *packages = @[[self completePackageWithName:@"package1"],
149+
[self completePackageWithName:@"package2"],
150+
[self completePackageWithName:@"package3"]];
151+
152+
for (CCPackage *aPackage in packages)
153+
{
154+
[_downloadManager enqueuePackageForDownload:aPackage];
155+
}
156+
157+
[_downloadManager pauseAllDownloads];
158+
[_downloadManager resumeAllDownloads];
159+
160+
[self waitUntilDelegateReturns];
161+
162+
[self assertPackagesDownloadedAndContentsAreAsExpected:packages];
163+
}
164+
165+
- (void)testEnqueuePausedPackage
166+
{
167+
CCPackage *package1 = [self completePackageWithName:@"package1"];
168+
169+
[_downloadManager enqueuePackageForDownload:package1];
170+
[_downloadManager pauseDownloadOfPackage:package1];
171+
[_downloadManager enqueuePackageForDownload:package1];
172+
173+
[self waitUntilDelegateReturns];
174+
175+
[self assertPackagesDownloadedAndContentsAreAsExpected:@[package1]];
176+
}
177+
178+
- (void)waitUntilDelegateReturns
179+
{
180+
while (!_allDownloadsReturned)
181+
{
182+
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
183+
}
184+
}
185+
186+
187+
#pragma mark - Helpers
188+
189+
- (void)assertPackagesDownloadedAndContentsAreAsExpected:(NSArray *)packages
190+
{
191+
NSFileManager *fileManager = [NSFileManager defaultManager];
192+
for (CCPackage *aPackage in packages)
193+
{
194+
XCTAssertTrue([fileManager fileExistsAtPath:aPackage.localDownloadURL.path]);
195+
CCAssertEqualStrings(aPackage.name, [NSString stringWithContentsOfFile:aPackage.localDownloadURL.path encoding:NSUTF8StringEncoding error:nil]);
196+
}
197+
}
198+
199+
200+
#pragma mark - Fixtures
201+
202+
- (CCPackage *)completePackageWithName:(NSString *)name
203+
{
204+
CCPackage *package = [[CCPackage alloc] initWithName:name resolution:@"phonehd" os:@"iOS" remoteURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://package.fake/%@", name]]];
205+
return package;
206+
}
207+
208+
209+
#pragma mark - CCPackageDownloadManagerDelegate
210+
211+
- (void)downloadFinishedOfPackage:(CCPackage *)package
212+
{
213+
NSLog(@"%@ finished", package);
214+
self.allDownloadsReturned = _downloadManager.allDownloads.count == 0;
215+
}
216+
217+
- (void)downloadFailedOfPackage:(CCPackage *)package error:(NSError *)error
218+
{
219+
NSLog(@"%@ failed", package);
220+
self.allDownloadsReturned = _downloadManager.allDownloads.count == 0;
221+
}
222+
223+
@end

0 commit comments

Comments
 (0)