Index: base/NSURLConnection/Helpers/IGNORE =================================================================== Index: base/NSURLConnection/Helpers/server.py =================================================================== --- base/NSURLConnection/Helpers/server.py (révision 0) +++ base/NSURLConnection/Helpers/server.py (révision 0) @@ -0,0 +1,23 @@ +import BaseHTTPServer + +HOST_NAME = '127.0.0.1' +PORT_NUMBER = 54321 + +class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): + def do_HEAD(s): + s.send_response(200) + s.send_header("Content-type", "text/html") + s.end_headers() + + def do_GET(s): + s.send_response(200) + s.send_header("Content-type", "text/html") + s.end_headers() + s.wfile.write("Title goes here.") + s.wfile.write("

This is a test.

") + +if __name__ == '__main__': + server_class = BaseHTTPServer.HTTPServer + httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler) + httpd.serve_forever() + httpd.server_close() Index: base/NSURLConnection/test00.m =================================================================== --- base/NSURLConnection/test00.m (révision 0) +++ base/NSURLConnection/test00.m (révision 0) @@ -0,0 +1,169 @@ +#import +#import "Testing.h" +#import "ObjectTesting.h" + address@hidden TestClass : NSObject +{ + BOOL done; + NSMutableData *data; + NSURLResponse *response; + int status; +} +- (int) runTests; address@hidden + address@hidden TestClass +- (void)dealloc +{ + [response release]; + [data release]; + [super dealloc]; +} + +- (id) init +{ + data = [[NSMutableData alloc] initWithCapacity:512]; + return self; +} + +- (void) runTest +{ + NSRunLoop *loop = [NSRunLoop currentRunLoop]; + int count; + + DESTROY(response); + done = NO; + count = 0; + status = 0; + while (!done && count < 10) { + [loop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.2]]; + count++; + } +} + +- (int) runTests +{ + NSURL *url; + NSMutableURLRequest *request; + NSURLConnection *connection; + + url = [NSURL URLWithString: @"http://localhost:54321/"]; + if (!url) { + NSLog(@"Couldn't build an NSURL from http://localhost:54321/"); + return 1; + } + request = [NSMutableURLRequest requestWithURL:url]; + if (!request) { + NSLog(@"Couldn't build an NSMutableURLRequest from NSURL http://localhost:54321/"); + return 1; + } + + connection = [NSURLConnection connectionWithRequest:request delegate:self]; + pass(connection != nil, + "NSURLConnection connectionWithRequest:delegate: with a valid GET HTTP " + "request and a delegate returns an instance"); + [self runTest]; + pass(status == 200, "HTTP GET gets a 200 response"); + pass([data length] > 0, "HTTP GET returns data"); + passeq([response class], [NSHTTPURLResponse class], "HTTP GET returns a NSHTTPURLResponse"); + + [request setHTTPMethod:@"DELETE"]; + connection = [NSURLConnection connectionWithRequest:request delegate:self]; + pass(connection != nil, + "NSURLConnection connectionWithRequest:delegate: with a valid DELETE HTTP " + "request and a delegate returns an instance"); + [self runTest]; + pass(response != nil, "HTTP DELETE gets a NSURLResponse"); + pass(status == 501, "HTTP DELETE gets a 501 response as the server does not handle this method"); + + [request setHTTPMethod:@"WRONGMETHOD"]; + connection = [NSURLConnection connectionWithRequest:request delegate:self]; + pass(connection != nil, + "NSURLConnection connectionWithRequest:delegate: " + "with a invalid WRONGMETHOD HTTP request and a delegate returns an instance"); + [self runTest]; + pass(response == nil, "HTTP WRONGMETHOD doesn't get a NSURLResponse"); + pass(status == 0, + "HTTP WRONGMETHOD fails without an HTTP error code as the NSURLConnection doesn't allow it"); + + return 0; +} + +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error +{ + NSLog(@"%s : %@ %d", __PRETTY_FUNCTION__, [error domain], [error code]); +} + +- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge +{ + [[challenge sender] cancelAuthenticationChallenge:challenge]; +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)newData +{ + NSLog(@"%s : %d octets", __PRETTY_FUNCTION__, [newData length]); + [data appendData:newData]; +} + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)aResponse +{ + NSLog(@"%s : %@", __PRETTY_FUNCTION__, [aResponse description]); + ASSIGN(response, aResponse); + if ([aResponse respondsToSelector:@selector(statusCode)]) + status = [(NSHTTPURLResponse *)aResponse statusCode]; + [data setLength:0]; +} + +- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)newRequest redirectResponse:(NSURLResponse *)response +{ + NSLog(@"%s", __PRETTY_FUNCTION__); + return newRequest; +} + +- (void)connectionDidFinishLoading:(NSURLConnection *)connection +{ + NSLog(@"%s", __PRETTY_FUNCTION__); + done = YES; +} address@hidden + +int main() +{ + NSAutoreleasePool *arp = [NSAutoreleasePool new]; + NSTask *t; + NSString *server; + TestClass *test; + int status = 0; + + server = [[NSFileManager defaultManager] currentDirectoryPath]; + server = [server stringByAppendingPathComponent: @"Helpers"]; + server = [server stringByAppendingPathComponent: @"server.py"]; + + if ([[NSFileManager defaultManager] fileExistsAtPath:server]) { + NS_DURING + { + t = [NSTask launchedTaskWithLaunchPath:@"python" arguments:[NSArray arrayWithObject:server]]; + if (t != nil) { + /* Let the server start up */ + [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 1]]; + test = [TestClass new]; + status = [test runTests]; + [test release]; + [t terminate]; + [t waitUntilExit]; + } else { + NSLog(@"Could run Helpers/server.py script"); + } + } + NS_HANDLER + { + NSLog(@"Exception while trying to run %@", server); + } + NS_ENDHANDLER + + } else { + NSLog(@"Can't find helper at path %@", server); + } + [arp release]; arp = nil; + return status; +}