Skip to content
Snippets Groups Projects
Commit 740a9b57 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Update JSONHelpers

parent 1f03bc49
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!52Workaround for big numbers in JSONs
...@@ -35,3 +35,21 @@ func convertJsonNumberToString( ...@@ -35,3 +35,21 @@ func convertJsonNumberToString(
} }
return output return output
} }
func convertJsonStringToNumber(
in input: Data,
at key: String
) -> Data {
guard var string = String(data: input, encoding: .utf8) else {
return input
}
string = string.replacingOccurrences(
of: #""\#(key)"( *):( *)"([0-9]+)"( *)(,*)"#,
with: #""\#(key)"$1:$2$3$4$5"#,
options: [.regularExpression]
)
guard let output = string.data(using: .utf8) else {
return input
}
return output
}
...@@ -2,33 +2,33 @@ import CustomDump ...@@ -2,33 +2,33 @@ import CustomDump
import XCTest import XCTest
@testable import XXClient @testable import XXClient
final class ConvertJsonNumberToStringTests: XCTestCase { final class JSONHelpersTests: XCTestCase {
func testConverting() { func testConvertingNumberToStringByKey() {
assert( assertConvertingJsonNumberToString(
input: #"{"number":1234567890,"text":"hello"}"#, input: #"{"number":1234567890,"text":"hello"}"#,
key: "number", key: "number",
expected: #"{"number":"1234567890","text":"hello"}"# expected: #"{"number":"1234567890","text":"hello"}"#
) )
assert( assertConvertingJsonNumberToString(
input: #"{"text":"hello","number":1234567890}"#, input: #"{"text":"hello","number":1234567890}"#,
key: "number", key: "number",
expected: #"{"text":"hello","number":"1234567890"}"# expected: #"{"text":"hello","number":"1234567890"}"#
) )
assert( assertConvertingJsonNumberToString(
input: #"{ "number" : 1234567890 , "text" : "hello" }"#, input: #"{ "number" : 1234567890 , "text" : "hello" }"#,
key: "number", key: "number",
expected: #"{ "number" : "1234567890" , "text" : "hello" }"# expected: #"{ "number" : "1234567890" , "text" : "hello" }"#
) )
assert( assertConvertingJsonNumberToString(
input: #"{ "text" : "hello" , "number" : 1234567890 }"#, input: #"{ "text" : "hello" , "number" : 1234567890 }"#,
key: "number", key: "number",
expected: #"{ "text" : "hello" , "number" : "1234567890" }"# expected: #"{ "text" : "hello" , "number" : "1234567890" }"#
) )
assert( assertConvertingJsonNumberToString(
input: """ input: """
{ {
"number": 1234567890, "number": 1234567890,
...@@ -44,7 +44,7 @@ final class ConvertJsonNumberToStringTests: XCTestCase { ...@@ -44,7 +44,7 @@ final class ConvertJsonNumberToStringTests: XCTestCase {
""" """
) )
assert( assertConvertingJsonNumberToString(
input: """ input: """
{ {
"text": "hello", "text": "hello",
...@@ -59,8 +59,10 @@ final class ConvertJsonNumberToStringTests: XCTestCase { ...@@ -59,8 +59,10 @@ final class ConvertJsonNumberToStringTests: XCTestCase {
} }
""" """
) )
}
assert( func testConvertingNumberToStringByLength() {
assertConvertingJsonNumberToString(
input: """ input: """
{ {
"text": "hello", "text": "hello",
...@@ -81,10 +83,74 @@ final class ConvertJsonNumberToStringTests: XCTestCase { ...@@ -81,10 +83,74 @@ final class ConvertJsonNumberToStringTests: XCTestCase {
} }
""" """
) )
assertConvertingJsonNumberToString(
input: #"{"text":"hello","number1":123456789,"number2":1234567890,"number3":123456789,"number4":1234567890}"#,
minNumberLength: 10,
expected: #"{"text":"hello","number1":123456789,"number2":"1234567890","number3":123456789,"number4":"1234567890"}"#
)
}
func testConvertingStringToNumber() {
assertConvertingJsonStringToNumber(
input: #"{"number":"1234567890","text":"hello"}"#,
key: "number",
expected: #"{"number":1234567890,"text":"hello"}"#
)
assertConvertingJsonStringToNumber(
input: #"{"text":"hello","number":"1234567890"}"#,
key: "number",
expected: #"{"text":"hello","number":1234567890}"#
)
assertConvertingJsonStringToNumber(
input: #"{ "number" : "1234567890" , "text" : "hello" }"#,
key: "number",
expected: #"{ "number" : 1234567890 , "text" : "hello" }"#
)
assertConvertingJsonStringToNumber(
input: #"{ "text" : "hello" , "number" : "1234567890" }"#,
key: "number",
expected: #"{ "text" : "hello" , "number" : 1234567890 }"#
)
assertConvertingJsonStringToNumber(
input: """
{
"number": "1234567890",
"text": "hello"
}
""",
key: "number",
expected: """
{
"number": 1234567890,
"text": "hello"
}
"""
)
assertConvertingJsonStringToNumber(
input: """
{
"text": "hello",
"number": "1234567890"
}
""",
key: "number",
expected: """
{
"text": "hello",
"number": 1234567890
}
"""
)
} }
} }
private func assert( private func assertConvertingJsonNumberToString(
input: String, input: String,
key: String, key: String,
expected: String, expected: String,
...@@ -105,7 +171,7 @@ private func assert( ...@@ -105,7 +171,7 @@ private func assert(
) )
} }
private func assert( private func assertConvertingJsonNumberToString(
input: String, input: String,
minNumberLength: Int, minNumberLength: Int,
expected: String, expected: String,
...@@ -125,3 +191,24 @@ private func assert( ...@@ -125,3 +191,24 @@ private func assert(
line: line line: line
) )
} }
private func assertConvertingJsonStringToNumber(
input: String,
key: String,
expected: String,
file: StaticString = #file,
line: UInt = #line
) {
XCTAssertNoDifference(
String(
data: convertJsonStringToNumber(
in: input.data(using: .utf8)!,
at: key
),
encoding: .utf8
)!,
expected,
file: file,
line: line
)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment