From c0e5f9e2162f28ab3465ff931a30c2902b6cb1ec Mon Sep 17 00:00:00 2001 From: Mike Bignell Date: Wed, 29 Jun 2016 13:14:00 +0100 Subject: [PATCH] Unbox array with formatter tests now cover all code paths --- Tests/UnboxTests.swift | 70 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/Tests/UnboxTests.swift b/Tests/UnboxTests.swift index 9de6043..3db5128 100644 --- a/Tests/UnboxTests.swift +++ b/Tests/UnboxTests.swift @@ -215,11 +215,25 @@ class UnboxTests: XCTestCase { } } + struct AllowInvalidElementsModel: Unboxable { + let date: NSDate + let dateArray: [NSDate] + + init(unboxer: Unboxer) { + let formatter = NSDateFormatter() + formatter.dateFormat = "YYYY-MM-dd" + self.date = unboxer.unbox("date", formatter: formatter) + self.dateArray = unboxer.unbox("dateArray", formatter: formatter, allowInvalidElements: true) + } + } + let dictionary: UnboxableDictionary = [ "date" : "2015-12-15", "dateArray" : ["2015-12-15"] ] + // Valid tests: + do { let unboxed: Model = try Unbox(dictionary) @@ -240,6 +254,28 @@ class UnboxTests: XCTestCase { XCTFail("\(error)") } + do { + let invalidValueDateArrayDictionary: UnboxableDictionary = [ + "date" : "2015-12-15", + "dateArray" : ["2015-12-tuesday", "2015-12-15"] + ] + + let unboxed: AllowInvalidElementsModel = try Unbox(invalidValueDateArrayDictionary) + + if let firstDate = unboxed.dateArray.first { + let calendar = NSCalendar.currentCalendar() + XCTAssertEqual(calendar.component(.Year, fromDate: firstDate), 2015) + XCTAssertEqual(calendar.component(.Month, fromDate: firstDate), 12) + XCTAssertEqual(calendar.component(.Day, fromDate: firstDate), 15) + } else { + XCTFail("Array empty") + } + } catch { + XCTFail("\(error)") + } + + // Invalid tests: + do { let invalidDateDictionary: UnboxableDictionary = [ "date" : "2015-12-tuesday", @@ -278,6 +314,18 @@ class UnboxTests: XCTestCase { } } + struct AllowInvalidElementsModel: Unboxable { + let date: NSDate? + let dateArray: [NSDate]? + + init(unboxer: Unboxer) { + let formatter = NSDateFormatter() + formatter.dateFormat = "YYYY-MM-dd" + self.date = unboxer.unbox("date", formatter: formatter) + self.dateArray = unboxer.unbox("dateArray", formatter: formatter, allowInvalidElements: true) + } + } + do { let invalidDictionary: UnboxableDictionary = [ "date" : "2015-12-tuesday", @@ -290,6 +338,28 @@ class UnboxTests: XCTestCase { } catch { XCTFail("\(error)") } + + do { + let invalidDictionary: UnboxableDictionary = [ + "date" : "2015-12-tuesday", + "dateArray" : ["2015-12-15", "2015-12-tuesday"] + ] + + let unboxed: AllowInvalidElementsModel = try Unbox(invalidDictionary) + XCTAssertNil(unboxed.date) + + let calendar = NSCalendar.currentCalendar() + if let firstDate = unboxed.dateArray?.first { + XCTAssertEqual(calendar.component(.Year, fromDate: firstDate), 2015) + XCTAssertEqual(calendar.component(.Month, fromDate: firstDate), 12) + XCTAssertEqual(calendar.component(.Day, fromDate: firstDate), 15) + } else { + XCTFail("Array empty") + } + + } catch { + XCTFail("\(error)") + } } func testCustomDictionaryKeyType() {