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

Merge branch 'development' into dev/macos-support-2

parents f3ebd112 1f03bc49
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!50Add macOS support
......@@ -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
}
import Foundation
public struct DHKey: Equatable {
public init(value: String, fingerprint: UInt64) {
self.value = value
self.fingerprint = fingerprint
}
public var value: String
public var fingerprint: UInt64
}
extension DHKey: Decodable {
enum CodingKeys: String, CodingKey {
case value = "Value"
case fingerprint = "Fingerprint"
}
public static func decode(_ data: Data) throws -> Self {
let data = convertJsonNumberToString(in: data, at: "Value")
return try JSONDecoder().decode(Self.self, from: data)
}
}
import Foundation
public struct GroupMember: Equatable {
public init(id: Data, dhKey: DHKey) {
public init(id: Data) {
self.id = id
self.dhKey = dhKey
}
public var id: Data
public var dhKey: DHKey
}
extension GroupMember: Decodable {
enum CodingKeys: String, CodingKey {
case id = "ID"
case dhKey = "DhKey"
}
public static func decode(_ data: Data) throws -> Self {
let data = convertJsonNumberToString(in: data, at: "Value")
let data = convertJsonNumberToString(in: data, minNumberLength: 19)
return try JSONDecoder().decode(Self.self, from: data)
}
}
extension Array where Element == GroupMember {
public static func decode(_ data: Data) throws -> Self {
let data = convertJsonNumberToString(in: data, at: "Value")
let data = convertJsonNumberToString(in: data, minNumberLength: 19)
return try JSONDecoder().decode(Self.self, from: data)
}
}
......@@ -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
)
}
import CustomDump
import XCTest
@testable import XXClient
final class DHKeyTests: XCTestCase {
func testCoding() throws {
let value = "1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949"
let fingerprint: UInt64 = 15989433043166758754
let jsonString = """
{
"Value": \(value),
"Fingerprint": \(fingerprint)
}
"""
let jsonData = jsonString.data(using: .utf8)!
let model = try DHKey.decode(jsonData)
XCTAssertNoDifference(model, DHKey(
value: value,
fingerprint: fingerprint
))
}
}
......@@ -5,14 +5,12 @@ import XCTest
final class GroupMemberTests: XCTestCase {
func testCoding() throws {
let idB64 = "U4x/lrFkvxuXu59LtHLon1sUhPJSCcnZND6SugndnVID"
let dhKeyValue = "1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949"
let dhKeyFingerprint: UInt64 = 15989433043166758754
let jsonString = """
{
"ID": "\(idB64)",
"DhKey": {
"Value": \(dhKeyValue),
"Fingerprint": \(dhKeyFingerprint)
"Value": 1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949,
"Fingerprint": 15989433043166758754
}
}
"""
......@@ -20,11 +18,7 @@ final class GroupMemberTests: XCTestCase {
let model = try GroupMember.decode(jsonData)
XCTAssertNoDifference(model, GroupMember(
id: Data(base64Encoded: idB64)!,
dhKey: DHKey(
value: dhKeyValue,
fingerprint: dhKeyFingerprint
)
id: Data(base64Encoded: idB64)!
))
let jsonArrayString = "[\(jsonString)]"
......
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