Retrofit deferFulfillment onto snapshot tests. (#3641)

* Retrofit `deferFulfillment` onto snapshot tests.

* Convert a bunch of preview tests to the new fulfillment publisher

* Convert more tests

* Remove unneeded delays from the remaining tests

* Remove snapshotting delay option.
This commit is contained in:
Stefan Ceriu
2024-12-20 15:30:59 +02:00
committed by GitHub
parent 365797c8b7
commit 536f01abbd
49 changed files with 606 additions and 532 deletions
File diff suppressed because it is too large Load Diff
+9 -8
View File
@@ -5,6 +5,7 @@
// Please see LICENSE in the repository root for full details.
//
import Combine
import SwiftUI
import XCTest
@@ -50,21 +51,21 @@ class PreviewTests: XCTestCase {
// MARK: - Snapshots
func assertSnapshots(matching preview: _Preview, testName: String = #function) {
func assertSnapshots(matching preview: _Preview, testName: String = #function) async throws {
let preferences = SnapshotPreferences()
let preferenceReadingView = preview.content
.onPreferenceChange(SnapshotDelayPreferenceKey.self) { preferences.delay = $0 }
.onPreferenceChange(SnapshotPrecisionPreferenceKey.self) { preferences.precision = $0 }
.onPreferenceChange(SnapshotPerceptualPrecisionPreferenceKey.self) { preferences.perceptualPrecision = $0 }
.onPreferenceChange(SnapshotFulfillmentPublisherPreferenceKey.self) { preferences.fulfillmentPublisher = $0?.publisher }
// Render an image of the view in order to trigger the preference updates to occur.
let imageRenderer = ImageRenderer(content: preferenceReadingView)
_ = imageRenderer.uiImage
// Delay the test now - a delay after creating the `snapshotView` results in the underlying view not getting updated for snapshotting.
if preferences.delay != .zero {
wait(for: preferences.delay)
if let fulfillmentPublisher = preferences.fulfillmentPublisher {
let deferred = deferFulfillment(fulfillmentPublisher) { $0 == true }
try await deferred.fulfill()
}
for deviceName in snapshotDevices {
@@ -133,10 +134,10 @@ class PreviewTests: XCTestCase {
}
}
private class SnapshotPreferences {
var delay: TimeInterval = 0
private class SnapshotPreferences: @unchecked Sendable {
var precision: Float = 1
var perceptualPrecision: Float = 1
var fulfillmentPublisher: AnyPublisher<Bool, Never>?
}
// MARK: - SnapshotTesting + Extensions
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:47a99702b22eb7a34297a605c0a148acbd728c6055134118d55ad0fea521e4fe
size 92263
oid sha256:fbb929cb7177e45396a10b14ff1fddc351cfb6b5a5754fb1f52ef44666ebb3ab
size 92017
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:82f915f692c622ca6486a0f7a0b8bab6df7959078add40a16ded37593716af57
size 893292
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:79634b4686349a426958f301e37662e6f16cca5a0920289d962f0d453f68008c
size 92979
oid sha256:686e08e7fb182eb86468c8fbc0905e52f26d2319c98e3be022a39181d8b511a9
size 92729
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9cbb28cd9f361a81b96057ee8738d154a9add7de7a4ca9cdcd1600d499f6bf8d
size 909428
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fe5b5125665231d85b57ab1d304c2c17d175caa696ee1f4dcd090438e1282472
size 50384
oid sha256:d0af4162fc19aa519aa0f2182cd3eab3d9e73d645cb550e545227d6f5617a38e
size 50109
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:32dde9b6437682f702c13359337b3f21479d138a0cbcf20e47a3ff1b6ecbe2d7
size 274869
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9ad1c396b788d81c14139d5a5a174baaaa85e350aee173255cc72e3242f5bf87
size 51246
oid sha256:ccae5111908061e0a138ae2fc48b1aedc6bd889ed5380f352206bb2940f291a8
size 50986
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:487cf66a31c068c0bfc33ff95b4a69c9e5a9f77c4f2f958ac266349587e1b098
size 293724
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:39c099e692cac9570866390ae3fa3e402cdd14f19de1df4ee63b206e84ac7e40
size 81301
oid sha256:2c33f7901ac865bbf54c2e76e871cc1a27bf069c8c2951433511c3d710ccd5fa
size 97486
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:35bd1fba8ab30bb7d08080fe06cfadc8d0838a484bb9096c8cefd85b6af70543
size 85637
oid sha256:4825bade716f4055e70dfc82298ddd654825a4f719d59c89b267d32adf26ebc5
size 100330
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9658986db1f622979c311716b815190aa409fd70cd71d52ae9cedc5a2a2be60d
size 39632
oid sha256:0c515c3504ce421c39a3da2455e2ae8c200ef89b2634cc863b65995f096d148f
size 54590
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:73d404858351ed5066e5a5b9c78067c149cbf4f5b835d143172eb047e7bc7299
size 43558
oid sha256:ff01e35da6cecbd2af6a6f06a4488382477b7153507bd82d0fbe63b3f1586e3d
size 56960
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:78499a8e00ba1c763e049869a6ade9d15e6e8c8d88c599a4b568cf0c9af29b27
size 157618
oid sha256:c024f99d4aeea16ec9729974fa663e24a774fccae381c021aaf23fd2b1b06abe
size 183812
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:23380ed96834648da7e9d693ea4fd8d50c9ad839f14227ea2548ee175e82f7dc
size 106194
oid sha256:5fd4218e8976573194f9d8fe97061e850ec961dab5b91ab101fa7b5b1f630fd2
size 130938
+1
View File
@@ -49,3 +49,4 @@ targets:
excludes:
- "**/__Snapshots__/**"
- path: ../SupportingFiles
- path: ../../ElementX/Sources/Other/Extensions/XCTestCase.swift