JSONStreamEncoderTests.swift 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // JSONStreamEncoderTests.swift
  3. // LoopKitTests
  4. //
  5. // Created by Darin Krauss on 8/26/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import XCTest
  9. import LoopKit
  10. class JSONStreamEncoderTests: XCTestCase {
  11. var outputStream: MockOutputStream!
  12. var encoder: JSONStreamEncoder!
  13. override func setUp() {
  14. outputStream = MockOutputStream()
  15. encoder = JSONStreamEncoder(stream: outputStream)
  16. }
  17. func testEmpty() {
  18. XCTAssertNil(encoder.close())
  19. XCTAssertEqual(outputStream.string, "[]")
  20. }
  21. func testMultipleClose() {
  22. XCTAssertNil(encoder.close())
  23. XCTAssertNil(encoder.close())
  24. }
  25. func testCloseError() {
  26. let mockError = MockError()
  27. outputStream.error = mockError
  28. XCTAssertEqual(encoder.close() as! MockError, mockError)
  29. }
  30. func testEncode() {
  31. let values = [MockValue(left: "Alpha", center: 1, right: dateFormatter.date(from: "2020-01-02T03:02:00Z")!),
  32. MockValue(left: "Bravo", center: 2, right: dateFormatter.date(from: "2020-01-02T03:04:00Z")!),
  33. MockValue(left: "Charlie", center: 3, right: dateFormatter.date(from: "2020-01-02T03:06:00Z")!)]
  34. XCTAssertNoThrow(try encoder.encode(values))
  35. XCTAssertNil(encoder.close())
  36. XCTAssertEqual(outputStream.string, """
  37. [
  38. {"center":1,"left":"Alpha","right":"2020-01-02T03:02:00.000Z"},
  39. {"center":2,"left":"Bravo","right":"2020-01-02T03:04:00.000Z"},
  40. {"center":3,"left":"Charlie","right":"2020-01-02T03:06:00.000Z"}
  41. ]
  42. """
  43. )
  44. }
  45. func testEncodeEmpty() {
  46. XCTAssertNoThrow(try encoder.encode([MockValue]()))
  47. XCTAssertNil(encoder.close())
  48. XCTAssertEqual(outputStream.string, "[]")
  49. }
  50. func testEncodeClosed() {
  51. let values = [MockValue(left: "Alpha", center: 1, right: dateFormatter.date(from: "2020-01-02T03:02:00Z")!)]
  52. XCTAssertNil(encoder.close())
  53. XCTAssertThrowsError(try encoder.encode(values)) { error in
  54. XCTAssertEqual(error as! JSONStreamEncoderError, JSONStreamEncoderError.encoderClosed)
  55. }
  56. }
  57. func testEncodeError() {
  58. let values = [MockValue(left: "Alpha", center: 1, right: dateFormatter.date(from: "2020-01-02T03:02:00Z")!)]
  59. let mockError = MockError()
  60. outputStream.error = mockError
  61. XCTAssertThrowsError(try encoder.encode(values)) { error in
  62. XCTAssertEqual(error as! MockError, mockError)
  63. }
  64. }
  65. private let dateFormatter = ISO8601DateFormatter()
  66. }
  67. fileprivate struct MockValue: Codable {
  68. let left: String
  69. let center: Int
  70. let right: Date
  71. }
  72. fileprivate struct MockError: Error, Equatable {}