diff --git a/Sources/AppKitBackend/AppKitBackend.swift b/Sources/AppKitBackend/AppKitBackend.swift index 62b529aa50f..feaa6816c8b 100644 --- a/Sources/AppKitBackend/AppKitBackend.swift +++ b/Sources/AppKitBackend/AppKitBackend.swift @@ -1402,6 +1402,16 @@ class NSSplitViewResizingDelegate: NSObject, NSSplitViewDelegate { public class NSCustomWindow: NSWindow { var resizeDelegate = ResizeDelegate() + /// Allows the backing scale factor to be overridden. Useful for keeping + /// UI tests consistent across devices. + /// + /// Idea from https://github.com/pointfreeco/swift-snapshot-testing/pull/533 + public var backingScaleFactorOverride: CGFloat? + + public override var backingScaleFactor: CGFloat { + backingScaleFactorOverride ?? super.backingScaleFactor + } + class ResizeDelegate: NSObject, NSWindowDelegate { var resizeHandler: ((SIMD2) -> Void)? diff --git a/Tests/SwiftCrossUITests/SwiftCrossUITests.swift b/Tests/SwiftCrossUITests/SwiftCrossUITests.swift index 2331cb65a27..990dc236390 100644 --- a/Tests/SwiftCrossUITests/SwiftCrossUITests.swift +++ b/Tests/SwiftCrossUITests/SwiftCrossUITests.swift @@ -68,6 +68,12 @@ final class SwiftCrossUITests: XCTestCase { func testBasicLayout() throws { let backend = AppKitBackend() let window = backend.createWindow(withDefaultSize: SIMD2(200, 200)) + + // Idea taken from https://github.com/pointfreeco/swift-snapshot-testing/pull/533 + // and implemented in AppKitBackend. + window.backingScaleFactorOverride = 1 + window.colorSpace = .genericRGB + let environment = EnvironmentValues(backend: backend) .with(\.window, window) let viewGraph = ViewGraph( @@ -88,7 +94,7 @@ final class SwiftCrossUITests: XCTestCase { XCTAssertEqual( result.size, - ViewSize(fixedSize: SIMD2(94, 95)), + ViewSize(fixedSize: SIMD2(88, 95)), "View update result mismatch" ) @@ -96,7 +102,6 @@ final class SwiftCrossUITests: XCTestCase { result.preferences.onOpenURL == nil, "onOpenURL not nil" ) - } static func snapshotView(_ view: NSView) throws -> Data {