From eeb81ba1fbcdf1ee337892ffeeaff580b2aa7304 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Tue, 30 Aug 2022 00:52:11 +0100 Subject: [PATCH] Add converJsonNumberToString function --- .../Helpers/ConvertJsonNumberToString.swift | 19 +++++ .../ConvertJsonNumberToStringTests.swift | 84 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 Sources/XXClient/Helpers/ConvertJsonNumberToString.swift create mode 100644 Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift diff --git a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift new file mode 100644 index 00000000..293f1ca6 --- /dev/null +++ b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift @@ -0,0 +1,19 @@ +import Foundation + +func convertJsonNumberToString( + 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 new file mode 100644 index 00000000..db3a4b2e --- /dev/null +++ b/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift @@ -0,0 +1,84 @@ +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" + } + """ + ) + } +} + +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 + ) +} -- GitLab