From bfda0aebcd394020e19174f96dbd2f20324bbe1d Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Thu, 9 Apr 2020 20:48:28 +0100 Subject: [PATCH] Fix CDATA issue Resolves #168 --- .../XMLCoder/Auxiliaries/Box/KeyedBox.swift | 2 +- .../XMLCoder/Auxiliaries/KeyedStorage.swift | 4 +++ Tests/XMLCoderTests/CDATATest.swift | 28 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 Tests/XMLCoderTests/CDATATest.swift diff --git a/Sources/XMLCoder/Auxiliaries/Box/KeyedBox.swift b/Sources/XMLCoder/Auxiliaries/Box/KeyedBox.swift index 9930bfba..a3e8742a 100644 --- a/Sources/XMLCoder/Auxiliaries/Box/KeyedBox.swift +++ b/Sources/XMLCoder/Auxiliaries/Box/KeyedBox.swift @@ -24,7 +24,7 @@ struct KeyedBox { } var value: SimpleBox? { - return elements[""].first as? SimpleBox + return elements.values.first as? SimpleBox } } diff --git a/Sources/XMLCoder/Auxiliaries/KeyedStorage.swift b/Sources/XMLCoder/Auxiliaries/KeyedStorage.swift index 0615ca2f..8d672577 100644 --- a/Sources/XMLCoder/Auxiliaries/KeyedStorage.swift +++ b/Sources/XMLCoder/Auxiliaries/KeyedStorage.swift @@ -24,6 +24,10 @@ struct KeyedStorage { return buffer.map { $0.0 } } + var values: [Value] { + return buffer.map { $0.1 } + } + init(_ sequence: S) where S: Sequence, S.Element == (Key, Value) { buffer = Buffer() keyMap = KeyMap() diff --git a/Tests/XMLCoderTests/CDATATest.swift b/Tests/XMLCoderTests/CDATATest.swift new file mode 100644 index 00000000..b79354c5 --- /dev/null +++ b/Tests/XMLCoderTests/CDATATest.swift @@ -0,0 +1,28 @@ +// +// Created by Max Desiatov on 09/04/2020. +// + +import XCTest +import XMLCoder + +private struct Container: Codable, Equatable { + let value: Int + let data: String +} + +private let xml = + """ + + 42 + + + """.data(using: .utf8)! + +final class CDATATest: XCTestCase { + func testXML() throws { + let decoder = XMLDecoder() + let result = try decoder.decode(Container.self, from: xml) + + XCTAssertEqual(result, Container(value: 42, data: "lorem ipsum")) + } +}