|
@@ -852,6 +852,17 @@ final class URLEncodedFormEncoderTests: BaseTestCase {
|
|
|
XCTAssertEqual(result.success, "")
|
|
XCTAssertEqual(result.success, "")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ func testThatNilCanBeEncodedInSynthesizedEncodableByDroppingTheKeyByDefault() {
|
|
|
|
|
+ // Given
|
|
|
|
|
+ let encoder = URLEncodedFormEncoder()
|
|
|
|
|
+
|
|
|
|
|
+ // When
|
|
|
|
|
+ let result = Result<String, Error> { try encoder.encode(OptionalEncodableStruct()) }
|
|
|
|
|
+
|
|
|
|
|
+ // Then
|
|
|
|
|
+ XCTAssertEqual(result.success, "one=one")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
func testThatNilCanBeEncodedAsNull() {
|
|
func testThatNilCanBeEncodedAsNull() {
|
|
|
// Given
|
|
// Given
|
|
|
let encoder = URLEncodedFormEncoder(nilEncoding: .null)
|
|
let encoder = URLEncodedFormEncoder(nilEncoding: .null)
|
|
@@ -864,6 +875,17 @@ final class URLEncodedFormEncoderTests: BaseTestCase {
|
|
|
XCTAssertEqual(result.success, "a=null")
|
|
XCTAssertEqual(result.success, "a=null")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ func testThatNilCanBeEncodedInSynthesizedEncodableAsNull() {
|
|
|
|
|
+ // Given
|
|
|
|
|
+ let encoder = URLEncodedFormEncoder(nilEncoding: .null)
|
|
|
|
|
+
|
|
|
|
|
+ // When
|
|
|
|
|
+ let result = Result<String, Error> { try encoder.encode(OptionalEncodableStruct()) }
|
|
|
|
|
+
|
|
|
|
|
+ // Then
|
|
|
|
|
+ XCTAssertEqual(result.success, "one=one&two=null")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
func testThatNilCanBeEncodedByDroppingTheKey() {
|
|
func testThatNilCanBeEncodedByDroppingTheKey() {
|
|
|
// Given
|
|
// Given
|
|
|
let encoder = URLEncodedFormEncoder(nilEncoding: .dropKey)
|
|
let encoder = URLEncodedFormEncoder(nilEncoding: .dropKey)
|
|
@@ -876,6 +898,17 @@ final class URLEncodedFormEncoderTests: BaseTestCase {
|
|
|
XCTAssertEqual(result.success, "")
|
|
XCTAssertEqual(result.success, "")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ func testThatNilCanBeEncodedInSynthesizedEncodableByDroppingTheKey() {
|
|
|
|
|
+ // Given
|
|
|
|
|
+ let encoder = URLEncodedFormEncoder(nilEncoding: .dropKey)
|
|
|
|
|
+
|
|
|
|
|
+ // When
|
|
|
|
|
+ let result = Result<String, Error> { try encoder.encode(OptionalEncodableStruct()) }
|
|
|
|
|
+
|
|
|
|
|
+ // Then
|
|
|
|
|
+ XCTAssertEqual(result.success, "one=one")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
func testThatNilCanBeEncodedByDroppingTheValue() {
|
|
func testThatNilCanBeEncodedByDroppingTheValue() {
|
|
|
// Given
|
|
// Given
|
|
|
let encoder = URLEncodedFormEncoder(nilEncoding: .dropValue)
|
|
let encoder = URLEncodedFormEncoder(nilEncoding: .dropValue)
|
|
@@ -888,6 +921,17 @@ final class URLEncodedFormEncoderTests: BaseTestCase {
|
|
|
XCTAssertEqual(result.success, "a=")
|
|
XCTAssertEqual(result.success, "a=")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ func testThatNilCanBeEncodedInSynthesizedEncodableByDroppingTheValue() {
|
|
|
|
|
+ // Given
|
|
|
|
|
+ let encoder = URLEncodedFormEncoder(nilEncoding: .dropValue)
|
|
|
|
|
+
|
|
|
|
|
+ // When
|
|
|
|
|
+ let result = Result<String, Error> { try encoder.encode(OptionalEncodableStruct()) }
|
|
|
|
|
+
|
|
|
|
|
+ // Then
|
|
|
|
|
+ XCTAssertEqual(result.success, "one=one&two=")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
func testThatSpacesCanBeEncodedAsPluses() {
|
|
func testThatSpacesCanBeEncodedAsPluses() {
|
|
|
// Given
|
|
// Given
|
|
|
let encoder = URLEncodedFormEncoder(spaceEncoding: .plusReplaced)
|
|
let encoder = URLEncodedFormEncoder(spaceEncoding: .plusReplaced)
|
|
@@ -1093,6 +1137,11 @@ private struct NestedEncodableStruct: Encodable {
|
|
|
let a = "a"
|
|
let a = "a"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+private struct OptionalEncodableStruct: Encodable {
|
|
|
|
|
+ let one = "one"
|
|
|
|
|
+ let two: String? = nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
private class EncodableSuperclass: Encodable {
|
|
private class EncodableSuperclass: Encodable {
|
|
|
let one = "one"
|
|
let one = "one"
|
|
|
let two = 2
|
|
let two = 2
|