From 740a9b57dcc5ac388fa61864579eb6c45dfd2bbd Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Tue, 30 Aug 2022 12:09:10 +0100 Subject: [PATCH] Update JSONHelpers --- ...NumberToString.swift => JSONHelpers.swift} | 18 ++ .../ConvertJsonNumberToStringTests.swift | 127 ----------- .../Helpers/JSONHelpersTests.swift | 214 ++++++++++++++++++ 3 files changed, 232 insertions(+), 127 deletions(-) rename Sources/XXClient/Helpers/{ConvertJsonNumberToString.swift => JSONHelpers.swift} (67%) delete mode 100644 Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift create mode 100644 Tests/XXClientTests/Helpers/JSONHelpersTests.swift diff --git a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift b/Sources/XXClient/Helpers/JSONHelpers.swift similarity index 67% rename from Sources/XXClient/Helpers/ConvertJsonNumberToString.swift rename to Sources/XXClient/Helpers/JSONHelpers.swift index 8390ba1c..5653752d 100644 --- a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift +++ b/Sources/XXClient/Helpers/JSONHelpers.swift @@ -35,3 +35,21 @@ func convertJsonNumberToString( } 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 +} diff --git a/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift b/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift deleted file mode 100644 index 4fc1ecd7..00000000 --- a/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift +++ /dev/null @@ -1,127 +0,0 @@ -import CustomDump -import XCTest -@testable import XXClient - -final class ConvertJsonNumberToStringTests: XCTestCase { - func testConverting() { - assert( - input: #"{"number":1234567890,"text":"hello"}"#, - key: "number", - expected: #"{"number":"1234567890","text":"hello"}"# - ) - - assert( - input: #"{"text":"hello","number":1234567890}"#, - key: "number", - expected: #"{"text":"hello","number":"1234567890"}"# - ) - - assert( - input: #"{ "number" : 1234567890 , "text" : "hello" }"#, - key: "number", - expected: #"{ "number" : "1234567890" , "text" : "hello" }"# - ) - - assert( - input: #"{ "text" : "hello" , "number" : 1234567890 }"#, - key: "number", - expected: #"{ "text" : "hello" , "number" : "1234567890" }"# - ) - - assert( - input: """ - { - "number": 1234567890, - "text": "hello" - } - """, - key: "number", - expected: """ - { - "number": "1234567890", - "text": "hello" - } - """ - ) - - assert( - input: """ - { - "text": "hello", - "number": 1234567890 - } - """, - key: "number", - expected: """ - { - "text": "hello", - "number": "1234567890" - } - """ - ) - - assert( - input: """ - { - "text": "hello", - "number1": 123456789, - "number2": 1234567890, - "number3": 123456789, - "number4": 1234567890 - } - """, - minNumberLength: 10, - expected: """ - { - "text": "hello", - "number1": 123456789, - "number2": "1234567890", - "number3": 123456789, - "number4": "1234567890" - } - """ - ) - } -} - -private func assert( - input: String, - key: String, - expected: String, - file: StaticString = #file, - line: UInt = #line -) { - XCTAssertNoDifference( - String( - data: convertJsonNumberToString( - in: input.data(using: .utf8)!, - at: key - ), - encoding: .utf8 - )!, - expected, - file: file, - line: line - ) -} - -private func assert( - input: String, - minNumberLength: Int, - expected: String, - file: StaticString = #file, - line: UInt = #line -) { - XCTAssertNoDifference( - String( - data: convertJsonNumberToString( - in: input.data(using: .utf8)!, - minNumberLength: minNumberLength - ), - encoding: .utf8 - )!, - expected, - file: file, - line: line - ) -} diff --git a/Tests/XXClientTests/Helpers/JSONHelpersTests.swift b/Tests/XXClientTests/Helpers/JSONHelpersTests.swift new file mode 100644 index 00000000..20a90116 --- /dev/null +++ b/Tests/XXClientTests/Helpers/JSONHelpersTests.swift @@ -0,0 +1,214 @@ +import CustomDump +import XCTest +@testable import XXClient + +final class JSONHelpersTests: XCTestCase { + func testConvertingNumberToStringByKey() { + assertConvertingJsonNumberToString( + input: #"{"number":1234567890,"text":"hello"}"#, + key: "number", + expected: #"{"number":"1234567890","text":"hello"}"# + ) + + assertConvertingJsonNumberToString( + input: #"{"text":"hello","number":1234567890}"#, + key: "number", + expected: #"{"text":"hello","number":"1234567890"}"# + ) + + assertConvertingJsonNumberToString( + input: #"{ "number" : 1234567890 , "text" : "hello" }"#, + key: "number", + expected: #"{ "number" : "1234567890" , "text" : "hello" }"# + ) + + assertConvertingJsonNumberToString( + input: #"{ "text" : "hello" , "number" : 1234567890 }"#, + key: "number", + expected: #"{ "text" : "hello" , "number" : "1234567890" }"# + ) + + assertConvertingJsonNumberToString( + input: """ + { + "number": 1234567890, + "text": "hello" + } + """, + key: "number", + expected: """ + { + "number": "1234567890", + "text": "hello" + } + """ + ) + + assertConvertingJsonNumberToString( + input: """ + { + "text": "hello", + "number": 1234567890 + } + """, + key: "number", + expected: """ + { + "text": "hello", + "number": "1234567890" + } + """ + ) + } + + func testConvertingNumberToStringByLength() { + 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" + } + """ + ) + + 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 assertConvertingJsonNumberToString( + input: String, + key: String, + expected: String, + file: StaticString = #file, + line: UInt = #line +) { + XCTAssertNoDifference( + String( + data: convertJsonNumberToString( + in: input.data(using: .utf8)!, + at: key + ), + encoding: .utf8 + )!, + expected, + file: file, + line: line + ) +} + +private func assertConvertingJsonNumberToString( + input: String, + minNumberLength: Int, + expected: String, + file: StaticString = #file, + line: UInt = #line +) { + XCTAssertNoDifference( + String( + data: convertJsonNumberToString( + in: input.data(using: .utf8)!, + minNumberLength: minNumberLength + ), + encoding: .utf8 + )!, + expected, + file: file, + 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 + ) +} -- GitLab