瀏覽代碼

Adding Custom ParameterEncoding test

Mattt Thompson 11 年之前
父節點
當前提交
66a44b2d1c
共有 2 個文件被更改,包括 41 次插入24 次删除
  1. 14 14
      Source/Alamofire.swift
  2. 27 10
      Tests/ParameterEncodingTests.swift

+ 14 - 14
Source/Alamofire.swift

@@ -39,14 +39,14 @@ public enum ParameterEncoding {
     case URL
     case JSON
     case PropertyList(NSPropertyListFormat, NSPropertyListWriteOptions)
-    case Custom((NSURLRequest, [String: AnyObject]?) -> (NSURLRequest, NSError?))
+    case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSURLRequest, NSError?))
 
     public func encode(URLRequest: URLRequestConvertible, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?) {
         if parameters == nil {
             return (URLRequest.URLRequest, nil)
         }
 
-        var mutableRequest: NSMutableURLRequest! = URLRequest.URLRequest.mutableCopy() as NSMutableURLRequest
+        var mutableURLRequest: NSMutableURLRequest! = URLRequest.URLRequest.mutableCopy() as NSMutableURLRequest
         var error: NSError? = nil
 
         switch self {
@@ -70,34 +70,34 @@ public enum ParameterEncoding {
                 }
             }
 
-            let method = Method.fromRaw(mutableRequest.HTTPMethod)
+            let method = Method.fromRaw(mutableURLRequest.HTTPMethod)
             if method != nil && encodesParametersInURL(method!) {
-                let URLComponents = NSURLComponents(URL: mutableRequest.URL!, resolvingAgainstBaseURL: false)
+                let URLComponents = NSURLComponents(URL: mutableURLRequest.URL!, resolvingAgainstBaseURL: false)
                 URLComponents.query = (URLComponents.query != nil ? URLComponents.query! + "&" : "") + query(parameters!)
-                mutableRequest.URL = URLComponents.URL
+                mutableURLRequest.URL = URLComponents.URL
             } else {
-                if mutableRequest.valueForHTTPHeaderField("Content-Type") == nil {
-                    mutableRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
+                if mutableURLRequest.valueForHTTPHeaderField("Content-Type") == nil {
+                    mutableURLRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
                 }
 
-                mutableRequest.HTTPBody = query(parameters!).dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
+                mutableURLRequest.HTTPBody = query(parameters!).dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
             }
         case .JSON:
             let options = NSJSONWritingOptions.allZeros
             if let data = NSJSONSerialization.dataWithJSONObject(parameters!, options: options, error: &error) {
-                mutableRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
-                mutableRequest.HTTPBody = data
+                mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
+                mutableURLRequest.HTTPBody = data
             }
         case .PropertyList(let (format, options)):
             if let data = NSPropertyListSerialization.dataWithPropertyList(parameters!, format: format, options: options, error: &error) {
-                mutableRequest.setValue("application/x-plist", forHTTPHeaderField: "Content-Type")
-                mutableRequest.HTTPBody = data
+                mutableURLRequest.setValue("application/x-plist", forHTTPHeaderField: "Content-Type")
+                mutableURLRequest.HTTPBody = data
             }
         case .Custom(let closure):
-            return closure(mutableRequest, parameters)
+            return closure(mutableURLRequest, parameters)
         }
 
-        return (mutableRequest, error)
+        return (mutableURLRequest, error)
     }
 
     func queryComponents(key: String, _ value: AnyObject) -> [(String, String)] {

+ 27 - 10
Tests/ParameterEncodingTests.swift

@@ -51,13 +51,13 @@ class AlamofireURLParameterEncodingTestCase: XCTestCase {
     }
 
     func testURLParameterEncodeOneStringKeyStringValueParameterAppendedToQuery() {
-        var mutableRequest = self.request.mutableCopy() as NSMutableURLRequest
-        let URLComponents = NSURLComponents(URL: mutableRequest.URL!, resolvingAgainstBaseURL: false)
+        var mutableURLRequest = self.request.mutableCopy() as NSMutableURLRequest
+        let URLComponents = NSURLComponents(URL: mutableURLRequest.URL!, resolvingAgainstBaseURL: false)
         URLComponents.query = "baz=qux"
-        mutableRequest.URL = URLComponents.URL
+        mutableURLRequest.URL = URLComponents.URL
 
         let parameters = ["foo": "bar"]
-        let (request, error) = self.encoding.encode(mutableRequest, parameters: parameters)
+        let (request, error) = self.encoding.encode(mutableURLRequest, parameters: parameters)
 
         XCTAssertEqual(request.URL.query!, "baz=qux&foo=bar", "query is incorrect")
     }
@@ -138,11 +138,11 @@ class AlamofireURLParameterEncodingTestCase: XCTestCase {
     }
 
     func testURLParameterEncodeGETParametersInURL() {
-        var mutableRequest = self.request.mutableCopy() as NSMutableURLRequest
-        mutableRequest.HTTPMethod = Method.GET.toRaw()
+        var mutableURLRequest = self.request.mutableCopy() as NSMutableURLRequest
+        mutableURLRequest.HTTPMethod = Method.GET.toRaw()
 
         let parameters = ["foo": 1, "bar": 2]
-        let (request, error) = self.encoding.encode(mutableRequest, parameters: parameters)
+        let (request, error) = self.encoding.encode(mutableURLRequest, parameters: parameters)
 
         XCTAssertEqual(request.URL.query!, "bar=2&foo=1", "query is incorrect")
         XCTAssertNil(request.valueForHTTPHeaderField("Content-Type"), "Content-Type should be nil")
@@ -150,11 +150,11 @@ class AlamofireURLParameterEncodingTestCase: XCTestCase {
     }
 
     func testURLParameterEncodePOSTParametersInHTTPBody() {
-        var mutableRequest = self.request.mutableCopy() as NSMutableURLRequest
-        mutableRequest.HTTPMethod = Method.POST.toRaw()
+        var mutableURLRequest = self.request.mutableCopy() as NSMutableURLRequest
+        mutableURLRequest.HTTPMethod = Method.POST.toRaw()
 
         let parameters = ["foo": 1, "bar": 2]
-        let (request, error) = self.encoding.encode(mutableRequest, parameters: parameters)
+        let (request, error) = self.encoding.encode(mutableURLRequest, parameters: parameters)
 
         XCTAssertEqual(NSString(data: request.HTTPBody!, encoding: NSUTF8StringEncoding), "bar=2&foo=1", "HTTPBody is incorrect")
         XCTAssertEqual(request.valueForHTTPHeaderField("Content-Type")!, "application/x-www-form-urlencoded", "Content-Type should be application/x-www-form-urlencoded")
@@ -276,3 +276,20 @@ class AlamofirePropertyListParameterEncodingTestCase: XCTestCase {
         XCTAssert(plist.valueForKey("data") is NSData, "data is not NSData")
     }
 }
+
+class AlamofireCustomParameterEncodingTestCase: XCTestCase {
+    func testCustomParameterEncode() {
+        let encodingClosure: (URLRequestConvertible, [String: AnyObject]?) -> (NSURLRequest, NSError?) = { (URLRequest, parameters) in
+            let mutableURLRequest = URLRequest.URLRequest.mutableCopy() as NSMutableURLRequest
+            mutableURLRequest.setValue("Xcode", forHTTPHeaderField: "User-Agent")
+            return (mutableURLRequest, nil)
+        }
+
+        let encoding: ParameterEncoding = .Custom(encodingClosure)
+
+        let URLRequest = NSURLRequest(URL: NSURL(string: "http://example.com"))
+        let parameters: [String: AnyObject] = [:]
+
+        XCTAssertEqual(encoding.encode(URLRequest, parameters: parameters).0, encodingClosure(URLRequest, parameters).0, "request should be equal")
+    }
+}