Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • development
  • main
  • integration
  • v1.0.0
  • v1.1.0
  • v1.1.1
  • v1.1.2
  • v1.1.3
  • v1.1.4
  • v1.1.5
10 results

Target

Select target project
No results found
Select Git revision
  • development
  • main
  • integration
  • v1.0.0
  • v1.1.0
  • v1.1.1
  • v1.1.2
  • v1.1.3
  • v1.1.4
  • v1.1.5
10 results
Show changes

Commits on Source 4

6 files
+ 67
61
Compare changes
  • Side-by-side
  • Inline

Files

Original line number Diff line number Diff line
@@ -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
}
+0 −23
Original line number Diff line number Diff line
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)
  }
}
Original line number Diff line number Diff line
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)
  }
}
Original line number Diff line number Diff line
@@ -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
  )
}
+0 −23
Original line number Diff line number Diff 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
    ))
  }
}
Original line number Diff line number Diff line
@@ -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)]"