126 lines
6.0 KiB
Swift
126 lines
6.0 KiB
Swift
/*
|
|
* Copyright (c) 2015, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
*/
|
|
|
|
#if swift(>=3)
|
|
public extension FBSnapshotTestCase {
|
|
public func FBSnapshotVerifyView(_ view: UIView, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
|
|
FBSnapshotVerifyViewOrLayer(view, identifier: identifier, suffixes: suffixes, tolerance: tolerance, file: file, line: line)
|
|
}
|
|
|
|
public func FBSnapshotVerifyLayer(_ layer: CALayer, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
|
|
FBSnapshotVerifyViewOrLayer(layer, identifier: identifier, suffixes: suffixes, tolerance: tolerance, file: file, line: line)
|
|
}
|
|
|
|
private func FBSnapshotVerifyViewOrLayer(_ viewOrLayer: AnyObject, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
|
|
let envReferenceImageDirectory = self.getReferenceImageDirectory(withDefault: FB_REFERENCE_IMAGE_DIR)
|
|
var error: NSError?
|
|
var comparisonSuccess = false
|
|
|
|
if let envReferenceImageDirectory = envReferenceImageDirectory {
|
|
for suffix in suffixes {
|
|
let referenceImagesDirectory = "\(envReferenceImageDirectory)\(suffix)"
|
|
if viewOrLayer.isKind(of: UIView.self) {
|
|
do {
|
|
try compareSnapshot(of: viewOrLayer as! UIView, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: tolerance)
|
|
comparisonSuccess = true
|
|
} catch let error1 as NSError {
|
|
error = error1
|
|
comparisonSuccess = false
|
|
}
|
|
} else if viewOrLayer.isKind(of: CALayer.self) {
|
|
do {
|
|
try compareSnapshot(of: viewOrLayer as! CALayer, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: tolerance)
|
|
comparisonSuccess = true
|
|
} catch let error1 as NSError {
|
|
error = error1
|
|
comparisonSuccess = false
|
|
}
|
|
} else {
|
|
assertionFailure("Only UIView and CALayer classes can be snapshotted")
|
|
}
|
|
|
|
assert(recordMode == false, message: "Test ran in record mode. Reference image is now saved. Disable record mode to perform an actual snapshot comparison!", file: file, line: line)
|
|
|
|
if comparisonSuccess || recordMode {
|
|
break
|
|
}
|
|
|
|
assert(comparisonSuccess, message: "Snapshot comparison failed: \(error)", file: file, line: line)
|
|
}
|
|
} else {
|
|
XCTFail("Missing value for referenceImagesDirectory - Set FB_REFERENCE_IMAGE_DIR as Environment variable in your scheme.")
|
|
}
|
|
}
|
|
|
|
func assert(_ assertion: Bool, message: String, file: StaticString, line: UInt) {
|
|
if !assertion {
|
|
XCTFail(message, file: file, line: line)
|
|
}
|
|
}
|
|
}
|
|
#else
|
|
public extension FBSnapshotTestCase {
|
|
public func FBSnapshotVerifyView(view: UIView, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
|
|
FBSnapshotVerifyViewOrLayer(view, identifier: identifier, suffixes: suffixes, tolerance: tolerance, file: file, line: line)
|
|
}
|
|
|
|
public func FBSnapshotVerifyLayer(layer: CALayer, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
|
|
FBSnapshotVerifyViewOrLayer(layer, identifier: identifier, suffixes: suffixes, tolerance: tolerance, file: file, line: line)
|
|
}
|
|
|
|
private func FBSnapshotVerifyViewOrLayer(viewOrLayer: AnyObject, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
|
|
let envReferenceImageDirectory = self.getReferenceImageDirectoryWithDefault(FB_REFERENCE_IMAGE_DIR)
|
|
var error: NSError?
|
|
var comparisonSuccess = false
|
|
|
|
if let envReferenceImageDirectory = envReferenceImageDirectory {
|
|
for suffix in suffixes {
|
|
let referenceImagesDirectory = "\(envReferenceImageDirectory)\(suffix)"
|
|
if viewOrLayer.isKindOfClass(UIView) {
|
|
do {
|
|
try compareSnapshotOfView(viewOrLayer as! UIView, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: tolerance)
|
|
comparisonSuccess = true
|
|
} catch let error1 as NSError {
|
|
error = error1
|
|
comparisonSuccess = false
|
|
}
|
|
} else if viewOrLayer.isKindOfClass(CALayer) {
|
|
do {
|
|
try compareSnapshotOfLayer(viewOrLayer as! CALayer, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: tolerance)
|
|
comparisonSuccess = true
|
|
} catch let error1 as NSError {
|
|
error = error1
|
|
comparisonSuccess = false
|
|
}
|
|
} else {
|
|
assertionFailure("Only UIView and CALayer classes can be snapshotted")
|
|
}
|
|
|
|
assert(recordMode == false, message: "Test ran in record mode. Reference image is now saved. Disable record mode to perform an actual snapshot comparison!", file: file, line: line)
|
|
|
|
if comparisonSuccess || recordMode {
|
|
break
|
|
}
|
|
|
|
assert(comparisonSuccess, message: "Snapshot comparison failed: \(error)", file: file, line: line)
|
|
}
|
|
} else {
|
|
XCTFail("Missing value for referenceImagesDirectory - Set FB_REFERENCE_IMAGE_DIR as Environment variable in your scheme.")
|
|
}
|
|
}
|
|
|
|
func assert(assertion: Bool, message: String, file: StaticString, line: UInt) {
|
|
if !assertion {
|
|
XCTFail(message, file: file, line: line)
|
|
}
|
|
}
|
|
}
|
|
#endif
|