diff --git a/Sources/SnapshotTesting/AssertSnapshot.swift b/Sources/SnapshotTesting/AssertSnapshot.swift index 552077e49..e2c6cff2b 100644 --- a/Sources/SnapshotTesting/AssertSnapshot.swift +++ b/Sources/SnapshotTesting/AssertSnapshot.swift @@ -173,6 +173,8 @@ public func assertSnapshots( /// - snapshotDirectory: Optional directory to save snapshots. By default snapshots will be saved /// in a directory with the same name as the test file, and that directory will sit inside a /// directory `__Snapshots__` that sits next to your test file. +/// - snapshotSubdirectory: The default subdirectory for snapshots in the same directory as the test +/// file. Defaults to `__Snapshots__` that sits next to your test file. Only used when `snapshotDirectory` is nil. /// - timeout: The amount of time a snapshot must be generated in. /// - file: The file in which failure occurred. Defaults to the file name of the test case in /// which this function was called. @@ -186,8 +188,9 @@ public func verifySnapshot( as snapshotting: Snapshotting, named name: String? = nil, record recording: Bool = false, - snapshotDirectory: String? = nil, - timeout: TimeInterval = 5, + snapshotDirectory: String? = SnapshottingDefaults.snapshotDirectory, + snapshotSubdirectory: String = SnapshottingDefaults.snapshotSubdirectory, + timeout: TimeInterval = SnapshottingDefaults.timeout, file: StaticString = #file, testName: String = #function, line: UInt = #line @@ -204,7 +207,7 @@ public func verifySnapshot( snapshotDirectory.map { URL(fileURLWithPath: $0, isDirectory: true) } ?? fileUrl .deletingLastPathComponent() - .appendingPathComponent("__Snapshots__") + .appendingPathComponent(snapshotSubdirectory) .appendingPathComponent(fileName) let identifier: String diff --git a/Sources/SnapshotTesting/Snapshotting/CALayer.swift b/Sources/SnapshotTesting/Snapshotting/CALayer.swift index 74c512c12..f694d68b0 100644 --- a/Sources/SnapshotTesting/Snapshotting/CALayer.swift +++ b/Sources/SnapshotTesting/Snapshotting/CALayer.swift @@ -14,7 +14,7 @@ /// assertSnapshot(of: layer, as: .image(precision: 0.99)) /// ``` public static var image: Snapshotting { - return .image(precision: 1) + return .image(precision: SnapshottingDefaults.precision) } /// A snapshot strategy for comparing layers based on pixel equality. @@ -25,7 +25,7 @@ /// match. 98-99% mimics /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. - public static func image(precision: Float, perceptualPrecision: Float = 1) -> Snapshotting { + public static func image(precision: Float, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision) -> Snapshotting { return SimplySnapshotting.image( precision: precision, perceptualPrecision: perceptualPrecision ).pullback { layer in @@ -59,7 +59,7 @@ /// human eye. /// - traits: A trait collection override. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, traits: UITraitCollection = .init() + precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, traits: UITraitCollection = .init() ) -> Snapshotting { diff --git a/Sources/SnapshotTesting/Snapshotting/CGPath.swift b/Sources/SnapshotTesting/Snapshotting/CGPath.swift index 1e8c30444..efafcfb7e 100644 --- a/Sources/SnapshotTesting/Snapshotting/CGPath.swift +++ b/Sources/SnapshotTesting/Snapshotting/CGPath.swift @@ -26,7 +26,9 @@ /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, drawingMode: CGPathDrawingMode = .eoFill + precision: Float = SnapshottingDefaults.precision, + perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, + drawingMode: CGPathDrawingMode = .eoFill ) -> Snapshotting { return SimplySnapshotting.image( precision: precision, perceptualPrecision: perceptualPrecision @@ -64,7 +66,9 @@ /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, scale: CGFloat = 1, + precision: Float = SnapshottingDefaults.precision, + perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, + scale: CGFloat = 1, drawingMode: CGPathDrawingMode = .eoFill ) -> Snapshotting { return SimplySnapshotting.image( diff --git a/Sources/SnapshotTesting/Snapshotting/NSBezierPath.swift b/Sources/SnapshotTesting/Snapshotting/NSBezierPath.swift index c506bb329..6fda4dcb4 100644 --- a/Sources/SnapshotTesting/Snapshotting/NSBezierPath.swift +++ b/Sources/SnapshotTesting/Snapshotting/NSBezierPath.swift @@ -24,7 +24,7 @@ /// match. 98-99% mimics /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. - public static func image(precision: Float = 1, perceptualPrecision: Float = 1) -> Snapshotting { + public static func image(precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision) -> Snapshotting { return SimplySnapshotting.image( precision: precision, perceptualPrecision: perceptualPrecision ).pullback { path in diff --git a/Sources/SnapshotTesting/Snapshotting/NSImage.swift b/Sources/SnapshotTesting/Snapshotting/NSImage.swift index 0f1d5b481..3b370eb9b 100644 --- a/Sources/SnapshotTesting/Snapshotting/NSImage.swift +++ b/Sources/SnapshotTesting/Snapshotting/NSImage.swift @@ -15,7 +15,7 @@ /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. /// - Returns: A new diffing strategy. - public static func image(precision: Float = 1, perceptualPrecision: Float = 1) -> Diffing { + public static func image(precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision) -> Diffing { return .init( toData: { NSImagePNGRepresentation($0)! }, fromData: { NSImage(data: $0)! } diff --git a/Sources/SnapshotTesting/Snapshotting/NSView.swift b/Sources/SnapshotTesting/Snapshotting/NSView.swift index b2e7edfb0..683a8f807 100644 --- a/Sources/SnapshotTesting/Snapshotting/NSView.swift +++ b/Sources/SnapshotTesting/Snapshotting/NSView.swift @@ -21,7 +21,7 @@ /// human eye. /// - size: A view size override. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, size: CGSize? = nil + precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize? = nil ) -> Snapshotting { return SimplySnapshotting.image( precision: precision, perceptualPrecision: perceptualPrecision diff --git a/Sources/SnapshotTesting/Snapshotting/NSViewController.swift b/Sources/SnapshotTesting/Snapshotting/NSViewController.swift index 69ec72dde..696788bf9 100644 --- a/Sources/SnapshotTesting/Snapshotting/NSViewController.swift +++ b/Sources/SnapshotTesting/Snapshotting/NSViewController.swift @@ -18,7 +18,7 @@ /// human eye. /// - size: A view size override. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, size: CGSize? = nil + precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize? = nil ) -> Snapshotting { return Snapshotting.image( precision: precision, perceptualPrecision: perceptualPrecision, size: size diff --git a/Sources/SnapshotTesting/Snapshotting/SceneKit.swift b/Sources/SnapshotTesting/Snapshotting/SceneKit.swift index 94ff90459..2aef4f6cd 100644 --- a/Sources/SnapshotTesting/Snapshotting/SceneKit.swift +++ b/Sources/SnapshotTesting/Snapshotting/SceneKit.swift @@ -17,7 +17,7 @@ /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. /// - size: The size of the scene. - public static func image(precision: Float = 1, perceptualPrecision: Float = 1, size: CGSize) + public static func image(precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize) -> Snapshotting { return .scnScene(precision: precision, perceptualPrecision: perceptualPrecision, size: size) @@ -34,7 +34,7 @@ /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. /// - size: The size of the scene. - public static func image(precision: Float = 1, perceptualPrecision: Float = 1, size: CGSize) + public static func image(precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize) -> Snapshotting { return .scnScene(precision: precision, perceptualPrecision: perceptualPrecision, size: size) diff --git a/Sources/SnapshotTesting/Snapshotting/SnapshottingDefaults.swift b/Sources/SnapshotTesting/Snapshotting/SnapshottingDefaults.swift new file mode 100644 index 000000000..78aca0094 --- /dev/null +++ b/Sources/SnapshotTesting/Snapshotting/SnapshottingDefaults.swift @@ -0,0 +1,15 @@ +import Foundation + +/// The global configuration options +public enum SnapshottingDefaults { + /// The default subdirectory for snapshots in the same directory as the test file. Defaults to `__Snapshots__` that sits next to your test file. Only used when `snapshotDirectory` is nil. + public static var snapshotSubdirectory = "__Snapshots__" + /// Optional directory to save snapshots. By default snapshots will be saved in a directory with the same name as the test file, and that directory will sit inside a directory `__Snapshots__` that sits next to your test file. + public static var snapshotDirectory: String? = nil + /// The amount of time a snapshot must be generated in. + public static var timeout: TimeInterval = 5 + /// The percentage of pixels that must match. Value between 0-1 + public static var precision: Float = 1 + /// The percentage a pixel must match the source pixel to be considered a match. [98-99% mimics the precision of the human + public static var perceptualPrecision: Float = 1 +} diff --git a/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift b/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift index ad515050a..159452832 100644 --- a/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift +++ b/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift @@ -17,7 +17,7 @@ /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. /// - size: The size of the scene. - public static func image(precision: Float = 1, perceptualPrecision: Float = 1, size: CGSize) + public static func image(precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize) -> Snapshotting { return .skScene(precision: precision, perceptualPrecision: perceptualPrecision, size: size) @@ -34,7 +34,7 @@ /// [the precision](http://zschuessler.github.io/DeltaE/learn/#toc-defining-delta-e) of the /// human eye. /// - size: The size of the scene. - public static func image(precision: Float = 1, perceptualPrecision: Float = 1, size: CGSize) + public static func image(precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize) -> Snapshotting { return .skScene(precision: precision, perceptualPrecision: perceptualPrecision, size: size) diff --git a/Sources/SnapshotTesting/Snapshotting/SwiftUIView.swift b/Sources/SnapshotTesting/Snapshotting/SwiftUIView.swift index 8d85e1f0b..beaa77583 100644 --- a/Sources/SnapshotTesting/Snapshotting/SwiftUIView.swift +++ b/Sources/SnapshotTesting/Snapshotting/SwiftUIView.swift @@ -38,8 +38,8 @@ /// - traits: A trait collection override. public static func image( drawHierarchyInKeyWindow: Bool = false, - precision: Float = 1, - perceptualPrecision: Float = 1, + precision: Float = SnapshottingDefaults.precision, + perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, layout: SwiftUISnapshotLayout = .sizeThatFits, traits: UITraitCollection = .init() ) diff --git a/Sources/SnapshotTesting/Snapshotting/UIBezierPath.swift b/Sources/SnapshotTesting/Snapshotting/UIBezierPath.swift index 6b48d622d..89cff93c7 100644 --- a/Sources/SnapshotTesting/Snapshotting/UIBezierPath.swift +++ b/Sources/SnapshotTesting/Snapshotting/UIBezierPath.swift @@ -17,7 +17,7 @@ /// human eye. /// - scale: The scale to use when loading the reference image from disk. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, scale: CGFloat = 1 + precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, scale: CGFloat = 1 ) -> Snapshotting { return SimplySnapshotting.image( precision: precision, perceptualPrecision: perceptualPrecision, scale: scale diff --git a/Sources/SnapshotTesting/Snapshotting/UIImage.swift b/Sources/SnapshotTesting/Snapshotting/UIImage.swift index 33472d3af..374c25b1b 100644 --- a/Sources/SnapshotTesting/Snapshotting/UIImage.swift +++ b/Sources/SnapshotTesting/Snapshotting/UIImage.swift @@ -18,7 +18,7 @@ /// `UITraitCollection`s default value of `0.0`, the screens scale is used. /// - Returns: A new diffing strategy. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, scale: CGFloat? = nil + precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, scale: CGFloat? = nil ) -> Diffing { let imageScale: CGFloat if let scale = scale, scale != 0.0 { @@ -78,7 +78,7 @@ /// human eye. /// - scale: The scale of the reference image stored on disk. public static func image( - precision: Float = 1, perceptualPrecision: Float = 1, scale: CGFloat? = nil + precision: Float = SnapshottingDefaults.precision, perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, scale: CGFloat? = nil ) -> Snapshotting { return .init( pathExtension: "png", diff --git a/Sources/SnapshotTesting/Snapshotting/UIView.swift b/Sources/SnapshotTesting/Snapshotting/UIView.swift index 7244f67d1..75843b00f 100644 --- a/Sources/SnapshotTesting/Snapshotting/UIView.swift +++ b/Sources/SnapshotTesting/Snapshotting/UIView.swift @@ -22,8 +22,8 @@ /// - traits: A trait collection override. public static func image( drawHierarchyInKeyWindow: Bool = false, - precision: Float = 1, - perceptualPrecision: Float = 1, + precision: Float = SnapshottingDefaults.precision, + perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize? = nil, traits: UITraitCollection = .init() ) diff --git a/Sources/SnapshotTesting/Snapshotting/UIViewController.swift b/Sources/SnapshotTesting/Snapshotting/UIViewController.swift index b08b8bf59..d896784d4 100644 --- a/Sources/SnapshotTesting/Snapshotting/UIViewController.swift +++ b/Sources/SnapshotTesting/Snapshotting/UIViewController.swift @@ -20,8 +20,8 @@ /// - traits: A trait collection override. public static func image( on config: ViewImageConfig, - precision: Float = 1, - perceptualPrecision: Float = 1, + precision: Float = SnapshottingDefaults.precision, + perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize? = nil, traits: UITraitCollection = .init() ) @@ -57,8 +57,8 @@ /// - traits: A trait collection override. public static func image( drawHierarchyInKeyWindow: Bool = false, - precision: Float = 1, - perceptualPrecision: Float = 1, + precision: Float = SnapshottingDefaults.precision, + perceptualPrecision: Float = SnapshottingDefaults.perceptualPrecision, size: CGSize? = nil, traits: UITraitCollection = .init() )