Skip to content

Instantly share code, notes, and snippets.

@marcprux
Created July 23, 2014 17:48
Show Gist options
  • Save marcprux/d1571213385725fd5ed8 to your computer and use it in GitHub Desktop.
Save marcprux/d1571213385725fd5ed8 to your computer and use it in GitHub Desktop.
XCTAssertEqual that handles optional unwrapping
/// like XCTAssertEqual, but handles optional unwrapping
public func XCTAssertEqualOptional<T: Any where T: Equatable>(expression1: @auto_closure () -> T?, expression2: @auto_closure () -> T?, _ message: String? = nil, file: String = __FILE__, line: UInt = __LINE__) {
if let exp1 = expression1() {
if let exp2 = expression2() {
XCTAssertEqual(exp1, exp2, message ? message! : "", file: file, line: line)
} else {
XCTFail(message ? message! : "exp1 != nil, exp2 == nil", file: file, line: line)
}
} else if let exp2 = expression2() {
XCTFail(message ? message! : "exp1 == nil, exp2 != nil", file: file, line: line)
}
}
@joelparkerhenderson
Copy link

Thank you, this is exactly what I need. Here is your code updated for Swift 1.2 and as an extension:

import Foundation
import XCTest

extension XCTestCase {

  func XCTAssertEqualOptional<T: Any where T: Equatable>(@autoclosure a: () -> T?, @autoclosure b: () -> T?, _ message: String? = nil, file: String = __FILE__, line: UInt = __LINE__) {
    if let _a = a() {
      if let _b = b() {
        XCTAssertEqual(_a, _b, (message != nil ? message! : ""), file: file, line: line)
      } else {
        XCTFail((message != nil ? message! : "a != nil, b == nil"), file: file, line: line)
      }
    } else if let _b = b() {
      XCTFail((message != nil ? message! : "a == nil, b != nil"), file: file, line: line)
    }
  }

}

@iSevenDays
Copy link

iSevenDays commented May 7, 2016

Swift 2, comparing optional arrays

func XCTAssertEqualOptional<T: Equatable>(@autoclosure a: () -> [T]?, @autoclosure _ b: () -> [T]?, _ message: String? = nil, file: StaticString = #file, line: UInt = #line) {
        if let _a = a() {
            if let _b = b() {
                XCTAssertEqual(_a, _b, (message != nil ? message! : ""), file: file, line: line)
            } else {
                XCTFail((message != nil ? message! : "a != nil, b == nil"), file: file, line: line)
            }
        } else if b() != nil {
            XCTFail((message != nil ? message! : "a == nil, b != nil"), file: file, line: line)
        }
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment