summaryrefslogtreecommitdiff
path: root/platform/ios/test/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios/test/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m')
-rw-r--r--platform/ios/test/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m54
1 files changed, 54 insertions, 0 deletions
diff --git a/platform/ios/test/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m b/platform/ios/test/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m
new file mode 100644
index 0000000000..03d0e7a6db
--- /dev/null
+++ b/platform/ios/test/OHHTTPStubs/OHHTTPStubs/Sources/OHHTTPStubsResponse+HTTPMessage.m
@@ -0,0 +1,54 @@
+//
+// OHHTTPStubsResponse+HTTPMessage.m
+// OHHTTPStubs
+//
+// Created by Olivier Halligon on 01/09/13.
+// Copyright (c) 2013 AliSoftware. All rights reserved.
+//
+
+#import "OHHTTPStubsResponse+HTTPMessage.h"
+
+@implementation OHHTTPStubsResponse (HTTPMessage)
+
+#pragma mark Building response from HTTP Message Data (dump from "curl -is")
+
++(instancetype)responseWithHTTPMessageData:(NSData*)responseData;
+{
+ NSData *data = [NSData data];
+ NSInteger statusCode = 200;
+ NSDictionary *headers = @{};
+
+ CFHTTPMessageRef httpMessage = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, FALSE);
+ if (httpMessage)
+ {
+ CFHTTPMessageAppendBytes(httpMessage, responseData.bytes, responseData.length);
+
+ data = responseData; // By default
+
+ if (CFHTTPMessageIsHeaderComplete(httpMessage))
+ {
+ statusCode = (NSInteger)CFHTTPMessageGetResponseStatusCode(httpMessage);
+ headers = (__bridge_transfer NSDictionary *)CFHTTPMessageCopyAllHeaderFields(httpMessage);
+ data = (__bridge_transfer NSData *)CFHTTPMessageCopyBody(httpMessage);
+ }
+ CFRelease(httpMessage);
+ }
+
+ return [self responseWithData:data
+ statusCode:(int)statusCode
+ headers:headers];
+}
+
++(instancetype)responseNamed:(NSString*)responseName
+ inBundle:(NSBundle*)responsesBundle
+{
+ NSURL *responseURL = [responsesBundle?:[NSBundle bundleForClass:self.class] URLForResource:responseName
+ withExtension:@"response"];
+
+ NSData *responseData = [NSData dataWithContentsOfURL:responseURL];
+ NSAssert(responseData, @"Could not find HTTP response named '%@' in bundle '%@'", responseName, responsesBundle);
+
+ return [self responseWithHTTPMessageData:responseData];
+}
+
+@end