From a08505ecd814d86719c18dfd87496d5d725eac98 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Tue, 30 Aug 2022 11:06:01 +0100 Subject: [PATCH] Update convertJsonNumberToString utility --- .../Helpers/ConvertJsonNumberToString.swift | 18 ++++++++ .../ConvertJsonNumberToStringTests.swift | 43 +++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift index 293f1ca6..8390ba1c 100644 --- a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift +++ b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift @@ -17,3 +17,21 @@ func convertJsonNumberToString( } return output } + +func convertJsonNumberToString( + in input: Data, + minNumberLength: Int +) -> Data { + guard var string = String(data: input, encoding: .utf8) else { + return input + } + string = string.replacingOccurrences( + of: #":( *)([0-9]{\#(minNumberLength),})( *)(,*)"#, + with: #":$1"$2"$3$4"#, + 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 index db3a4b2e..4fc1ecd7 100644 --- a/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift +++ b/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift @@ -59,6 +59,28 @@ final class ConvertJsonNumberToStringTests: XCTestCase { } """ ) + + 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" + } + """ + ) } } @@ -82,3 +104,24 @@ private func assert( 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 + ) +} -- GitLab