Skip to content

Commit

Permalink
Cleanup throwing unit tests & add tests for missing values (#40)
Browse files Browse the repository at this point in the history
* Remove unnecessary `do … catch` blocks in favor of `throws` marker
* Add test cases for missing value in minimal tests suite
* Fix formatting
  • Loading branch information
regexident authored and MaxDesiatov committed Dec 23, 2018
1 parent 231a0d6 commit fb07143
Show file tree
Hide file tree
Showing 19 changed files with 473 additions and 565 deletions.
50 changes: 21 additions & 29 deletions Tests/XMLCoderTests/BooksTest.swift
Expand Up @@ -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 = [
Expand Down
20 changes: 8 additions & 12 deletions Tests/XMLCoderTests/BreakfastTest.swift
Expand Up @@ -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 = [
Expand Down
25 changes: 10 additions & 15 deletions Tests/XMLCoderTests/CDTest.swift
Expand Up @@ -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 = [
Expand Down
69 changes: 35 additions & 34 deletions Tests/XMLCoderTests/Minimal/BoolTests.swift
Expand Up @@ -20,7 +20,16 @@ class BoolTests: XCTestCase {
(true, "true"),
]

func testAttribute() {
func testMissing() {
let decoder = XMLDecoder()

let xmlString = "<container />"
let xmlData = xmlString.data(using: .utf8)!

XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData))
}

func testAttribute() throws {
let decoder = XMLDecoder()
let encoder = XMLEncoder()

Expand All @@ -29,48 +38,40 @@ class BoolTests: XCTestCase {
}

for (value, xmlString) in values {
do {
let xmlString =
"""
<container value="\(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 =
"""
<container value="\(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 =
"""
<container>
<value>\(xmlString)</value>
</container>
"""
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 =
"""
<container>
<value>\(xmlString)</value>
</container>
"""
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)
}
}

Expand Down
69 changes: 35 additions & 34 deletions Tests/XMLCoderTests/Minimal/DataTests.swift
Expand Up @@ -21,7 +21,16 @@ class DataTests: XCTestCase {
(Data(base64Encoded: "bG9yZW0gaXBzdW0=")!, "bG9yZW0gaXBzdW0="),
]

func testAttribute() {
func testMissing() {
let decoder = XMLDecoder()

let xmlString = "<container />"
let xmlData = xmlString.data(using: .utf8)!

XCTAssertThrowsError(try decoder.decode(Container.self, from: xmlData))
}

func testAttribute() throws {
let decoder = XMLDecoder()
let encoder = XMLEncoder()

Expand All @@ -30,48 +39,40 @@ class DataTests: XCTestCase {
}

for (value, xmlString) in values {
do {
let xmlString =
"""
<container value="\(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 =
"""
<container value="\(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 =
"""
<container>
<value>\(xmlString)</value>
</container>
"""
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 =
"""
<container>
<value>\(xmlString)</value>
</container>
"""
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)
}
}

Expand Down

0 comments on commit fb07143

Please sign in to comment.