diff options
author | thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2008-10-22 19:16:19 +0000 |
---|---|---|
committer | thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2008-10-22 19:16:19 +0000 |
commit | 11938e47355bfbf3b81f1ff5b15f1222b83d4f47 (patch) | |
tree | 3794c78559472e4b2efe5eabc0e094d7c14a9743 /Foundation/GTMHTTPFetcherTest.m | |
parent | 90eba8f973c0b77f36dc7084163ff0d43675a1a8 (diff) |
- GTM_INLINE will make sure a function gets inlined, and provides a consistent
way for all GTM code to do it.
- Added GTMDebugThreadValidation to allow you to enforce the fact that your
code must run in the main thread in DEBUG builds.
- Updated some internals of the iPhone unittesting so it doesn't double print
the test descriptions, file names, or lines numbers of a test failure line.
Also includes the test names in the error output.
- Changed the xcconfigs so that know it's easier to set different settings at
the different levels and not accidentally overwrite settings set at lower
levels in the "settings collapse". Also tightened up warnings significantly.
- Changed how gtm_unitTestExposedBindingsTestValues works. If you have an
implementation of gtm_unitTestExposedBindingsTestValues in your own code
you will need to update to the new way of calling. See implementations in
GTMNSObject+BindingUnitTesting.m for details.
- Added support for grabbing the build number for a particular OS in
GTMSystemVersion and easily comparing it to known build numbers, and switched
some types from in GTMSystemVersion from "int" to SInt32 to make 64 bit work
better.
- Added support for SnowLeopard (10A96). We build cleanly with the 10.6 SDKs and
all radar checks were updated accordingly. Build All script was also updated
to build on SnowLeopard if you have the SDK available.
- Turned off building ppc64 GTM because the SnowLeopard SDK currently
doesn't have ppc64 support, so SenTestCase isn't defined. This makes it
impossible to build the ppc64 10.5 config on SnowLeopard. We have left the
setting in the xcconfig for those of you who need it, but have disabled
it in the GTM project settings.
- Turned on stack smashing protection on the debug builds for all Leopard
and above.
- Added ability to easily do leak checking by defining the GTM_ENABLE_LEAKS
environment variable. It isn't on by default because several of Apple's
frameworks leak. You can work around these false positives by using the
GTM_LEAKS_SYMBOLS_TO_IGNORE environment variable. Also if you turn on leaks
make sure to turn off zombies by defining the GTM_DISABLE_ZOMBIES variable,
otherwise every memory allocation you do will look like a leak.
Diffstat (limited to 'Foundation/GTMHTTPFetcherTest.m')
-rw-r--r-- | Foundation/GTMHTTPFetcherTest.m | 79 |
1 files changed, 59 insertions, 20 deletions
diff --git a/Foundation/GTMHTTPFetcherTest.m b/Foundation/GTMHTTPFetcherTest.m index 3c461e0..a541d1f 100644 --- a/Foundation/GTMHTTPFetcherTest.m +++ b/Foundation/GTMHTTPFetcherTest.m @@ -19,6 +19,7 @@ #import "GTMSenTestCase.h" #import "GTMHTTPFetcher.h" #import "GTMTestHTTPServer.h" +#import "GTMUnitTestDevLog.h" @interface GTMHTTPFetcherTest : GTMTestCase { // these ivars are checked after fetches, and are reset by resetFetchResponse @@ -97,7 +98,7 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; - (void)tearDown { [testServer_ release]; testServer_ = nil; - + [self resetFetchResponse]; [fetchHistory_ release]; @@ -136,24 +137,24 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; responseHeaders = [(NSHTTPURLResponse *)fetchedResponse_ allHeaderFields]; NSString *cookiesSetString = [responseHeaders objectForKey:@"Set-Cookie"]; NSString *cookieExpected = [NSString stringWithFormat:@"TestCookie=%@", - kValidFileName]; + kValidFileName]; STAssertEqualObjects(cookiesSetString, cookieExpected, @"Unexpected cookie"); // test properties NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: - @"val1", @"key1", @"val2", @"key2", nil]; + @"val1", @"key1", @"val2", @"key2", nil]; [fetcher setProperties:dict]; STAssertEqualObjects([fetcher properties], dict, @"properties as dictionary"); STAssertEqualObjects([fetcher propertyForKey:@"key2"], @"val2", - @"single property"); + @"single property"); NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys: - @"valx1", @"key1", @"val3", @"key3", nil]; + @"valx1", @"key1", @"val3", @"key3", nil]; [fetcher setProperty:@"valx1" forKey:@"key1"]; [fetcher setProperty:nil forKey:@"key2"]; [fetcher setProperty:@"val3" forKey:@"key3"]; STAssertEqualObjects([fetcher properties], dict2, @"property changes"); - + // make a copy of the fetched data to compare with our next fetch from the // cache NSData *originalFetchedData = [[fetchedData_ copy] autorelease]; @@ -161,7 +162,7 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; // Now fetch again so the "If modified since" header will be set (because // we're calling setFetchHistory: below) and caching ON, and verify that we // got a good data from the cache, along with a "Not modified" status - + [self resetFetchResponse]; [self doFetchWithURLString:urlString cachingDatedData:YES]; @@ -196,19 +197,19 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; [fetchHistory_ removeAllObjects]; [self doFetchWithURLString:urlString cachingDatedData:NO]; - + STAssertEqualObjects(fetchedData_, originalFetchedData, @"cache data mismatch"); - + [self resetFetchResponse]; [self doFetchWithURLString:urlString cachingDatedData:NO]; - + STAssertNotNil(fetchedData_, @""); STAssertEquals([fetchedData_ length], (NSUInteger)0, @"unexpected data"); STAssertEquals(fetchedStatus_, (NSInteger)kGTMHTTPFetcherStatusNotModified, @"fetching data expected status 304, instead got %d", fetchedStatus_); STAssertNil(fetcherError_, @"unexpected error: %@", fetcherError_); - + } - (void)testBogusFetch { @@ -221,29 +222,29 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; if (fetchedStatus_ == kServiceUnavailableStatus) { // some proxies give a "service unavailable" error for bogus fetches } else { - + if (fetchedData_) { NSString *str = [[[NSString alloc] initWithData:fetchedData_ encoding:NSUTF8StringEncoding] autorelease]; STAssertNil(fetchedData_, @"fetched unexpected data: %@", str); } - + STAssertNotNil(fetcherError_, @"failed to receive fetching error"); STAssertEquals(fetchedStatus_, (NSInteger)0, @"fetching data expected no status from no response, instead got %d", fetchedStatus_); } - + // fetch with a specific status code from our http server [self resetFetchResponse]; - + NSString *invalidWebPageFile = [kValidFileName stringByAppendingString:@"?status=400"]; NSString *statusUrlString = [self fileURLStringToTestFileName:invalidWebPageFile]; - + [self doFetchWithURLString:statusUrlString cachingDatedData:NO]; - + STAssertNotNil(fetchedData_, @"fetch lacked data with error info"); STAssertNil(fetcherError_, @"expected bad status but got an error"); STAssertEquals(fetchedStatus_, (NSInteger)400, @@ -258,7 +259,7 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; SEL countRetriesSel = @selector(countRetriesFetcher:willRetry:forError:); SEL fixRequestSel = @selector(fixRequestFetcher:willRetry:forError:); - + // // test: retry until timeout, then expect failure with status message // @@ -310,6 +311,44 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; STAssertEquals([fetcher retryCount], 1U, @"retry count unexpected"); } +- (void)testNilFetch { + GTMHTTPFetcher *fetcher = [[GTMHTTPFetcher alloc] init]; + [GTMUnitTestDevLog expectString:@"beginFetchWithDelegate requires a request"]; + BOOL wasGood = [fetcher beginFetchWithDelegate:nil + didFinishSelector:NULL + didFailSelector:NULL]; + STAssertFalse(wasGood, nil); +} + +- (void)testCookies { + // This is checking part one of + // rdar://6293862 NSHTTPCookie cookieWithProperties doesn't work with + // NSHTTPCookieOriginURL key + NSString *urlString = @"http://www.apple.com/index.html"; + NSURL *url = [NSURL URLWithString:@"http://www.apple.com/index.html"]; + + NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: + url, NSHTTPCookieOriginURL, + @"testCookies", NSHTTPCookieName, + @"1", NSHTTPCookieValue, + nil]; + NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties]; + + STAssertNil(cookie, nil); + + // This is checking part two of + // rdar://6293862 NSHTTPCookie cookieWithProperties doesn't work with + // NSHTTPCookieOriginURL key + properties = [NSDictionary dictionaryWithObjectsAndKeys: + urlString, NSHTTPCookieOriginURL, + @"testCookies", NSHTTPCookieName, + @"1", NSHTTPCookieValue, + nil]; + cookie = [NSHTTPCookie cookieWithProperties:properties]; + + STAssertNil(cookie, nil); +} + #pragma mark - - (GTMHTTPFetcher *)doFetchWithURLString:(NSString *)urlString @@ -327,7 +366,7 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; retrySelector:(SEL)retrySel maxRetryInterval:(NSTimeInterval)maxRetryInterval userData:(id)userData { - + NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData @@ -387,7 +426,7 @@ static NSString *const kValidFileName = @"GTMHTTPFetcherTestPage.html"; // return a localhost:port URL for the test file NSString *urlString = [NSString stringWithFormat:@"http://localhost:%d/%@", - [testServer_ port], name]; + [testServer_ port], name]; // we exclude the "?status=" that would indicate that the URL // should cause a retryable error |