From b532a73ab827d36c56cfed5ae0faa696f463c94e Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sat, 23 Feb 2019 17:29:41 +0000 Subject: [PATCH 1/2] Fix nested attributed intrinsic --- .../Auxiliaries/XMLCoderElement.swift | 4 +- .../AttributedIntrinsicTest.swift | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/Sources/XMLCoder/Auxiliaries/XMLCoderElement.swift b/Sources/XMLCoder/Auxiliaries/XMLCoderElement.swift index db0045c1..0109a2df 100644 --- a/Sources/XMLCoder/Auxiliaries/XMLCoderElement.swift +++ b/Sources/XMLCoder/Auxiliaries/XMLCoderElement.swift @@ -44,6 +44,8 @@ struct XMLCoderElement: Equatable { elements.append(element) } + // FIXME: this should be split into separate functions and + // thoroughtly tested func flatten() -> KeyedBox { let attributes = self.attributes.mapValues { StringBox($0) } @@ -73,7 +75,7 @@ struct XMLCoderElement: Equatable { case var unkeyedBox as UnkeyedBox: unkeyedBox.append(content) result[key] = unkeyedBox - case let box?: + case let box? where !hasValue: result[key] = UnkeyedBox([box, content]) default: result[key] = content diff --git a/Tests/XMLCoderTests/AttributedIntrinsicTest.swift b/Tests/XMLCoderTests/AttributedIntrinsicTest.swift index b64ce0fd..4e3e28e6 100644 --- a/Tests/XMLCoderTests/AttributedIntrinsicTest.swift +++ b/Tests/XMLCoderTests/AttributedIntrinsicTest.swift @@ -52,6 +52,45 @@ private struct FooEmptyKeyed: Codable, DynamicNodeEncoding { } } +private let previewXML = + """ + + + 00:00:17:01 + + """.data(using: .utf8)! + +private struct AppPreview: Codable { + var displayTarget: String + var position: Int + var previewImageTime: PreviewImageTime + + enum CodingKeys: String, CodingKey { + case displayTarget = "display_target" + case position + case previewImageTime = "preview_image_time" + } +} + +private struct PreviewImageTime: Codable, DynamicNodeEncoding { + var format: String + var value: String + + enum CodingKeys: String, CodingKey { + case format + case value + } + + static func nodeEncoding(forKey key: CodingKey) -> XMLEncoder.NodeEncoding { + switch key { + case CodingKeys.format: + return .attribute + default: + return .element + } + } +} + final class AttributedIntrinsicTest: XCTestCase { func testEncode() throws { let encoder = XMLEncoder() @@ -83,9 +122,17 @@ final class AttributedIntrinsicTest: XCTestCase { XCTAssertEqual(foo2.unkeyedValue, 456) } + func testDecodePreview() throws { + let decoder = XMLDecoder() + + let preview = try decoder.decode(AppPreview.self, from: previewXML) + print(preview) + } + static var allTests = [ ("testEncode", testEncode), ("testDecode", testDecode), + ("testDecodePreview", testDecodePreview), ] } From 0d912d0b37f43595d8edfb66f31d7a02be7206f7 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sat, 23 Feb 2019 17:33:56 +0000 Subject: [PATCH 2/2] Cleanup new `AppPreview` test --- Tests/XMLCoderTests/AttributedIntrinsicTest.swift | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Tests/XMLCoderTests/AttributedIntrinsicTest.swift b/Tests/XMLCoderTests/AttributedIntrinsicTest.swift index 4e3e28e6..de9f483f 100644 --- a/Tests/XMLCoderTests/AttributedIntrinsicTest.swift +++ b/Tests/XMLCoderTests/AttributedIntrinsicTest.swift @@ -60,7 +60,7 @@ private let previewXML = """.data(using: .utf8)! -private struct AppPreview: Codable { +private struct AppPreview: Codable, Equatable { var displayTarget: String var position: Int var previewImageTime: PreviewImageTime @@ -72,7 +72,7 @@ private struct AppPreview: Codable { } } -private struct PreviewImageTime: Codable, DynamicNodeEncoding { +private struct PreviewImageTime: Codable, Equatable, DynamicNodeEncoding { var format: String var value: String @@ -126,7 +126,14 @@ final class AttributedIntrinsicTest: XCTestCase { let decoder = XMLDecoder() let preview = try decoder.decode(AppPreview.self, from: previewXML) - print(preview) + XCTAssertEqual(AppPreview( + displayTarget: "iOS-6.5-in", + position: 1, + previewImageTime: PreviewImageTime( + format: "24/999 1000/nonDrop", + value: "00:00:17:01" + ) + ), preview) } static var allTests = [