From fb07143ba83a8ece5f7ddefb175d872900833098 Mon Sep 17 00:00:00 2001 From: Vincent Esche Date: Sun, 23 Dec 2018 10:01:17 +0100 Subject: [PATCH] Cleanup throwing unit tests & add tests for missing values (#40) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove unnecessary `do … catch` blocks in favor of `throws` marker * Add test cases for missing value in minimal tests suite * Fix formatting --- Tests/XMLCoderTests/BooksTest.swift | 50 +++++------ Tests/XMLCoderTests/BreakfastTest.swift | 20 ++--- Tests/XMLCoderTests/CDTest.swift | 25 +++--- Tests/XMLCoderTests/Minimal/BoolTests.swift | 69 +++++++-------- Tests/XMLCoderTests/Minimal/DataTests.swift | 69 +++++++-------- Tests/XMLCoderTests/Minimal/DateTests.swift | 69 +++++++-------- .../XMLCoderTests/Minimal/DecimalTests.swift | 69 +++++++-------- Tests/XMLCoderTests/Minimal/FloatTests.swift | 69 +++++++-------- Tests/XMLCoderTests/Minimal/IntTests.swift | 69 +++++++-------- Tests/XMLCoderTests/Minimal/KeyedTests.swift | 85 +++++++------------ Tests/XMLCoderTests/Minimal/NullTests.swift | 48 +++++------ Tests/XMLCoderTests/Minimal/StringTests.swift | 69 +++++++-------- Tests/XMLCoderTests/Minimal/UIntTests.swift | 69 +++++++-------- Tests/XMLCoderTests/Minimal/URLTests.swift | 69 +++++++-------- .../XMLCoderTests/Minimal/UnkeyedTests.swift | 77 +++++++---------- Tests/XMLCoderTests/NoteTest.swift | 33 +++---- Tests/XMLCoderTests/PlantTest.swift | 24 +++--- Tests/XMLCoderTests/RJITest.swift | 41 +++------ Tests/XMLCoderTests/RelationshipsTest.swift | 14 ++- 19 files changed, 473 insertions(+), 565 deletions(-) diff --git a/Tests/XMLCoderTests/BooksTest.swift b/Tests/XMLCoderTests/BooksTest.swift index 078f044c..d8e6c8d9 100644 --- a/Tests/XMLCoderTests/BooksTest.swift +++ b/Tests/XMLCoderTests/BooksTest.swift @@ -187,49 +187,41 @@ final class BooksTest: XCTestCase { return formatter }() - func testBookXML() { + func testBookXML() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() decoder.dateDecodingStrategy = .formatted(formatter) encoder.dateEncodingStrategy = .formatted(formatter) - do { - let book1 = try decoder.decode(Book.self, from: bookXML) - XCTAssertEqual(book1.publishDate, - Date(timeIntervalSince1970: 970_358_400)) - - let data = try encoder.encode(book1, withRootKey: "book", - header: XMLHeader(version: 1.0, - encoding: "UTF-8")) - let book2 = try decoder.decode(Book.self, from: data) - XCTAssertEqual(book1, book2) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let book1 = try decoder.decode(Book.self, from: bookXML) + XCTAssertEqual(book1.publishDate, + Date(timeIntervalSince1970: 970_358_400)) + + let data = try encoder.encode(book1, withRootKey: "book", + header: XMLHeader(version: 1.0, + encoding: "UTF-8")) + let book2 = try decoder.decode(Book.self, from: data) + XCTAssertEqual(book1, book2) } - func testCatalogXML() { + func testCatalogXML() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() decoder.dateDecodingStrategy = .formatted(formatter) encoder.dateEncodingStrategy = .formatted(formatter) - do { - let catalog1 = try decoder.decode(Catalog.self, from: catalogXML) - XCTAssertEqual(catalog1.books.count, 12) - XCTAssertEqual(catalog1.books[0].publishDate, - Date(timeIntervalSince1970: 970_358_400)) - - let data = try encoder.encode(catalog1, withRootKey: "catalog", - header: XMLHeader(version: 1.0, - encoding: "UTF-8")) - let catalog2 = try decoder.decode(Catalog.self, from: data) - XCTAssertEqual(catalog1, catalog2) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let catalog1 = try decoder.decode(Catalog.self, from: catalogXML) + XCTAssertEqual(catalog1.books.count, 12) + XCTAssertEqual(catalog1.books[0].publishDate, + Date(timeIntervalSince1970: 970_358_400)) + + let data = try encoder.encode(catalog1, withRootKey: "catalog", + header: XMLHeader(version: 1.0, + encoding: "UTF-8")) + let catalog2 = try decoder.decode(Catalog.self, from: data) + XCTAssertEqual(catalog1, catalog2) } static var allTests = [ diff --git a/Tests/XMLCoderTests/BreakfastTest.swift b/Tests/XMLCoderTests/BreakfastTest.swift index 6a8803d0..17ebea24 100644 --- a/Tests/XMLCoderTests/BreakfastTest.swift +++ b/Tests/XMLCoderTests/BreakfastTest.swift @@ -57,22 +57,18 @@ private struct Food: Codable, Equatable { } final class BreakfastTest: XCTestCase { - func testXML() { + func testXML() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() - do { - let menu1 = try decoder.decode(Menu.self, from: xml) - XCTAssertEqual(menu1.food.count, 5) + let menu1 = try decoder.decode(Menu.self, from: xml) + XCTAssertEqual(menu1.food.count, 5) - let data = try encoder.encode(menu1, withRootKey: "breakfast_menu", - header: XMLHeader(version: 1.0, - encoding: "UTF-8")) - let menu2 = try decoder.decode(Menu.self, from: data) - XCTAssertEqual(menu1, menu2) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let data = try encoder.encode(menu1, withRootKey: "breakfast_menu", + header: XMLHeader(version: 1.0, + encoding: "UTF-8")) + let menu2 = try decoder.decode(Menu.self, from: data) + XCTAssertEqual(menu1, menu2) } static var allTests = [ diff --git a/Tests/XMLCoderTests/CDTest.swift b/Tests/XMLCoderTests/CDTest.swift index 26885a5f..8734ce8c 100644 --- a/Tests/XMLCoderTests/CDTest.swift +++ b/Tests/XMLCoderTests/CDTest.swift @@ -44,26 +44,21 @@ private let lastCD = CD(title: "Unchain my heart", year: 1987) final class CDTest: XCTestCase { - func testXML() { + func testXML() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() - do { - let cdCatalog1 = try decoder.decode(CDCatalog.self, - from: cdCatalogXML) - XCTAssertEqual(cdCatalog1.cds.count, 26) - XCTAssertEqual(cdCatalog1.cds[25], lastCD) + let cdCatalog1 = try decoder.decode(CDCatalog.self, + from: cdCatalogXML) + XCTAssertEqual(cdCatalog1.cds.count, 26) + XCTAssertEqual(cdCatalog1.cds[25], lastCD) - let data = try encoder.encode(cdCatalog1, withRootKey: "CATALOG", - header: XMLHeader(version: 1.0, - encoding: "UTF-8")) - let cdCatalog2 = try decoder.decode(CDCatalog.self, from: data) + let data = try encoder.encode(cdCatalog1, withRootKey: "CATALOG", + header: XMLHeader(version: 1.0, + encoding: "UTF-8")) + let cdCatalog2 = try decoder.decode(CDCatalog.self, from: data) - XCTAssertEqual(cdCatalog1, cdCatalog2) - - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + XCTAssertEqual(cdCatalog1, cdCatalog2) } static var allTests = [ diff --git a/Tests/XMLCoderTests/Minimal/BoolTests.swift b/Tests/XMLCoderTests/Minimal/BoolTests.swift index 0d0b2a32..1d9803aa 100644 --- a/Tests/XMLCoderTests/Minimal/BoolTests.swift +++ b/Tests/XMLCoderTests/Minimal/BoolTests.swift @@ -20,7 +20,16 @@ class BoolTests: XCTestCase { (true, "true"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -29,48 +38,40 @@ class BoolTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/DataTests.swift b/Tests/XMLCoderTests/Minimal/DataTests.swift index 59ad255f..695d3e3a 100644 --- a/Tests/XMLCoderTests/Minimal/DataTests.swift +++ b/Tests/XMLCoderTests/Minimal/DataTests.swift @@ -21,7 +21,16 @@ class DataTests: XCTestCase { (Data(base64Encoded: "bG9yZW0gaXBzdW0=")!, "bG9yZW0gaXBzdW0="), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -30,48 +39,40 @@ class DataTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/DateTests.swift b/Tests/XMLCoderTests/Minimal/DateTests.swift index 14aca3a9..ec73ab7e 100644 --- a/Tests/XMLCoderTests/Minimal/DateTests.swift +++ b/Tests/XMLCoderTests/Minimal/DateTests.swift @@ -19,7 +19,16 @@ class DateTests: XCTestCase { (Date(timeIntervalSince1970: 0.0), "0.0"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -30,25 +39,21 @@ class DateTests: XCTestCase { encoder.dateEncodingStrategy = .secondsSince1970 for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -57,23 +62,19 @@ class DateTests: XCTestCase { encoder.dateEncodingStrategy = .secondsSince1970 for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/DecimalTests.swift b/Tests/XMLCoderTests/Minimal/DecimalTests.swift index ed835869..6cdcc5a2 100644 --- a/Tests/XMLCoderTests/Minimal/DecimalTests.swift +++ b/Tests/XMLCoderTests/Minimal/DecimalTests.swift @@ -21,7 +21,16 @@ class DecimalTests: XCTestCase { (Decimal(12.34), "12.34"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -30,48 +39,40 @@ class DecimalTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/FloatTests.swift b/Tests/XMLCoderTests/Minimal/FloatTests.swift index d76aeab4..5455e268 100644 --- a/Tests/XMLCoderTests/Minimal/FloatTests.swift +++ b/Tests/XMLCoderTests/Minimal/FloatTests.swift @@ -21,7 +21,16 @@ class FloatTests: XCTestCase { (42.0, "42.0"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -30,48 +39,40 @@ class FloatTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/IntTests.swift b/Tests/XMLCoderTests/Minimal/IntTests.swift index 1c2088bd..ff778736 100644 --- a/Tests/XMLCoderTests/Minimal/IntTests.swift +++ b/Tests/XMLCoderTests/Minimal/IntTests.swift @@ -21,7 +21,16 @@ class IntTests: XCTestCase { (42, "42"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -30,48 +39,40 @@ class IntTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/KeyedTests.swift b/Tests/XMLCoderTests/Minimal/KeyedTests.swift index a5d7e32d..9052f30d 100644 --- a/Tests/XMLCoderTests/Minimal/KeyedTests.swift +++ b/Tests/XMLCoderTests/Minimal/KeyedTests.swift @@ -13,68 +13,49 @@ class KeyedTests: XCTestCase { let value: [String: Int] } - func testEmpty() { + func testEmpty() throws { let decoder = XMLDecoder() - do { - let xmlString = - """ - - - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, [:]) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, [:]) } - func testSingleElement() { + func testSingleElement() throws { let decoder = XMLDecoder() - do { - let xmlString = - """ - - - - 12 - - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, ["foo": 12]) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + + 12 + + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, ["foo": 12]) } - func testMultiElement() { + func testMultiElement() throws { let decoder = XMLDecoder() - do { - let xmlString = - """ - - - - 12 - 34 - - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, ["foo": 12, "bar": 34]) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + + 12 + 34 + + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, ["foo": 12, "bar": 34]) } func testAttribute() { diff --git a/Tests/XMLCoderTests/Minimal/NullTests.swift b/Tests/XMLCoderTests/Minimal/NullTests.swift index fee3b0d1..eab31772 100644 --- a/Tests/XMLCoderTests/Minimal/NullTests.swift +++ b/Tests/XMLCoderTests/Minimal/NullTests.swift @@ -13,7 +13,7 @@ class NullTests: XCTestCase { let value: Int? } - func testAttribute() { + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -21,44 +21,36 @@ class NullTests: XCTestCase { return { _ in .attribute } } - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertNil(decoded.value) + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertNil(decoded.value) - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertNil(decoded.value) + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertNil(decoded.value) - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } static var allTests = [ diff --git a/Tests/XMLCoderTests/Minimal/StringTests.swift b/Tests/XMLCoderTests/Minimal/StringTests.swift index 5636ca1b..9c9766f7 100644 --- a/Tests/XMLCoderTests/Minimal/StringTests.swift +++ b/Tests/XMLCoderTests/Minimal/StringTests.swift @@ -25,7 +25,16 @@ class StringTests: XCTestCase { ("foobar", "foobar"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -34,48 +43,40 @@ class StringTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/UIntTests.swift b/Tests/XMLCoderTests/Minimal/UIntTests.swift index 27fc15f3..3476cc0d 100644 --- a/Tests/XMLCoderTests/Minimal/UIntTests.swift +++ b/Tests/XMLCoderTests/Minimal/UIntTests.swift @@ -20,7 +20,16 @@ class UIntTests: XCTestCase { (42, "42"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -29,48 +38,40 @@ class UIntTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/URLTests.swift b/Tests/XMLCoderTests/Minimal/URLTests.swift index a5ddf568..f62fb3b1 100644 --- a/Tests/XMLCoderTests/Minimal/URLTests.swift +++ b/Tests/XMLCoderTests/Minimal/URLTests.swift @@ -20,7 +20,16 @@ class URLTests: XCTestCase { (URL(string: "http://example.com")!, "http://example.com"), ] - func testAttribute() { + func testMissing() { + let decoder = XMLDecoder() + + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData)) + } + + func testAttribute() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() @@ -29,48 +38,40 @@ class URLTests: XCTestCase { } for (value, xmlString) in values { - do { - let xmlString = - """ - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } - func testElement() { + func testElement() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() encoder.outputFormatting = [.prettyPrinted] for (value, xmlString) in values { - do { - let xmlString = - """ - - \(xmlString) - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, value) - - let encoded = try encoder.encode(decoded, withRootKey: "container") - XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + \(xmlString) + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, value) + + let encoded = try encoder.encode(decoded, withRootKey: "container") + XCTAssertEqual(String(data: encoded, encoding: .utf8)!, xmlString) } } diff --git a/Tests/XMLCoderTests/Minimal/UnkeyedTests.swift b/Tests/XMLCoderTests/Minimal/UnkeyedTests.swift index 3c9468bb..7d746fb4 100644 --- a/Tests/XMLCoderTests/Minimal/UnkeyedTests.swift +++ b/Tests/XMLCoderTests/Minimal/UnkeyedTests.swift @@ -13,64 +13,45 @@ class UnkeyedTests: XCTestCase { let value: [String] } - func testEmpty() { + func testEmpty() throws { let decoder = XMLDecoder() - do { - let xmlString = - """ - - - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, []) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = "" + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, []) } - func testSingleElement() { + func testSingleElement() throws { let decoder = XMLDecoder() - do { - let xmlString = - """ - - - foo - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, ["foo"]) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + foo + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, ["foo"]) } - func testMultiElement() { + func testMultiElement() throws { let decoder = XMLDecoder() - do { - let xmlString = - """ - - - foo - bar - - """ - let xmlData = xmlString.data(using: .utf8)! - - let decoded = try decoder.decode(Container.self, from: xmlData) - XCTAssertEqual(decoded.value, ["foo", "bar"]) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let xmlString = + """ + + foo + bar + + """ + let xmlData = xmlString.data(using: .utf8)! + + let decoded = try decoder.decode(Container.self, from: xmlData) + XCTAssertEqual(decoded.value, ["foo", "bar"]) } func testAttribute() { diff --git a/Tests/XMLCoderTests/NoteTest.swift b/Tests/XMLCoderTests/NoteTest.swift index a1f8f809..72501bbe 100644 --- a/Tests/XMLCoderTests/NoteTest.swift +++ b/Tests/XMLCoderTests/NoteTest.swift @@ -37,36 +37,27 @@ private struct Note: Codable, Equatable { } final class NoteTest: XCTestCase { - func testValidXML() { + func testValidXML() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() - do { - let note1 = try decoder.decode(Note.self, from: validXml) - XCTAssertEqual(note1.to, "Tove") - XCTAssertEqual(note1.from, "Jani") - XCTAssertEqual(note1.heading, "Reminder") - XCTAssertEqual(note1.body, "Don't forget me this weekend!") + let note1 = try decoder.decode(Note.self, from: validXml) + XCTAssertEqual(note1.to, "Tove") + XCTAssertEqual(note1.from, "Jani") + XCTAssertEqual(note1.heading, "Reminder") + XCTAssertEqual(note1.body, "Don't forget me this weekend!") - let data = try encoder.encode(note1, withRootKey: "note", - header: XMLHeader(version: 1.0, - encoding: "UTF-8")) - let note2 = try decoder.decode(Note.self, from: data) - XCTAssertEqual(note1, note2) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + let data = try encoder.encode(note1, withRootKey: "note", + header: XMLHeader(version: 1.0, + encoding: "UTF-8")) + let note2 = try decoder.decode(Note.self, from: data) + XCTAssertEqual(note1, note2) } func testInvalidXML() { let decoder = XMLDecoder() - do { - _ = try decoder.decode(Note.self, from: invalidXml) - XCTFail("Expected failure due to malformed XML.") - } catch { - // success! - } + XCTAssertThrowsError(try decoder.decode(Note.self, from: invalidXml)) } static var allTests = [ diff --git a/Tests/XMLCoderTests/PlantTest.swift b/Tests/XMLCoderTests/PlantTest.swift index 80993437..771749ba 100644 --- a/Tests/XMLCoderTests/PlantTest.swift +++ b/Tests/XMLCoderTests/PlantTest.swift @@ -109,25 +109,21 @@ private let lastPlant = Plant(common: "Cardinal Flower", amountAvailable: 22299) final class PlantTest: XCTestCase { - func testXML() { + func testXML() throws { let decoder = XMLDecoder() let encoder = XMLEncoder() - do { - let plantCatalog1 = try decoder.decode(PlantCatalog.self, - from: plantCatalogXML) - XCTAssertEqual(plantCatalog1.plants.count, 36) - XCTAssertEqual(plantCatalog1.plants[35], lastPlant) + let plantCatalog1 = try decoder.decode(PlantCatalog.self, + from: plantCatalogXML) + XCTAssertEqual(plantCatalog1.plants.count, 36) + XCTAssertEqual(plantCatalog1.plants[35], lastPlant) - let data = try encoder.encode(plantCatalog1, withRootKey: "CATALOG", - header: XMLHeader(version: 1.0, - encoding: "UTF-8")) - let plantCatalog2 = try decoder.decode(PlantCatalog.self, from: data) + let data = try encoder.encode(plantCatalog1, withRootKey: "CATALOG", + header: XMLHeader(version: 1.0, + encoding: "UTF-8")) + let plantCatalog2 = try decoder.decode(PlantCatalog.self, from: data) - XCTAssertEqual(plantCatalog1, plantCatalog2) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + XCTAssertEqual(plantCatalog1, plantCatalog2) } static var allTests = [ diff --git a/Tests/XMLCoderTests/RJITest.swift b/Tests/XMLCoderTests/RJITest.swift index 6f94423c..fef4492f 100644 --- a/Tests/XMLCoderTests/RJITest.swift +++ b/Tests/XMLCoderTests/RJITest.swift @@ -141,7 +141,7 @@ class RJITest: XCTestCase { let type: String } - func testRSS() { + func testRSS() throws { let decoder = XMLDecoder() // let encoder = XMLEncoder() @@ -149,39 +149,18 @@ class RJITest: XCTestCase { dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" decoder.dateDecodingStrategy = .formatted(dateFormatter) - do { -// let rss1 - _ = try decoder.decode(RSS.self, from: rjiSampleXML) - // this is a very peculiar case of `XMLCoder` not being able to decode an XML - // that it itself encoded -// data = try encoder.encode(rss1, withRootKey: "note", -// header: XMLHeader(version: 1.0, -// encoding: "UTF-8")) -// let rss2 = try decoder.decode(RSS.self, from: data) -// XCTAssertEqual(rss1, rss2) - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } - } - - func testBenchmarkRSS() throws { - let decoder = XMLDecoder() - - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" - decoder.dateDecodingStrategy = .formatted(dateFormatter) - - measure { - do { - _ = try decoder.decode(RSS.self, from: rjiSampleXML) - } catch { - XCTFail("failed to decode test xml: \(error)") - } - } +// let rss1 + _ = try decoder.decode(RSS.self, from: rjiSampleXML) + // this is a very peculiar case of `XMLCoder` not being able to decode an XML + // that it itself encoded +// data = try encoder.encode(rss1, withRootKey: "note", +// header: XMLHeader(version: 1.0, +// encoding: "UTF-8")) +// let rss2 = try decoder.decode(RSS.self, from: data) +// XCTAssertEqual(rss1, rss2) } static var allTests = [ ("testRSS", testRSS), - ("testBenchmarkRSS", testBenchmarkRSS), ] } diff --git a/Tests/XMLCoderTests/RelationshipsTest.swift b/Tests/XMLCoderTests/RelationshipsTest.swift index 776c1d32..767ec575 100644 --- a/Tests/XMLCoderTests/RelationshipsTest.swift +++ b/Tests/XMLCoderTests/RelationshipsTest.swift @@ -45,17 +45,13 @@ private struct Relationship: Codable { } final class RelationshipsTest: XCTestCase { - func testDecoder() { - do { - let decoder = XMLDecoder() - decoder.keyDecodingStrategy = .convertFromCapitalized + func testDecoder() throws { + let decoder = XMLDecoder() + decoder.keyDecodingStrategy = .convertFromCapitalized - let rels = try decoder.decode(Relationships.self, from: xml) + let rels = try decoder.decode(Relationships.self, from: xml) - XCTAssertEqual(rels.items[0].id, "rId1") - } catch { - XCTAssert(false, "failed to decode test xml: \(error)") - } + XCTAssertEqual(rels.items[0].id, "rId1") } static var allTests = [