Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
white49
Alamofire
提交
238ebc3f
A
Alamofire
项目概览
white49
/
Alamofire
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
Alamofire
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
238ebc3f
编写于
10月 31, 2015
作者:
C
Christian Noon
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #889 from Alamofire/feature/204_support
Feature - Added 204 Support to Response Serializers
上级
7582758d
e5dfdb1a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
183 addition
and
11 deletion
+183
-11
Source/ResponseSerialization.swift
Source/ResponseSerialization.swift
+15
-7
Tests/ResponseSerializationTests.swift
Tests/ResponseSerializationTests.swift
+168
-4
未找到文件。
Source/ResponseSerialization.swift
浏览文件 @
238ebc3f
...
...
@@ -145,11 +145,13 @@ extension Request {
- returns: A data response serializer.
*/
public
static
func
dataResponseSerializer
()
->
ResponseSerializer
<
NSData
,
NSError
>
{
return
ResponseSerializer
{
_
,
_
,
data
,
error
in
return
ResponseSerializer
{
_
,
response
,
data
,
error
in
guard
error
==
nil
else
{
return
.
Failure
(
error
!
)
}
guard
let
validData
=
data
where
validData
.
length
>
0
else
{
let
failureReason
=
"Data could not be serialized. Input data was nil or zero length."
if
let
response
=
response
where
response
.
statusCode
==
204
{
return
.
Success
(
NSData
())
}
guard
let
validData
=
data
else
{
let
failureReason
=
"Data could not be serialized. Input data was nil."
let
error
=
Error
.
errorWithCode
(
.
DataSerializationFailed
,
failureReason
:
failureReason
)
return
.
Failure
(
error
)
}
...
...
@@ -190,8 +192,10 @@ extension Request {
return
ResponseSerializer
{
_
,
response
,
data
,
error
in
guard
error
==
nil
else
{
return
.
Failure
(
error
!
)
}
guard
let
validData
=
data
where
validData
.
length
>
0
else
{
let
failureReason
=
"String could not be serialized. Input data was nil or zero length."
if
let
response
=
response
where
response
.
statusCode
==
204
{
return
.
Success
(
""
)
}
guard
let
validData
=
data
else
{
let
failureReason
=
"String could not be serialized. Input data was nil."
let
error
=
Error
.
errorWithCode
(
.
StringSerializationFailed
,
failureReason
:
failureReason
)
return
.
Failure
(
error
)
}
...
...
@@ -252,9 +256,11 @@ extension Request {
options
options
:
NSJSONReadingOptions
=
.
AllowFragments
)
->
ResponseSerializer
<
AnyObject
,
NSError
>
{
return
ResponseSerializer
{
_
,
_
,
data
,
error
in
return
ResponseSerializer
{
_
,
response
,
data
,
error
in
guard
error
==
nil
else
{
return
.
Failure
(
error
!
)
}
if
let
response
=
response
where
response
.
statusCode
==
204
{
return
.
Success
(
NSNull
())
}
guard
let
validData
=
data
where
validData
.
length
>
0
else
{
let
failureReason
=
"JSON could not be serialized. Input data was nil or zero length."
let
error
=
Error
.
errorWithCode
(
.
JSONSerializationFailed
,
failureReason
:
failureReason
)
...
...
@@ -306,9 +312,11 @@ extension Request {
options
options
:
NSPropertyListReadOptions
=
NSPropertyListReadOptions
())
->
ResponseSerializer
<
AnyObject
,
NSError
>
{
return
ResponseSerializer
{
_
,
_
,
data
,
error
in
return
ResponseSerializer
{
_
,
response
,
data
,
error
in
guard
error
==
nil
else
{
return
.
Failure
(
error
!
)
}
if
let
response
=
response
where
response
.
statusCode
==
204
{
return
.
Success
(
NSNull
())
}
guard
let
validData
=
data
where
validData
.
length
>
0
else
{
let
failureReason
=
"Property list could not be serialized. Input data was nil or zero length."
let
error
=
Error
.
errorWithCode
(
.
PropertyListSerializationFailed
,
failureReason
:
failureReason
)
...
...
Tests/ResponseSerializationTests.swift
浏览文件 @
238ebc3f
...
...
@@ -83,6 +83,47 @@ class ResponseSerializationTestCase: BaseTestCase {
}
}
func
testThatDataResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
dataResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
200
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isFailure
,
"result is failure should be true"
)
XCTAssertNil
(
result
.
value
,
"result value should be nil"
)
XCTAssertNotNil
(
result
.
error
,
"result error should not be nil"
)
if
let
error
=
result
.
error
{
XCTAssertEqual
(
error
.
domain
,
Error
.
Domain
,
"error domain should match expected value"
)
XCTAssertEqual
(
error
.
code
,
Error
.
Code
.
DataSerializationFailed
.
rawValue
,
"error code should match expected value"
)
}
else
{
XCTFail
(
"error should not be nil"
)
}
}
func
testThatDataResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
dataResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
204
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isSuccess
,
"result is success should be true"
)
XCTAssertNotNil
(
result
.
value
,
"result value should not be nil"
)
XCTAssertNil
(
result
.
error
,
"result error should be nil"
)
if
let
data
=
result
.
value
{
XCTAssertEqual
(
data
.
length
,
0
,
"data length should be zero"
)
}
}
// MARK: - String Response Serializer Tests
func
testThatStringResponseSerializerFailsWhenDataIsNil
()
{
...
...
@@ -105,7 +146,7 @@ class ResponseSerializationTestCase: BaseTestCase {
}
}
func
testThatStringResponseSerializer
Fail
sWhenDataIsEmpty
()
{
func
testThatStringResponseSerializer
Succeed
sWhenDataIsEmpty
()
{
// Given
let
serializer
=
Request
.
stringResponseSerializer
()
...
...
@@ -113,9 +154,9 @@ class ResponseSerializationTestCase: BaseTestCase {
let
result
=
serializer
.
serializeResponse
(
nil
,
nil
,
NSData
(),
nil
)
// Then
XCTAssertTrue
(
result
.
is
Failure
,
"result is failure
should be true"
)
XCTAssertN
il
(
result
.
value
,
"result value should
be nil"
)
XCTAssertN
otNil
(
result
.
error
,
"result error should not
be nil"
)
XCTAssertTrue
(
result
.
is
Success
,
"result is success
should be true"
)
XCTAssertN
otNil
(
result
.
value
,
"result value should not
be nil"
)
XCTAssertN
il
(
result
.
error
,
"result error should
be nil"
)
}
func
testThatStringResponseSerializerSucceedsWithUTF8DataAndNoProvidedEncoding
()
{
...
...
@@ -231,6 +272,47 @@ class ResponseSerializationTestCase: BaseTestCase {
}
}
func
testThatStringResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
stringResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
200
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isFailure
,
"result is failure should be true"
)
XCTAssertNil
(
result
.
value
,
"result value should be nil"
)
XCTAssertNotNil
(
result
.
error
,
"result error should not be nil"
)
if
let
error
=
result
.
error
{
XCTAssertEqual
(
error
.
domain
,
Error
.
Domain
,
"error domain should match expected value"
)
XCTAssertEqual
(
error
.
code
,
Error
.
Code
.
StringSerializationFailed
.
rawValue
,
"error code should match expected value"
)
}
else
{
XCTFail
(
"error should not be nil"
)
}
}
func
testThatStringResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
stringResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
204
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isSuccess
,
"result is success should be true"
)
XCTAssertNotNil
(
result
.
value
,
"result value should not be nil"
)
XCTAssertNil
(
result
.
error
,
"result error should be nil"
)
if
let
string
=
result
.
value
{
XCTAssertEqual
(
string
,
""
,
"string should be equal to empty string"
)
}
}
// MARK: - JSON Response Serializer Tests
func
testThatJSONResponseSerializerFailsWhenDataIsNil
()
{
...
...
@@ -328,6 +410,47 @@ class ResponseSerializationTestCase: BaseTestCase {
}
}
func
testThatJSONResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
JSONResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
200
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isFailure
,
"result is failure should be true"
)
XCTAssertNil
(
result
.
value
,
"result value should be nil"
)
XCTAssertNotNil
(
result
.
error
,
"result error should not be nil"
)
if
let
error
=
result
.
error
{
XCTAssertEqual
(
error
.
domain
,
Error
.
Domain
,
"error domain should match expected value"
)
XCTAssertEqual
(
error
.
code
,
Error
.
Code
.
JSONSerializationFailed
.
rawValue
,
"error code should match expected value"
)
}
else
{
XCTFail
(
"error should not be nil"
)
}
}
func
testThatJSONResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
JSONResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
204
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isSuccess
,
"result is success should be true"
)
XCTAssertNotNil
(
result
.
value
,
"result value should not be nil"
)
XCTAssertNil
(
result
.
error
,
"result error should be nil"
)
if
let
json
=
result
.
value
as?
NSNull
{
XCTAssertEqual
(
json
,
NSNull
(),
"json should be equal to NSNull"
)
}
}
// MARK: - Property List Response Serializer Tests
func
testThatPropertyListResponseSerializerFailsWhenDataIsNil
()
{
...
...
@@ -424,4 +547,45 @@ class ResponseSerializationTestCase: BaseTestCase {
XCTFail
(
"error should not be nil"
)
}
}
func
testThatPropertyListResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
propertyListResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
200
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isFailure
,
"result is failure should be true"
)
XCTAssertNil
(
result
.
value
,
"result value should be nil"
)
XCTAssertNotNil
(
result
.
error
,
"result error should not be nil"
)
if
let
error
=
result
.
error
{
XCTAssertEqual
(
error
.
domain
,
Error
.
Domain
,
"error domain should match expected value"
)
XCTAssertEqual
(
error
.
code
,
Error
.
Code
.
PropertyListSerializationFailed
.
rawValue
,
"error code should match expected value"
)
}
else
{
XCTFail
(
"error should not be nil"
)
}
}
func
testThatPropertyListResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode
()
{
// Given
let
serializer
=
Request
.
propertyListResponseSerializer
()
let
URL
=
NSURL
(
string
:
"https://httpbin.org/get"
)
!
let
response
=
NSHTTPURLResponse
(
URL
:
URL
,
statusCode
:
204
,
HTTPVersion
:
"HTTP/1.1"
,
headerFields
:
nil
)
// When
let
result
=
serializer
.
serializeResponse
(
nil
,
response
,
nil
,
nil
)
// Then
XCTAssertTrue
(
result
.
isSuccess
,
"result is success should be true"
)
XCTAssertNotNil
(
result
.
value
,
"result value should not be nil"
)
XCTAssertNil
(
result
.
error
,
"result error should be nil"
)
if
let
plist
=
result
.
value
as?
NSNull
{
XCTAssertEqual
(
plist
,
NSNull
(),
"plist should be equal to NSNull"
)
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录