diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index bdc8d7c843..aaeb264498 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -115,6 +115,7 @@ 13C77FDF17C4C6627CFFC205 /* RoomTimelineItemFactoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D25A35764C7B3DB78954AB5 /* RoomTimelineItemFactoryProtocol.swift */; }; 13CBC470FB619A6393A21908 /* RoomNotificationSettingsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8296D6FB451E25CEC0767BBA /* RoomNotificationSettingsScreenCoordinator.swift */; }; 14343C2F9AD2BFEA92CA28FF /* MapTilerStyleBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7AE92E7BFF71797BDE1D261 /* MapTilerStyleBuilder.swift */; }; + 1443CEEE42491CF7CD8A146A /* XCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A1941B874A3BE9CDDF43EF /* XCTestCase.swift */; }; 1471A080552631358D152C18 /* AudioPlayerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB3E65A79779EDA5D33D8A /* AudioPlayerState.swift */; }; 147597951DB07123A87AA1D1 /* landscape_test_image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 96CE9D6642DD487D8CC90C9C /* landscape_test_image.jpg */; }; 149D1942DC005D0485FB8D93 /* LoggingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1943ADE6A62ED5129D7C8 /* LoggingTests.swift */; }; @@ -252,7 +253,6 @@ 30CC4F796B27BE8B1DFDBF5A /* NSEUserSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEAA2832D93EC7D2608703FB /* NSEUserSession.swift */; }; 30E5628F74AD3C27A061BF25 /* QRCodeLoginScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC1B7CB061C9865B2B91B56 /* QRCodeLoginScreenViewModel.swift */; }; 3113065AABBC14CEAE6843FA /* UserSessionFlowCoordinatorStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8774CF614849664B5B3C2A1 /* UserSessionFlowCoordinatorStateMachine.swift */; }; - 3116693C5EB476E028990416 /* XCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74611A4182DCF5F4D42696EC /* XCTestCase.swift */; }; 3118D9ABFD4BE5A3492FF88A /* ElementCallConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC437C491EA6996513B1CEAB /* ElementCallConfiguration.swift */; }; 32B7891D937377A59606EDFC /* UserFlowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DD8599815136EFF5B73F38 /* UserFlowTests.swift */; }; 339BC18777912E1989F2F17D /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584A61D9C459FAFEF038A7C0 /* Section.swift */; }; @@ -529,6 +529,7 @@ 69DE29C3E3180BB17D840690 /* ProgressCursorModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C8E13A1FBA717B0C277ECC /* ProgressCursorModifier.swift */; }; 6A0E7551E0D1793245F34CDD /* ClientError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09A267106B9585D3D0CFC0D /* ClientError.swift */; }; 6A54F52443EC52AC5CD772C0 /* JoinRoomScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869A8A4632E511351BFE2EC4 /* JoinRoomScreen.swift */; }; + 6A916606A8B92FE8A990A219 /* XCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A1941B874A3BE9CDDF43EF /* XCTestCase.swift */; }; 6AD722DD92E465E56D2885AB /* BugReportScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */; }; 6AEB650311F694A5702255C9 /* UserProfileScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B4932E4EFBC8FAC10972CD /* UserProfileScreenCoordinator.swift */; }; 6B31508C6334C617360C2EAB /* RoomMemberDetailsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC589E641AE46EFB2962534D /* RoomMemberDetailsViewModelTests.swift */; }; @@ -1044,7 +1045,6 @@ D33AC79A50DFC26D2498DD28 /* FileRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5098DA7799946A61E34A2373 /* FileRoomTimelineItem.swift */; }; D34E328E9E65904358248FDD /* GlobalSearchScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436A0D98D372B17EAE9AA999 /* GlobalSearchScreenModels.swift */; }; D3FD96913D2B1AAA3149DAC7 /* CreateRoomViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69D42EE0102D2857933625DD /* CreateRoomViewModelTests.swift */; }; - D415764645491F10344FC6AC /* Publisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60F18AECC9D38C2B6D85F99C /* Publisher.swift */; }; D43F0503EF2CBC55272538FE /* SDKGeneratedMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F079B5DBD0D85FEA687AAE /* SDKGeneratedMocks.swift */; }; D46C33F8B61B55F0C8C2D15F /* LocationRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B2AC540DE619B36832A5DB5 /* LocationRoomTimelineItem.swift */; }; D4CB979EB4FE26AAD9F9A72B /* UserProfileScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 604A69C081B935D6A38DE6D8 /* UserProfileScreenModels.swift */; }; @@ -1110,6 +1110,7 @@ E3AC72E3E58F364EF15C1CC7 /* NotificationSettingsScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514363244AE7D68080D44C6F /* NotificationSettingsScreenViewModelTests.swift */; }; E3CA565A4B9704F191B191F0 /* JoinedRoomSize+MemberCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF9AEA706926DD0DA2B954C /* JoinedRoomSize+MemberCount.swift */; }; E3E1E255DC8CB34BD8573E0D /* UserIndicatorControllerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12D3B1BCF920880CA8BBB6B /* UserIndicatorControllerProtocol.swift */; }; + E3EBC3BF7CE3960B41757BAA /* Publisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7310D8DFE01AF45F0689C3AA /* Publisher.swift */; }; E45C9FA22BC13B477FD3B4AC /* EmojiDetection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D99730313BEBF08CDE81EE3 /* EmojiDetection.swift */; }; E468CC731C3F4D678499E52F /* LAContextMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BA5A62DA4B543827FF82354 /* LAContextMock.swift */; }; E481C8FDCB6C089963C95344 /* DeviceKit in Frameworks */ = {isa = PBXBuildFile; productRef = BC01130651CB23340B899032 /* DeviceKit */; }; @@ -1793,7 +1794,6 @@ 6033779EB37259F27F938937 /* ClientProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientProxyProtocol.swift; sourceTree = ""; }; 604A69C081B935D6A38DE6D8 /* UserProfileScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileScreenModels.swift; sourceTree = ""; }; 60C9BAE9F9436B14E4E22E8F /* PinnedItemsBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PinnedItemsBannerView.swift; sourceTree = ""; }; - 60F18AECC9D38C2B6D85F99C /* Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Publisher.swift; sourceTree = ""; }; 61B33F23681660E940BA57F4 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/SAS.strings; sourceTree = ""; }; 622D09D4ECE759189009AEAF /* MapLibreMapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLibreMapView.swift; sourceTree = ""; }; 624244C398804ADC885239AA /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; @@ -1870,7 +1870,6 @@ 7367B3B9A8CAF902220F31D1 /* BugReportFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportFlowCoordinator.swift; sourceTree = ""; }; 73A5C3F7C9C1DA10CAEC6A98 /* VoiceMessageRecordingComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRecordingComposer.swift; sourceTree = ""; }; 7447C0AD7EF302CD027D6230 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/SAS.strings; sourceTree = ""; }; - 74611A4182DCF5F4D42696EC /* XCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTestCase.swift; sourceTree = ""; }; 7463464054DDF194C54F0B04 /* LogViewerScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogViewerScreenViewModelProtocol.swift; sourceTree = ""; }; 74653BE903970C0E36867D46 /* GlobalSearchScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalSearchScreenCoordinator.swift; sourceTree = ""; }; 7475C5AE20BA896930907EA8 /* AudioRoomTimelineItemContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRoomTimelineItemContent.swift; sourceTree = ""; }; @@ -1955,6 +1954,7 @@ 85666E40F7E817809B4FD787 /* ComposerToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerToolbar.swift; sourceTree = ""; }; 8585C636A10B8141A7AE909F /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/InfoPlist.strings; sourceTree = ""; }; 858DA81F2ACF484B7CAD6AE4 /* KnockedRoomProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnockedRoomProxy.swift; sourceTree = ""; }; + 85A1941B874A3BE9CDDF43EF /* XCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTestCase.swift; sourceTree = ""; }; 85EB16E7FE59A947CA441531 /* MediaProviderProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaProviderProtocol.swift; sourceTree = ""; }; 8609BE4CA71C30D1FCE3AF9B /* AuthenticationStartScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreenModels.swift; sourceTree = ""; }; 8610C1D21565C950BCA6A454 /* AppLockSetupSettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupSettingsScreenViewModelProtocol.swift; sourceTree = ""; }; @@ -3562,6 +3562,7 @@ 2BFDCA5A09EE70BC17F2EFA7 /* URLComponents.swift */, AE40D4A5DD857AC16EED945A /* URLSession.swift */, 897DF5E9A70CE05A632FC8AF /* UTType.swift */, + 85A1941B874A3BE9CDDF43EF /* XCTestCase.swift */, E992D7B8BE54B2AB454613AF /* XCUIElement.swift */, ); path = Extensions; @@ -4075,15 +4076,6 @@ path = Settings; sourceTree = ""; }; - 70C5B842301AC281DF374E41 /* Extensions */ = { - isa = PBXGroup; - children = ( - 60F18AECC9D38C2B6D85F99C /* Publisher.swift */, - 74611A4182DCF5F4D42696EC /* XCTestCase.swift */, - ); - path = Extensions; - sourceTree = ""; - }; 70CC0CDA4AFDF8299C56ADE7 /* QRCode */ = { isa = PBXGroup; children = ( @@ -4221,7 +4213,6 @@ D93C94C30E3135BC9290DE13 /* VoiceMessageRecorderTests.swift */, 53280D2292E6C9C7821773FD /* UserSession */, 9613851C68D8C01EABFB3569 /* AppLock */, - 70C5B842301AC281DF374E41 /* Extensions */, A6AA0A048CAE428A5CA4CBBB /* LayoutTests */, 7583EAC171059A86B767209F /* MediaProvider */, 7DBC911559934065993A5FF4 /* NotificationManager */, @@ -6629,7 +6620,7 @@ 3982E60F9C126437D5E488A3 /* PillContextTests.swift in Sources */, 2D2D8A53B35BE8D8A01449C6 /* PinnedEventsBannerStateTests.swift in Sources */, FF7E8ECC8E7E1D1851517536 /* PollFormScreenViewModelTests.swift in Sources */, - D415764645491F10344FC6AC /* Publisher.swift in Sources */, + E3EBC3BF7CE3960B41757BAA /* Publisher.swift in Sources */, BDC4EB54CC3036730475CB8B /* QRCodeLoginScreenViewModelTests.swift in Sources */, D53B80EF02C1062E68659EDD /* ReportContentViewModelTests.swift in Sources */, 09D3D7D115318CAD131B4FE7 /* ResolveVerifiedUserSendFailureScreenViewModelTests.swift in Sources */, @@ -6685,7 +6676,7 @@ 21AFEFB8CEFE56A3811A1F5B /* VoiceMessageCacheTests.swift in Sources */, 44BDD670FF9095ACE240A3A2 /* VoiceMessageMediaManagerTests.swift in Sources */, A3D7110C1E75E7B4A73BE71C /* VoiceMessageRecorderTests.swift in Sources */, - 3116693C5EB476E028990416 /* XCTestCase.swift in Sources */, + 1443CEEE42491CF7CD8A146A /* XCTestCase.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6695,6 +6686,7 @@ files = ( 038AB2E86960FD240231D4C2 /* GeneratedPreviewTests.swift in Sources */, ED635D7F00FA07E94D3CE1E8 /* PreviewTests.swift in Sources */, + 6A916606A8B92FE8A990A219 /* XCTestCase.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ElementX/Sources/Other/Extensions/Publisher.swift b/ElementX/Sources/Other/Extensions/Publisher.swift index 405eeceebb..8b10039cf1 100644 --- a/ElementX/Sources/Other/Extensions/Publisher.swift +++ b/ElementX/Sources/Other/Extensions/Publisher.swift @@ -36,3 +36,17 @@ extension Publisher where Output == String, Failure == Never { } } } + +extension Published.Publisher { + /// Returns the next output from the publisher skipping the current value stored into it (which is readable from the @Published property itself). + /// - Returns: the next output from the publisher + var nextValue: Output? { + get async { + var iterator = values.makeAsyncIterator() + + // skips the publisher's current value + _ = await iterator.next() + return await iterator.next() + } + } +} diff --git a/ElementX/Sources/Other/Extensions/Snapshotting.swift b/ElementX/Sources/Other/Extensions/Snapshotting.swift index 7de5ca95bb..d2a5b13f82 100644 --- a/ElementX/Sources/Other/Extensions/Snapshotting.swift +++ b/ElementX/Sources/Other/Extensions/Snapshotting.swift @@ -14,33 +14,43 @@ // limitations under the License. // +import Combine import SwiftUI -public struct SnapshotDelayPreferenceKey: PreferenceKey { - public static var defaultValue: TimeInterval = 0.0 +struct SnapshotPrecisionPreferenceKey: PreferenceKey { + static var defaultValue: Float = 1.0 - public static func reduce(value: inout TimeInterval, nextValue: () -> TimeInterval) { + static func reduce(value: inout Float, nextValue: () -> Float) { value = nextValue() } } -public struct SnapshotPrecisionPreferenceKey: PreferenceKey { - public static var defaultValue: Float = 1.0 +struct SnapshotPerceptualPrecisionPreferenceKey: PreferenceKey { + static var defaultValue: Float = 0.98 - public static func reduce(value: inout Float, nextValue: () -> Float) { + static func reduce(value: inout Float, nextValue: () -> Float) { value = nextValue() } } -public struct SnapshotPerceptualPrecisionPreferenceKey: PreferenceKey { - public static var defaultValue: Float = 0.98 +struct FulfillmentPublisherEquatableWrapper: Equatable { + let publisher: AnyPublisher? + + // Publisher equatability complicates things but, luckily, we're only interesting in them changing from nil + static func == (lhs: FulfillmentPublisherEquatableWrapper, rhs: FulfillmentPublisherEquatableWrapper) -> Bool { + lhs.publisher != nil && rhs.publisher != nil + } +} + +struct SnapshotFulfillmentPublisherPreferenceKey: PreferenceKey { + static var defaultValue: FulfillmentPublisherEquatableWrapper? - public static func reduce(value: inout Float, nextValue: () -> Float) { + static func reduce(value: inout FulfillmentPublisherEquatableWrapper?, nextValue: () -> FulfillmentPublisherEquatableWrapper?) { value = nextValue() } } -public extension SwiftUI.View { +extension SwiftUI.View { /// Use this modifier when you want to apply snapshot-specific preferences, /// like delay and precision, to the view. /// These preferences can then be retrieved and used elsewhere in your view hierarchy. @@ -49,10 +59,11 @@ public extension SwiftUI.View { /// - delay: The delay time in seconds that you want to set as a preference to the View. /// - precision: The percentage of pixels that must match. /// - perceptualPrecision: The percentage a pixel must match the source pixel to be considered a match. 98-99% mimics the precision of the human eye. - @inlinable - func snapshotPreferences(delay: TimeInterval = .zero, precision: Float = 1.0, perceptualPrecision: Float = 0.98) -> some SwiftUI.View { - preference(key: SnapshotDelayPreferenceKey.self, value: delay) - .preference(key: SnapshotPrecisionPreferenceKey.self, value: precision) + func snapshotPreferences(expect fulfillmentPublisher: (any Publisher)? = nil, + precision: Float = 1.0, + perceptualPrecision: Float = 0.98) -> some SwiftUI.View { + preference(key: SnapshotPrecisionPreferenceKey.self, value: precision) .preference(key: SnapshotPerceptualPrecisionPreferenceKey.self, value: perceptualPrecision) + .preference(key: SnapshotFulfillmentPublisherPreferenceKey.self, value: FulfillmentPublisherEquatableWrapper(publisher: fulfillmentPublisher?.eraseToAnyPublisher())) } } diff --git a/UnitTests/Sources/Extensions/XCTestCase.swift b/ElementX/Sources/Other/Extensions/XCTestCase.swift similarity index 100% rename from UnitTests/Sources/Extensions/XCTestCase.swift rename to ElementX/Sources/Other/Extensions/XCTestCase.swift diff --git a/ElementX/Sources/Screens/Authentication/LoginScreen/View/LoginScreen.swift b/ElementX/Sources/Screens/Authentication/LoginScreen/View/LoginScreen.swift index 1d782858e6..a35ebc546a 100644 --- a/ElementX/Sources/Screens/Authentication/LoginScreen/View/LoginScreen.swift +++ b/ElementX/Sources/Screens/Authentication/LoginScreen/View/LoginScreen.swift @@ -136,20 +136,23 @@ struct LoginScreen_Previews: PreviewProvider, TestablePreview { NavigationStack { LoginScreen(context: viewModel.context) } + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + state.homeserver.loginMode == .password + }) .previewDisplayName("matrix.org") - .snapshotPreferences(delay: 1) NavigationStack { LoginScreen(context: credentialsViewModel.context) } + .snapshotPreferences(expect: credentialsViewModel.context.$viewState.map { state in + state.homeserver.loginMode == .password + }) .previewDisplayName("Credentials Entered") - .snapshotPreferences(delay: 1) NavigationStack { LoginScreen(context: unconfiguredViewModel.context) } .previewDisplayName("Unsupported") - .snapshotPreferences(delay: 1) } static func makeViewModel(homeserverAddress: String = "matrix.org", withCredentials: Bool = false) -> LoginScreenViewModel { diff --git a/ElementX/Sources/Screens/Authentication/ServerSelectionScreen/View/ServerSelectionScreen.swift b/ElementX/Sources/Screens/Authentication/ServerSelectionScreen/View/ServerSelectionScreen.swift index b39a92e416..34d8167470 100644 --- a/ElementX/Sources/Screens/Authentication/ServerSelectionScreen/View/ServerSelectionScreen.swift +++ b/ElementX/Sources/Screens/Authentication/ServerSelectionScreen/View/ServerSelectionScreen.swift @@ -107,7 +107,9 @@ struct ServerSelection_Previews: PreviewProvider, TestablePreview { NavigationStack { ServerSelectionScreen(context: invalidViewModel.context) } - .snapshotPreferences(delay: 1) + .snapshotPreferences(expect: invalidViewModel.context.$viewState.map { state in + state.hasValidationError == true + }) } static func makeViewModel(for homeserverAddress: String) -> ServerSelectionScreenViewModel { diff --git a/ElementX/Sources/Screens/CreateRoom/View/CreateRoomScreen.swift b/ElementX/Sources/Screens/CreateRoom/View/CreateRoomScreen.swift index 3fed4c0a37..8f9a08b582 100644 --- a/ElementX/Sources/Screens/CreateRoom/View/CreateRoomScreen.swift +++ b/ElementX/Sources/Screens/CreateRoom/View/CreateRoomScreen.swift @@ -332,12 +332,16 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview { NavigationStack { CreateRoomScreen(context: publicRoomInvalidAliasViewModel.context) } - .snapshotPreferences(delay: 1.5) + .snapshotPreferences(expect: publicRoomExistingAliasViewModel.context.$viewState.map { state in + !state.aliasErrors.isEmpty + }) .previewDisplayName("Create Public Room, invalid alias") NavigationStack { CreateRoomScreen(context: publicRoomExistingAliasViewModel.context) } - .snapshotPreferences(delay: 1.5) + .snapshotPreferences(expect: publicRoomExistingAliasViewModel.context.$viewState.map { state in + !state.aliasErrors.isEmpty + }) .previewDisplayName("Create Public Room, existing alias") } } diff --git a/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift b/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift index 539b31467b..f0e2226677 100644 --- a/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift +++ b/ElementX/Sources/Screens/EmojiPickerScreen/View/EmojiPickerScreen.swift @@ -97,7 +97,9 @@ struct EmojiPickerScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { EmojiPickerScreen(context: viewModel.context, selectedEmojis: ["😀", "😄"]) .previewDisplayName("Screen") - .snapshotPreferences(delay: 0.5) + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + !state.categories.isEmpty + }) } } diff --git a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift index 9320acd2c1..80ef96eb12 100644 --- a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift @@ -152,16 +152,17 @@ struct TimelineMediaPreviewDetailsView_Previews: PreviewProvider, TestablePrevie TimelineMediaPreviewDetailsView(item: viewModel.state.currentItem, context: viewModel.context) .previewDisplayName("Image") - .snapshotPreferences(delay: 0.1) + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + state.currentItemActions?.secondaryActions.contains(.redact) ?? false + }) + TimelineMediaPreviewDetailsView(item: unknownTypeViewModel.state.currentItem, context: unknownTypeViewModel.context) .previewDisplayName("Unknown type") - .snapshotPreferences(delay: 0.1) TimelineMediaPreviewDetailsView(item: presentedOnRoomViewModel.state.currentItem, context: presentedOnRoomViewModel.context) .previewDisplayName("Incoming on Room") - .snapshotPreferences(delay: 0.1) } static func makeViewModel(contentType: UTType? = nil, isOutgoing: Bool = false, isPresentedOnRoomScreen: Bool = false) -> TimelineMediaPreviewViewModel { diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index 027e1819e7..18e978f0db 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -196,19 +196,26 @@ struct HomeScreen_Previews: PreviewProvider, TestablePreview { NavigationStack { HomeScreen(context: loadingViewModel.context) } + .snapshotPreferences(expect: loadedViewModel.context.$viewState.map { state in + state.roomListMode == .skeletons + }) .previewDisplayName("Loading") NavigationStack { HomeScreen(context: emptyViewModel.context) } + .snapshotPreferences(expect: emptyViewModel.context.$viewState.map { state in + state.roomListMode == .empty + }) .previewDisplayName("Empty") - .snapshotPreferences(delay: 4.0) NavigationStack { HomeScreen(context: loadedViewModel.context) } + .snapshotPreferences(expect: loadedViewModel.context.$viewState.map { state in + state.roomListMode == .rooms + }) .previewDisplayName("Loaded") - .snapshotPreferences(delay: 4.0) } static func viewModel(_ mode: HomeScreenRoomListMode) -> HomeScreenViewModel { diff --git a/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift b/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift index 266d713068..1e048d4754 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift @@ -202,32 +202,42 @@ struct JoinRoomScreen_Previews: PreviewProvider, TestablePreview { NavigationStack { JoinRoomScreen(context: unknownViewModel.context) } + .snapshotPreferences(expect: unknownViewModel.context.$viewState.map { state in + state.roomDetails != nil + }) .previewDisplayName("Unknown") - .snapshotPreferences(delay: 0.25) NavigationStack { JoinRoomScreen(context: knockViewModel.context) } + .snapshotPreferences(expect: knockViewModel.context.$viewState.map { state in + state.roomDetails != nil + }) .previewDisplayName("Knock") - .snapshotPreferences(delay: 0.25) NavigationStack { JoinRoomScreen(context: joinViewModel.context) } + .snapshotPreferences(expect: joinViewModel.context.$viewState.map { state in + state.roomDetails != nil + }) .previewDisplayName("Join") - .snapshotPreferences(delay: 0.25) NavigationStack { JoinRoomScreen(context: inviteViewModel.context) } + .snapshotPreferences(expect: inviteViewModel.context.$viewState.map { state in + state.roomDetails != nil + }) .previewDisplayName("Invite") - .snapshotPreferences(delay: 0.25) NavigationStack { JoinRoomScreen(context: knockedViewModel.context) } + .snapshotPreferences(expect: knockedViewModel.context.$viewState.map { state in + state.roomDetails != nil + }) .previewDisplayName("Knocked") - .snapshotPreferences(delay: 0.25) } static func makeViewModel(mode: JoinRoomScreenInteractionMode) -> JoinRoomScreenViewModel { diff --git a/ElementX/Sources/Screens/KnockRequestsListScreen/View/KnockRequestsListScreen.swift b/ElementX/Sources/Screens/KnockRequestsListScreen/View/KnockRequestsListScreen.swift index 7adebe7033..7ef1affea5 100644 --- a/ElementX/Sources/Screens/KnockRequestsListScreen/View/KnockRequestsListScreen.swift +++ b/ElementX/Sources/Screens/KnockRequestsListScreen/View/KnockRequestsListScreen.swift @@ -127,23 +127,32 @@ struct KnockRequestsListScreen_Previews: PreviewProvider, TestablePreview { NavigationStack { KnockRequestsListScreen(context: viewModel.context) } - .snapshotPreferences(delay: 0.2) + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + state.shouldDisplayRequests == true + }) NavigationStack { KnockRequestsListScreen(context: singleRequestViewModel.context) } + .snapshotPreferences(expect: singleRequestViewModel.context.$viewState.map { state in + state.shouldDisplayRequests == true + }) .previewDisplayName("Single Request") - .snapshotPreferences(delay: 0.2) - + NavigationStack { KnockRequestsListScreen(context: emptyViewModel.context) } + .snapshotPreferences(expect: emptyViewModel.context.$viewState.map { state in + state.shouldDisplayEmptyView == true + }) .previewDisplayName("Empty state") - .snapshotPreferences(delay: 0.2) NavigationStack { KnockRequestsListScreen(context: loadingViewModel.context) } + .snapshotPreferences(expect: loadingViewModel.context.$viewState.map { state in + state.isLoading == true + }) .previewDisplayName("Loading state") } } diff --git a/ElementX/Sources/Screens/Onboarding/IdentityConfirmationScreen/View/IdentityConfirmationScreen.swift b/ElementX/Sources/Screens/Onboarding/IdentityConfirmationScreen/View/IdentityConfirmationScreen.swift index d81d14944c..f05fe9433a 100644 --- a/ElementX/Sources/Screens/Onboarding/IdentityConfirmationScreen/View/IdentityConfirmationScreen.swift +++ b/ElementX/Sources/Screens/Onboarding/IdentityConfirmationScreen/View/IdentityConfirmationScreen.swift @@ -108,7 +108,9 @@ struct IdentityConfirmationScreen_Previews: PreviewProvider, TestablePreview { NavigationStack { IdentityConfirmationScreen(context: viewModel.context) } - .snapshotPreferences(delay: 1) + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + state.availableActions.contains([.interactiveVerification, .recovery]) + }) } private static var viewModel: IdentityConfirmationScreenViewModel { diff --git a/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift b/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift index 9705d0ce3b..6a64dc2633 100644 --- a/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift @@ -174,12 +174,13 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview { RoomDetailsEditScreen(context: readOnlyViewModel.context) } .previewDisplayName("Read only") - .snapshotPreferences(delay: 0.25) NavigationStack { RoomDetailsEditScreen(context: editableViewModel.context) } + .snapshotPreferences(expect: editableViewModel.context.$viewState.map { state in + state.canEditTopic == true + }) .previewDisplayName("Editable") - .snapshotPreferences(delay: 0.25) } } diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift index d68b6910aa..ff6467d50e 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift @@ -419,13 +419,21 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { RoomDetailsScreen(context: simpleRoomViewModel.context) + .snapshotPreferences(expect: simpleRoomViewModel.context.$viewState.map { state in + state.shortcuts.contains(.invite) + }) .previewDisplayName("Simple Room") - .snapshotPreferences(delay: 2) + RoomDetailsScreen(context: dmRoomViewModel.context) + .snapshotPreferences(expect: dmRoomViewModel.context.$viewState.map { state in + state.accountOwner != nil + }) .previewDisplayName("DM Room") - .snapshotPreferences(delay: 0.25) + RoomDetailsScreen(context: genericRoomViewModel.context) + .snapshotPreferences(expect: genericRoomViewModel.context.$viewState.map { state in + state.shortcuts.contains(.invite) + }) .previewDisplayName("Generic Room") - .snapshotPreferences(delay: 0.25) } } diff --git a/ElementX/Sources/Screens/RoomDirectorySearchScreen/View/RoomDirectorySearchScreen.swift b/ElementX/Sources/Screens/RoomDirectorySearchScreen/View/RoomDirectorySearchScreen.swift index 81f9605e29..73a9410cfe 100644 --- a/ElementX/Sources/Screens/RoomDirectorySearchScreen/View/RoomDirectorySearchScreen.swift +++ b/ElementX/Sources/Screens/RoomDirectorySearchScreen/View/RoomDirectorySearchScreen.swift @@ -98,6 +98,5 @@ struct RoomDirectorySearchScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { RoomDirectorySearchScreen(context: viewModel.context) - .snapshotPreferences(delay: 1.0) } } diff --git a/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift index 490d3a7ae6..18b9863ba9 100644 --- a/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift @@ -139,17 +139,28 @@ struct RoomMemberDetailsScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { RoomMemberDetailsScreen(context: verifiedUserViewModel.context) + .snapshotPreferences(expect: verifiedUserViewModel.context.$viewState.map { state in + state.isVerified == true + }) .previewDisplayName("Verified User") - .snapshotPreferences(delay: 0.25) + RoomMemberDetailsScreen(context: otherUserViewModel.context) + .snapshotPreferences(expect: otherUserViewModel.context.$viewState.map { state in + state.memberDetails?.role == .user + }) .previewDisplayName("Other User") - .snapshotPreferences(delay: 0.25) + RoomMemberDetailsScreen(context: accountOwnerViewModel.context) + .snapshotPreferences(expect: accountOwnerViewModel.context.$viewState.map { state in + state.isOwnMemberDetails == true + }) .previewDisplayName("Account Owner") - .snapshotPreferences(delay: 0.25) + RoomMemberDetailsScreen(context: ignoredUserViewModel.context) + .snapshotPreferences(expect: ignoredUserViewModel.context.$viewState.map { state in + state.memberDetails?.isIgnored ?? false + }) .previewDisplayName("Ignored User") - .snapshotPreferences(delay: 0.25) } static func makeViewModel(member: RoomMemberProxyMock) -> RoomMemberDetailsScreenViewModel { diff --git a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListManageMemberSheet.swift b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListManageMemberSheet.swift index 06d007a59e..d6dda75e01 100644 --- a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListManageMemberSheet.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListManageMemberSheet.swift @@ -72,13 +72,11 @@ struct RoomMembersListManageMemberSheet_Previews: PreviewProvider, TestablePrevi actions: [.kick, .ban], context: viewModel.context) .previewDisplayName("Joined") - .snapshotPreferences(delay: 0.2) RoomMembersListManageMemberSheet(member: .init(withProxy: RoomMemberProxyMock.mockBanned[3]), actions: [], context: viewModel.context) .previewDisplayName("Banned") - .snapshotPreferences(delay: 0.2) } } diff --git a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift index a5ac031b32..abf29b6fa0 100644 --- a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift @@ -117,31 +117,41 @@ struct RoomMembersListScreen_Previews: PreviewProvider, TestablePreview { NavigationStack { RoomMembersListScreen(context: viewModel.context) } - .snapshotPreferences(delay: 1.0) + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + !state.visibleJoinedMembers.isEmpty + }) .previewDisplayName("Member") NavigationStack { RoomMembersListScreen(context: invitesViewModel.context) } - .snapshotPreferences(delay: 1.0) + .snapshotPreferences(expect: invitesViewModel.context.$viewState.map { state in + !state.visibleJoinedMembers.isEmpty + }) .previewDisplayName("Invites") NavigationStack { RoomMembersListScreen(context: adminViewModel.context) } - .snapshotPreferences(delay: 1.0) + .snapshotPreferences(expect: adminViewModel.context.$viewState.map { state in + state.canBanUsers == true + }) .previewDisplayName("Admin: Members") NavigationStack { RoomMembersListScreen(context: bannedViewModel.context) } - .snapshotPreferences(delay: 1.0) + .snapshotPreferences(expect: bannedViewModel.context.$viewState.map { state in + state.canBanUsers == true + }) .previewDisplayName("Admin: Banned") NavigationStack { RoomMembersListScreen(context: emptyBannedViewModel.context) } - .snapshotPreferences(delay: 1.0) + .snapshotPreferences(expect: emptyBannedViewModel.context.$viewState.map { state in + state.canBanUsers == true + }) .previewDisplayName("Admin: Empty Banned") } diff --git a/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift b/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift index 0029e48b64..daa2acf87a 100644 --- a/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift +++ b/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift @@ -151,12 +151,10 @@ struct RoomPollsHistoryScreen_Previews: PreviewProvider, TestablePreview { RoomPollsHistoryScreen(context: viewModelEmpty.context) } .previewDisplayName("No polls") - .snapshotPreferences(delay: 1.0) NavigationStack { RoomPollsHistoryScreen(context: viewModel.context) } .previewDisplayName("polls") - .snapshotPreferences(delay: 1.0) } } diff --git a/ElementX/Sources/Screens/SecureBackup/SecureBackupRecoveryKeyScreen/View/SecureBackupRecoveryKeyScreen.swift b/ElementX/Sources/Screens/SecureBackup/SecureBackupRecoveryKeyScreen/View/SecureBackupRecoveryKeyScreen.swift index 51314243eb..6df899d86e 100644 --- a/ElementX/Sources/Screens/SecureBackup/SecureBackupRecoveryKeyScreen/View/SecureBackupRecoveryKeyScreen.swift +++ b/ElementX/Sources/Screens/SecureBackup/SecureBackupRecoveryKeyScreen/View/SecureBackupRecoveryKeyScreen.swift @@ -224,7 +224,7 @@ struct SecureBackupRecoveryKeyScreen: View { struct SecureBackupRecoveryKeyScreen_Previews: PreviewProvider, TestablePreview { static let key = "EsTM njec uHYA yHmh dQdW Nj4o bNRU 9jMN XGMc KUNM UFr5 R8GY" static let notSetUpViewModel = viewModel(recoveryState: .disabled) - static let generatingViewModel = viewModel(recoveryState: .disabled, generateKey: true) + static let generatingViewModel = viewModel(recoveryState: .disabled, generateKey: true, key: key) static let setupViewModel = viewModel(recoveryState: .enabled, generateKey: true, key: key) static let incompleteViewModel = viewModel(recoveryState: .incomplete) static let unknownViewModel = viewModel(recoveryState: .unknown) @@ -239,14 +239,15 @@ struct SecureBackupRecoveryKeyScreen_Previews: PreviewProvider, TestablePreview SecureBackupRecoveryKeyScreen(context: generatingViewModel.context) } .previewDisplayName("Generating") - .snapshotPreferences(delay: 0.25) NavigationStack { SecureBackupRecoveryKeyScreen(context: setupViewModel.context) } + .snapshotPreferences(expect: setupViewModel.context.$viewState.map { state in + state.recoveryKey != nil + }) .previewDisplayName("Set up") - .snapshotPreferences(delay: 0.25) - + NavigationStack { SecureBackupRecoveryKeyScreen(context: incompleteViewModel.context) } diff --git a/ElementX/Sources/Screens/SecureBackup/SecureBackupScreen/View/SecureBackupScreen.swift b/ElementX/Sources/Screens/SecureBackup/SecureBackupScreen/View/SecureBackupScreen.swift index a0aaa17181..d9e4f9c053 100644 --- a/ElementX/Sources/Screens/SecureBackup/SecureBackupScreen/View/SecureBackupScreen.swift +++ b/ElementX/Sources/Screens/SecureBackup/SecureBackupScreen/View/SecureBackupScreen.swift @@ -125,28 +125,37 @@ struct SecureBackupScreen_Previews: PreviewProvider, TestablePreview { static let recoveryIncompleteViewModel = viewModel(keyBackupState: .enabled, recoveryState: .incomplete) static var previews: some View { - Group { - NavigationStack { - SecureBackupScreen(context: bothSetupViewModel.context) - } - .previewDisplayName("Both setup") - - NavigationStack { - SecureBackupScreen(context: onlyKeyBackupSetUpViewModel.context) - } - .previewDisplayName("Only key backup setup") - - NavigationStack { - SecureBackupScreen(context: keyBackupDisabledViewModel.context) - } - .previewDisplayName("Key backup disabled") - - NavigationStack { - SecureBackupScreen(context: recoveryIncompleteViewModel.context) - } - .previewDisplayName("Recovery incomplete") + NavigationStack { + SecureBackupScreen(context: bothSetupViewModel.context) + } + .snapshotPreferences(expect: bothSetupViewModel.context.$viewState.map { state in + state.keyBackupState == .enabled + }) + .previewDisplayName("Both setup") + + NavigationStack { + SecureBackupScreen(context: onlyKeyBackupSetUpViewModel.context) + } + .snapshotPreferences(expect: onlyKeyBackupSetUpViewModel.context.$viewState.map { state in + state.keyBackupState == .enabled + }) + .previewDisplayName("Only key backup setup") + + NavigationStack { + SecureBackupScreen(context: keyBackupDisabledViewModel.context) + } + .snapshotPreferences(expect: keyBackupDisabledViewModel.context.$viewState.map { state in + state.keyBackupState == .unknown + }) + .previewDisplayName("Key backup disabled") + + NavigationStack { + SecureBackupScreen(context: recoveryIncompleteViewModel.context) } - .snapshotPreferences(delay: 1.0) + .snapshotPreferences(expect: recoveryIncompleteViewModel.context.$viewState.map { state in + state.recoveryState == .incomplete + }) + .previewDisplayName("Recovery incomplete") } static func viewModel(keyBackupState: SecureBackupKeyBackupState, diff --git a/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift b/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift index 2c0319c140..114a527acd 100644 --- a/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift +++ b/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift @@ -253,9 +253,14 @@ struct NotificationSettingsScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { NotificationSettingsScreen(context: viewModel.context) - .snapshotPreferences(delay: 2.0) + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + state.settings != nil + }) + NotificationSettingsScreen(context: viewModelConfigurationMismatch.context) - .snapshotPreferences(delay: 2.0) + .snapshotPreferences(expect: viewModelConfigurationMismatch.context.$viewState.map { state in + state.settings != nil + }) .previewDisplayName("Configuration mismatch") } } diff --git a/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift b/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift index 5e8d027eec..45856f5c6d 100644 --- a/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift +++ b/ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift @@ -239,7 +239,9 @@ struct SettingsScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { NavigationStack { SettingsScreen(context: viewModel.context) - .snapshotPreferences(delay: 1.0) + .snapshotPreferences(expect: viewModel.context.$viewState.map { state in + state.accountSessionsListURL != nil + }) } } } diff --git a/ElementX/Sources/Screens/Timeline/View/Replies/TimelineReplyView.swift b/ElementX/Sources/Screens/Timeline/View/Replies/TimelineReplyView.swift index e7a3812ebc..d398305b26 100644 --- a/ElementX/Sources/Screens/Timeline/View/Replies/TimelineReplyView.swift +++ b/ElementX/Sources/Screens/Timeline/View/Replies/TimelineReplyView.swift @@ -321,8 +321,6 @@ struct TimelineReplyView_Previews: PreviewProvider, TestablePreview { } .padding() .environmentObject(viewModel.context) - // Allow member names to load. Reduce precission as the `mockThumbnail` randomly renders slightly differently - .snapshotPreferences(delay: 0.2, precision: 0.98) .previewLayout(.sizeThatFits) } } diff --git a/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift b/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift index cfe3626912..d9a6d99628 100644 --- a/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift +++ b/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift @@ -355,14 +355,12 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview .previewDisplayName("Replies") threads .previewDisplayName("Thread decorator") - .snapshotPreferences(delay: 1) .previewLayout(.fixed(width: 390, height: 1700)) .padding(.bottom, 20) encryptionAuthenticity .previewDisplayName("Encryption Indicators") pinned .previewDisplayName("Pinned messages") - .snapshotPreferences(delay: 1) .previewLayout(.fixed(width: 390, height: 1150)) .padding(.bottom, 20) } diff --git a/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/FormattedBodyText.swift b/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/FormattedBodyText.swift index 565d74f690..bb527e1ed2 100644 --- a/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/FormattedBodyText.swift +++ b/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/FormattedBodyText.swift @@ -205,6 +205,5 @@ struct FormattedBodyText_Previews: PreviewProvider, TestablePreview { .padding() } .previewLayout(.sizeThatFits) - .snapshotPreferences(delay: 0.25) } } diff --git a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift index 228bc3a4ef..16ac6f637c 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift @@ -112,14 +112,22 @@ struct UserProfileScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { UserProfileScreen(context: verifiedUserViewModel.context) + .snapshotPreferences(expect: verifiedUserViewModel.context.$viewState.map { state in + state.isVerified != nil + }) .previewDisplayName("Verified User") - .snapshotPreferences(delay: 0.25) + UserProfileScreen(context: otherUserViewModel.context) + .snapshotPreferences(expect: otherUserViewModel.context.$viewState.map { state in + state.isVerified != nil + }) .previewDisplayName("Other User") - .snapshotPreferences(delay: 0.25) + UserProfileScreen(context: accountOwnerViewModel.context) + .snapshotPreferences(expect: accountOwnerViewModel.context.$viewState.map { state in + state.isVerified != nil + }) .previewDisplayName("Account Owner") - .snapshotPreferences(delay: 0.25) } static func makeViewModel(userID: String) -> UserProfileScreenViewModel { diff --git a/ElementX/SupportingFiles/target.yml b/ElementX/SupportingFiles/target.yml index 1306c5c91d..437f811128 100644 --- a/ElementX/SupportingFiles/target.yml +++ b/ElementX/SupportingFiles/target.yml @@ -224,6 +224,7 @@ targets: sources: - path: ../Sources excludes: + - Other/Extensions/XCTestCase.swift - Other/Extensions/XCUIElement.swift - path: ../Resources - path: ../SupportingFiles diff --git a/PreviewTests/Sources/GeneratedPreviewTests.swift b/PreviewTests/Sources/GeneratedPreviewTests.swift index 4dc11560a7..f2539e99f0 100644 --- a/PreviewTests/Sources/GeneratedPreviewTests.swift +++ b/PreviewTests/Sources/GeneratedPreviewTests.swift @@ -11,1083 +11,1083 @@ extension PreviewTests { // MARK: - PreviewProvider - func test_advancedSettingsScreen() { + func test_advancedSettingsScreen() async throws { for preview in AdvancedSettingsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_analyticsPromptScreen() { + func test_analyticsPromptScreen() async throws { for preview in AnalyticsPromptScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_analyticsSettingsScreen() { + func test_analyticsSettingsScreen() async throws { for preview in AnalyticsSettingsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_appLockScreen() { + func test_appLockScreen() async throws { for preview in AppLockScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_appLockSetupBiometricsScreen() { + func test_appLockSetupBiometricsScreen() async throws { for preview in AppLockSetupBiometricsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_appLockSetupPINScreen() { + func test_appLockSetupPINScreen() async throws { for preview in AppLockSetupPINScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_appLockSetupSettingsScreen() { + func test_appLockSetupSettingsScreen() async throws { for preview in AppLockSetupSettingsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_audioMediaEventsTimelineView() { + func test_audioMediaEventsTimelineView() async throws { for preview in AudioMediaEventsTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_audioRoomTimelineView() { + func test_audioRoomTimelineView() async throws { for preview in AudioRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_authenticationStartScreen() { + func test_authenticationStartScreen() async throws { for preview in AuthenticationStartScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_avatarHeaderView() { + func test_avatarHeaderView() async throws { for preview in AvatarHeaderView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_badgeLabel() { + func test_badgeLabel() async throws { for preview in BadgeLabel_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_bigIcon() { + func test_bigIcon() async throws { for preview in BigIcon_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_blockedUsersScreen() { + func test_blockedUsersScreen() async throws { for preview in BlockedUsersScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_bugReport() { + func test_bugReport() async throws { for preview in BugReport_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_callInviteRoomTimelineView() { + func test_callInviteRoomTimelineView() async throws { for preview in CallInviteRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_callNotificationRoomTimelineView() { + func test_callNotificationRoomTimelineView() async throws { for preview in CallNotificationRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_collapsibleRoomTimelineView() { + func test_collapsibleRoomTimelineView() async throws { for preview in CollapsibleRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_completionSuggestion() { + func test_completionSuggestion() async throws { for preview in CompletionSuggestion_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_composerToolbar() { + func test_composerToolbar() async throws { for preview in ComposerToolbar_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_createRoom() { + func test_createRoom() async throws { for preview in CreateRoom_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_deactivateAccountScreen() { + func test_deactivateAccountScreen() async throws { for preview in DeactivateAccountScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_emojiPickerScreenHeaderView() { + func test_emojiPickerScreenHeaderView() async throws { for preview in EmojiPickerScreenHeaderView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_emojiPickerScreen() { + func test_emojiPickerScreen() async throws { for preview in EmojiPickerScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_emoteRoomTimelineView() { + func test_emoteRoomTimelineView() async throws { for preview in EmoteRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_encryptedRoomTimelineView() { + func test_encryptedRoomTimelineView() async throws { for preview in EncryptedRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_encryptionResetPasswordScreen() { + func test_encryptionResetPasswordScreen() async throws { for preview in EncryptionResetPasswordScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_encryptionResetScreen() { + func test_encryptionResetScreen() async throws { for preview in EncryptionResetScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_estimatedWaveformView() { + func test_estimatedWaveformView() async throws { for preview in EstimatedWaveformView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_fileMediaEventsTimelineView() { + func test_fileMediaEventsTimelineView() async throws { for preview in FileMediaEventsTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_fileRoomTimelineView() { + func test_fileRoomTimelineView() async throws { for preview in FileRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_formButtonStyles() { + func test_formButtonStyles() async throws { for preview in FormButtonStyles_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_formattedBodyText() { + func test_formattedBodyText() async throws { for preview in FormattedBodyText_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_formattingToolbar() { + func test_formattingToolbar() async throws { for preview in FormattingToolbar_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_fullscreenDialog() { + func test_fullscreenDialog() async throws { for preview in FullscreenDialog_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_globalSearchScreenListRow() { + func test_globalSearchScreenListRow() async throws { for preview in GlobalSearchScreenListRow_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_globalSearchScreen() { + func test_globalSearchScreen() async throws { for preview in GlobalSearchScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_highlightedTimelineItemModifier() { + func test_highlightedTimelineItemModifier() async throws { for preview in HighlightedTimelineItemModifier_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_homeScreenEmptyStateView() { + func test_homeScreenEmptyStateView() async throws { for preview in HomeScreenEmptyStateView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_homeScreenInviteCell() { + func test_homeScreenInviteCell() async throws { for preview in HomeScreenInviteCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_homeScreenKnockedCell() { + func test_homeScreenKnockedCell() async throws { for preview in HomeScreenKnockedCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_homeScreenRecoveryKeyConfirmationBanner() { + func test_homeScreenRecoveryKeyConfirmationBanner() async throws { for preview in HomeScreenRecoveryKeyConfirmationBanner_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_homeScreenRoomCell() { + func test_homeScreenRoomCell() async throws { for preview in HomeScreenRoomCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_homeScreenSlidingSyncMigrationBanner() { + func test_homeScreenSlidingSyncMigrationBanner() async throws { for preview in HomeScreenSlidingSyncMigrationBanner_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_homeScreen() { + func test_homeScreen() async throws { for preview in HomeScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_identityConfirmationScreen() { + func test_identityConfirmationScreen() async throws { for preview in IdentityConfirmationScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_identityConfirmedScreen() { + func test_identityConfirmedScreen() async throws { for preview in IdentityConfirmedScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_imageMediaEventsTimelineView() { + func test_imageMediaEventsTimelineView() async throws { for preview in ImageMediaEventsTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_imageRoomTimelineView() { + func test_imageRoomTimelineView() async throws { for preview in ImageRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_inviteUsersScreenSelectedItem() { + func test_inviteUsersScreenSelectedItem() async throws { for preview in InviteUsersScreenSelectedItem_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_inviteUsersScreen() { + func test_inviteUsersScreen() async throws { for preview in InviteUsersScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_joinRoomScreen() { + func test_joinRoomScreen() async throws { for preview in JoinRoomScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_knockRequestCell() { + func test_knockRequestCell() async throws { for preview in KnockRequestCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_knockRequestsBannerView() { + func test_knockRequestsBannerView() async throws { for preview in KnockRequestsBannerView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_knockRequestsListEmptyStateView() { + func test_knockRequestsListEmptyStateView() async throws { for preview in KnockRequestsListEmptyStateView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_knockRequestsListScreen() { + func test_knockRequestsListScreen() async throws { for preview in KnockRequestsListScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_legalInformationScreen() { + func test_legalInformationScreen() async throws { for preview in LegalInformationScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_loadableImage() { + func test_loadableImage() async throws { for preview in LoadableImage_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_locationMarkerView() { + func test_locationMarkerView() async throws { for preview in LocationMarkerView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_locationRoomTimelineView() { + func test_locationRoomTimelineView() async throws { for preview in LocationRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_loginScreen() { + func test_loginScreen() async throws { for preview in LoginScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_longPressWithFeedback() { + func test_longPressWithFeedback() async throws { for preview in LongPressWithFeedback_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_mapLibreStaticMapView() { + func test_mapLibreStaticMapView() async throws { for preview in MapLibreStaticMapView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_matrixUserPermalink() { + func test_matrixUserPermalink() async throws { for preview in MatrixUserPermalink_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_mediaEventsTimelineScreen() { + func test_mediaEventsTimelineScreen() async throws { for preview in MediaEventsTimelineScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_mediaUploadPreviewScreen() { + func test_mediaUploadPreviewScreen() async throws { for preview in MediaUploadPreviewScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_mentionSuggestionItemView() { + func test_mentionSuggestionItemView() async throws { for preview in MentionSuggestionItemView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_messageComposerTextField() { + func test_messageComposerTextField() async throws { for preview in MessageComposerTextField_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_messageComposer() { + func test_messageComposer() async throws { for preview in MessageComposer_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_messageForwardingScreen() { + func test_messageForwardingScreen() async throws { for preview in MessageForwardingScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_messageText() { + func test_messageText() async throws { for preview in MessageText_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_noticeRoomTimelineView() { + func test_noticeRoomTimelineView() async throws { for preview in NoticeRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_notificationPermissionsScreen() { + func test_notificationPermissionsScreen() async throws { for preview in NotificationPermissionsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_notificationSettingsEditScreenRoomCell() { + func test_notificationSettingsEditScreenRoomCell() async throws { for preview in NotificationSettingsEditScreenRoomCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_notificationSettingsEditScreen() { + func test_notificationSettingsEditScreen() async throws { for preview in NotificationSettingsEditScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_notificationSettingsScreen() { + func test_notificationSettingsScreen() async throws { for preview in NotificationSettingsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pINTextField() { + func test_pINTextField() async throws { for preview in PINTextField_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_paginationIndicatorRoomTimelineView() { + func test_paginationIndicatorRoomTimelineView() async throws { for preview in PaginationIndicatorRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pillView() { + func test_pillView() async throws { for preview in PillView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pinnedEventsTimelineScreen() { + func test_pinnedEventsTimelineScreen() async throws { for preview in PinnedEventsTimelineScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pinnedItemsBannerView() { + func test_pinnedItemsBannerView() async throws { for preview in PinnedItemsBannerView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pinnedItemsIndicatorView() { + func test_pinnedItemsIndicatorView() async throws { for preview in PinnedItemsIndicatorView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_placeholderAvatarImage() { + func test_placeholderAvatarImage() async throws { for preview in PlaceholderAvatarImage_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_placeholderScreen() { + func test_placeholderScreen() async throws { for preview in PlaceholderScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pollFormScreen() { + func test_pollFormScreen() async throws { for preview in PollFormScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pollOptionView() { + func test_pollOptionView() async throws { for preview in PollOptionView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pollRoomTimelineView() { + func test_pollRoomTimelineView() async throws { for preview in PollRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_pollView() { + func test_pollView() async throws { for preview in PollView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_qRCodeLoginScreen() { + func test_qRCodeLoginScreen() async throws { for preview in QRCodeLoginScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_reactionsSummaryView() { + func test_reactionsSummaryView() async throws { for preview in ReactionsSummaryView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_readMarkerRoomTimelineView() { + func test_readMarkerRoomTimelineView() async throws { for preview in ReadMarkerRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_readReceiptCell() { + func test_readReceiptCell() async throws { for preview in ReadReceiptCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_readReceiptsSummaryView() { + func test_readReceiptsSummaryView() async throws { for preview in ReadReceiptsSummaryView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_redactedRoomTimelineView() { + func test_redactedRoomTimelineView() async throws { for preview in RedactedRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_reportContentScreen() { + func test_reportContentScreen() async throws { for preview in ReportContentScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_resolveVerifiedUserSendFailureScreen() { + func test_resolveVerifiedUserSendFailureScreen() async throws { for preview in ResolveVerifiedUserSendFailureScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomAttachmentPicker() { + func test_roomAttachmentPicker() async throws { for preview in RoomAttachmentPicker_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomAvatarImage() { + func test_roomAvatarImage() async throws { for preview in RoomAvatarImage_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomChangePermissionsScreen() { + func test_roomChangePermissionsScreen() async throws { for preview in RoomChangePermissionsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomChangeRolesScreenRow() { + func test_roomChangeRolesScreenRow() async throws { for preview in RoomChangeRolesScreenRow_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomChangeRolesScreenSelectedItem() { + func test_roomChangeRolesScreenSelectedItem() async throws { for preview in RoomChangeRolesScreenSelectedItem_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomChangeRolesScreen() { + func test_roomChangeRolesScreen() async throws { for preview in RoomChangeRolesScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomDetailsEditScreen() { + func test_roomDetailsEditScreen() async throws { for preview in RoomDetailsEditScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomDetailsScreen() { + func test_roomDetailsScreen() async throws { for preview in RoomDetailsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomDirectorySearchCell() { + func test_roomDirectorySearchCell() async throws { for preview in RoomDirectorySearchCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomDirectorySearchScreen() { + func test_roomDirectorySearchScreen() async throws { for preview in RoomDirectorySearchScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomDirectorySearchView() { + func test_roomDirectorySearchView() async throws { for preview in RoomDirectorySearchView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomHeaderView() { + func test_roomHeaderView() async throws { for preview in RoomHeaderView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomInviterLabel() { + func test_roomInviterLabel() async throws { for preview in RoomInviterLabel_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomListFilterView() { + func test_roomListFilterView() async throws { for preview in RoomListFilterView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomListFiltersEmptyStateView() { + func test_roomListFiltersEmptyStateView() async throws { for preview in RoomListFiltersEmptyStateView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomListFiltersView() { + func test_roomListFiltersView() async throws { for preview in RoomListFiltersView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomMemberDetailsScreen() { + func test_roomMemberDetailsScreen() async throws { for preview in RoomMemberDetailsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomMembersListManageMemberSheet() { + func test_roomMembersListManageMemberSheet() async throws { for preview in RoomMembersListManageMemberSheet_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomMembersListMemberCell() { + func test_roomMembersListMemberCell() async throws { for preview in RoomMembersListMemberCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomMembersListScreen() { + func test_roomMembersListScreen() async throws { for preview in RoomMembersListScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomNotificationSettingsCustomSectionView() { + func test_roomNotificationSettingsCustomSectionView() async throws { for preview in RoomNotificationSettingsCustomSectionView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomNotificationSettingsScreen() { + func test_roomNotificationSettingsScreen() async throws { for preview in RoomNotificationSettingsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomNotificationSettingsUserDefinedScreen() { + func test_roomNotificationSettingsUserDefinedScreen() async throws { for preview in RoomNotificationSettingsUserDefinedScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomPollsHistoryScreen() { + func test_roomPollsHistoryScreen() async throws { for preview in RoomPollsHistoryScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomRolesAndPermissionsScreen() { + func test_roomRolesAndPermissionsScreen() async throws { for preview in RoomRolesAndPermissionsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomScreenFooterView() { + func test_roomScreenFooterView() async throws { for preview in RoomScreenFooterView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomScreen() { + func test_roomScreen() async throws { for preview in RoomScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_roomSelectionScreen() { + func test_roomSelectionScreen() async throws { for preview in RoomSelectionScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_sFNumberedListView() { + func test_sFNumberedListView() async throws { for preview in SFNumberedListView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_secureBackupKeyBackupScreen() { + func test_secureBackupKeyBackupScreen() async throws { for preview in SecureBackupKeyBackupScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_secureBackupLogoutConfirmationScreen() { + func test_secureBackupLogoutConfirmationScreen() async throws { for preview in SecureBackupLogoutConfirmationScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_secureBackupRecoveryKeyScreen() { + func test_secureBackupRecoveryKeyScreen() async throws { for preview in SecureBackupRecoveryKeyScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_secureBackupScreen() { + func test_secureBackupScreen() async throws { for preview in SecureBackupScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_separatorMediaEventsTimelineView() { + func test_separatorMediaEventsTimelineView() async throws { for preview in SeparatorMediaEventsTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_separatorRoomTimelineView() { + func test_separatorRoomTimelineView() async throws { for preview in SeparatorRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_serverConfirmationScreen() { + func test_serverConfirmationScreen() async throws { for preview in ServerConfirmationScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_serverSelection() { + func test_serverSelection() async throws { for preview in ServerSelection_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_sessionVerificationRequestDetailsView() { + func test_sessionVerificationRequestDetailsView() async throws { for preview in SessionVerificationRequestDetailsView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_sessionVerification() { + func test_sessionVerification() async throws { for preview in SessionVerification_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_settingsScreen() { + func test_settingsScreen() async throws { for preview in SettingsScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_shimmerOverlay() { + func test_shimmerOverlay() async throws { for preview in ShimmerOverlay_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_softLogoutScreen() { + func test_softLogoutScreen() async throws { for preview in SoftLogoutScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_splashScreen() { + func test_splashScreen() async throws { for preview in SplashScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_stackedAvatarsView() { + func test_stackedAvatarsView() async throws { for preview in StackedAvatarsView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_startChatScreen() { + func test_startChatScreen() async throws { for preview in StartChatScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_stateRoomTimelineView() { + func test_stateRoomTimelineView() async throws { for preview in StateRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_staticLocationScreenViewer() { + func test_staticLocationScreenViewer() async throws { for preview in StaticLocationScreenViewer_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_stickerRoomTimelineView() { + func test_stickerRoomTimelineView() async throws { for preview in StickerRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_swipeRightAction() { + func test_swipeRightAction() async throws { for preview in SwipeRightAction_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_swipeToReplyView() { + func test_swipeToReplyView() async throws { for preview in SwipeToReplyView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_textRoomTimelineView() { + func test_textRoomTimelineView() async throws { for preview in TextRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_threadDecorator() { + func test_threadDecorator() async throws { for preview in ThreadDecorator_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineDeliveryStatusView() { + func test_timelineDeliveryStatusView() async throws { for preview in TimelineDeliveryStatusView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineItemBubbledStylerView() { + func test_timelineItemBubbledStylerView() async throws { for preview in TimelineItemBubbledStylerView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineItemDebugView() { + func test_timelineItemDebugView() async throws { for preview in TimelineItemDebugView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineItemMenu() { + func test_timelineItemMenu() async throws { for preview in TimelineItemMenu_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineItemSendInfoLabel() { + func test_timelineItemSendInfoLabel() async throws { for preview in TimelineItemSendInfoLabel_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineItemStyler() { + func test_timelineItemStyler() async throws { for preview in TimelineItemStyler_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineMediaPreviewDetailsView() { + func test_timelineMediaPreviewDetailsView() async throws { for preview in TimelineMediaPreviewDetailsView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineMediaPreviewRedactConfirmationView() { + func test_timelineMediaPreviewRedactConfirmationView() async throws { for preview in TimelineMediaPreviewRedactConfirmationView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineReactionView() { + func test_timelineReactionView() async throws { for preview in TimelineReactionView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineReadReceiptsView() { + func test_timelineReadReceiptsView() async throws { for preview in TimelineReadReceiptsView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineReplyView() { + func test_timelineReplyView() async throws { for preview in TimelineReplyView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineStartRoomTimelineView() { + func test_timelineStartRoomTimelineView() async throws { for preview in TimelineStartRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_timelineView() { + func test_timelineView() async throws { for preview in TimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_typingIndicatorView() { + func test_typingIndicatorView() async throws { for preview in TypingIndicatorView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_unsupportedRoomTimelineView() { + func test_unsupportedRoomTimelineView() async throws { for preview in UnsupportedRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_userDetailsEditScreen() { + func test_userDetailsEditScreen() async throws { for preview in UserDetailsEditScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_userIndicatorModalView() { + func test_userIndicatorModalView() async throws { for preview in UserIndicatorModalView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_userIndicatorToastView() { + func test_userIndicatorToastView() async throws { for preview in UserIndicatorToastView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_userProfileCell() { + func test_userProfileCell() async throws { for preview in UserProfileCell_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_userProfileScreen() { + func test_userProfileScreen() async throws { for preview in UserProfileScreen_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_videoMediaEventsTimelineView() { + func test_videoMediaEventsTimelineView() async throws { for preview in VideoMediaEventsTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_videoRoomTimelineView() { + func test_videoRoomTimelineView() async throws { for preview in VideoRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_visualListItem() { + func test_visualListItem() async throws { for preview in VisualListItem_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessageButton() { + func test_voiceMessageButton() async throws { for preview in VoiceMessageButton_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessageMediaEventsTimelineView() { + func test_voiceMessageMediaEventsTimelineView() async throws { for preview in VoiceMessageMediaEventsTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessagePreviewComposer() { + func test_voiceMessagePreviewComposer() async throws { for preview in VoiceMessagePreviewComposer_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessageRecordingButton() { + func test_voiceMessageRecordingButton() async throws { for preview in VoiceMessageRecordingButton_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessageRecordingComposer() { + func test_voiceMessageRecordingComposer() async throws { for preview in VoiceMessageRecordingComposer_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessageRecordingView() { + func test_voiceMessageRecordingView() async throws { for preview in VoiceMessageRecordingView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessageRoomPlaybackView() { + func test_voiceMessageRoomPlaybackView() async throws { for preview in VoiceMessageRoomPlaybackView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_voiceMessageRoomTimelineView() { + func test_voiceMessageRoomTimelineView() async throws { for preview in VoiceMessageRoomTimelineView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } - func test_waveformCursorView() { + func test_waveformCursorView() async throws { for preview in WaveformCursorView_Previews._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } } diff --git a/PreviewTests/Sources/PreviewTests.swift b/PreviewTests/Sources/PreviewTests.swift index 5558714caf..de3d962c0e 100644 --- a/PreviewTests/Sources/PreviewTests.swift +++ b/PreviewTests/Sources/PreviewTests.swift @@ -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? } // MARK: - SnapshotTesting + Extensions diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Loading.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Loading.png index 43bc504b47..ecc7cf50ee 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Loading.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Loading.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47a99702b22eb7a34297a605c0a148acbd728c6055134118d55ad0fea521e4fe -size 92263 +oid sha256:fbb929cb7177e45396a10b14ff1fddc351cfb6b5a5754fb1f52ef44666ebb3ab +size 92017 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Migrating.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Migrating.png deleted file mode 100644 index 38f3131db5..0000000000 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:82f915f692c622ca6486a0f7a0b8bab6df7959078add40a16ded37593716af57 -size 893292 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Loading.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Loading.png index cd091cfb3b..438b7dbd91 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Loading.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Loading.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79634b4686349a426958f301e37662e6f16cca5a0920289d962f0d453f68008c -size 92979 +oid sha256:686e08e7fb182eb86468c8fbc0905e52f26d2319c98e3be022a39181d8b511a9 +size 92729 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Migrating.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Migrating.png deleted file mode 100644 index 2a3790f2f7..0000000000 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9cbb28cd9f361a81b96057ee8738d154a9add7de7a4ca9cdcd1600d499f6bf8d -size 909428 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-en-GB.Loading.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-en-GB.Loading.png index 09e163094c..8f4196232b 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-en-GB.Loading.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-en-GB.Loading.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe5b5125665231d85b57ab1d304c2c17d175caa696ee1f4dcd090438e1282472 -size 50384 +oid sha256:d0af4162fc19aa519aa0f2182cd3eab3d9e73d645cb550e545227d6f5617a38e +size 50109 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-en-GB.Migrating.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-en-GB.Migrating.png deleted file mode 100644 index 60e1823e4f..0000000000 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-en-GB.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32dde9b6437682f702c13359337b3f21479d138a0cbcf20e47a3ff1b6ecbe2d7 -size 274869 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-pseudo.Loading.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-pseudo.Loading.png index c00a419605..f6178a38f0 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-pseudo.Loading.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-pseudo.Loading.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ad1c396b788d81c14139d5a5a174baaaa85e350aee173255cc72e3242f5bf87 -size 51246 +oid sha256:ccae5111908061e0a138ae2fc48b1aedc6bd889ed5380f352206bb2940f291a8 +size 50986 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-pseudo.Migrating.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-pseudo.Migrating.png deleted file mode 100644 index 31d08a7e99..0000000000 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_homeScreen-iPhone-16-pseudo.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:487cf66a31c068c0bfc33ff95b4a69c9e5a9f77c4f2f958ac266349587e1b098 -size 293724 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-en-GB.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-en-GB.1.png index b4b93ae2ed..5c4fb5fb91 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-en-GB.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-en-GB.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39c099e692cac9570866390ae3fa3e402cdd14f19de1df4ee63b206e84ac7e40 -size 81301 +oid sha256:2c33f7901ac865bbf54c2e76e871cc1a27bf069c8c2951433511c3d710ccd5fa +size 97486 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-pseudo.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-pseudo.1.png index 3a984cb4ca..553eb0430e 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-pseudo.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPad-pseudo.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35bd1fba8ab30bb7d08080fe06cfadc8d0838a484bb9096c8cefd85b6af70543 -size 85637 +oid sha256:4825bade716f4055e70dfc82298ddd654825a4f719d59c89b267d32adf26ebc5 +size 100330 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-en-GB.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-en-GB.1.png index e85bd9e19c..3c1b919953 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-en-GB.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-en-GB.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9658986db1f622979c311716b815190aa409fd70cd71d52ae9cedc5a2a2be60d -size 39632 +oid sha256:0c515c3504ce421c39a3da2455e2ae8c200ef89b2634cc863b65995f096d148f +size 54590 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-pseudo.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-pseudo.1.png index 50d3464c38..3aca865b4a 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-pseudo.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_roomDirectorySearchScreen-iPhone-16-pseudo.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73d404858351ed5066e5a5b9c78067c149cbf4f5b835d143172eb047e7bc7299 -size 43558 +oid sha256:ff01e35da6cecbd2af6a6f06a4488382477b7153507bd82d0fbe63b3f1586e3d +size 56960 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPad-pseudo.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPad-pseudo.1.png index 073a213bf2..c9fc80e664 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPad-pseudo.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPad-pseudo.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78499a8e00ba1c763e049869a6ade9d15e6e8c8d88c599a4b568cf0c9af29b27 -size 157618 +oid sha256:c024f99d4aeea16ec9729974fa663e24a774fccae381c021aaf23fd2b1b06abe +size 183812 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPhone-16-pseudo.1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPhone-16-pseudo.1.png index 998d891be4..68187a745b 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPhone-16-pseudo.1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineReplyView-iPhone-16-pseudo.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23380ed96834648da7e9d693ea4fd8d50c9ad839f14227ea2548ee175e82f7dc -size 106194 +oid sha256:5fd4218e8976573194f9d8fe97061e850ec961dab5b91ab101fa7b5b1f630fd2 +size 130938 diff --git a/PreviewTests/SupportingFiles/target.yml b/PreviewTests/SupportingFiles/target.yml index 560bb0c262..87b11b8cd3 100644 --- a/PreviewTests/SupportingFiles/target.yml +++ b/PreviewTests/SupportingFiles/target.yml @@ -49,3 +49,4 @@ targets: excludes: - "**/__Snapshots__/**" - path: ../SupportingFiles + - path: ../../ElementX/Sources/Other/Extensions/XCTestCase.swift diff --git a/Tools/Sourcery/PreviewTests.stencil b/Tools/Sourcery/PreviewTests.stencil index 004564722b..40ae3a4e17 100644 --- a/Tools/Sourcery/PreviewTests.stencil +++ b/Tools/Sourcery/PreviewTests.stencil @@ -26,9 +26,9 @@ extension PreviewTests { // MARK: - PreviewProvider {% for type in types.types where (type.implements.TestablePreview or type.based.TestablePreview or type|annotated:"TestablePreview") and type.name != "TestablePreview" %} - func test_{{ type.name|lowerFirstLetter|replace:"_Previews", "" }}() { + func test_{{ type.name|lowerFirstLetter|replace:"_Previews", "" }}() async throws { for preview in {{ type.name }}._allPreviews { - assertSnapshots(matching: preview) + try await assertSnapshots(matching: preview) } } {%- if not forloop.last %} diff --git a/UnitTests/Sources/Extensions/Publisher.swift b/UnitTests/Sources/Extensions/Publisher.swift deleted file mode 100644 index 586ec841eb..0000000000 --- a/UnitTests/Sources/Extensions/Publisher.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright 2023, 2024 New Vector Ltd. -// -// SPDX-License-Identifier: AGPL-3.0-only -// Please see LICENSE in the repository root for full details. -// - -import Combine - -extension Published.Publisher { - /// Returns the next output from the publisher skipping the current value stored into it (which is readable from the @Published property itself). - /// - Returns: the next output from the publisher - var nextValue: Output? { - get async { - var iterator = values.makeAsyncIterator() - - // skips the publisher's current value - _ = await iterator.next() - return await iterator.next() - } - } -} diff --git a/UnitTests/SupportingFiles/target.yml b/UnitTests/SupportingFiles/target.yml index 553041fe9c..0e33012405 100644 --- a/UnitTests/SupportingFiles/target.yml +++ b/UnitTests/SupportingFiles/target.yml @@ -46,6 +46,9 @@ targets: sources: - path: ../Sources - path: ../SupportingFiles + - path: ../../DevelopmentAssets + - path: ../../ElementX/Sources/Other/Extensions/Publisher.swift + - path: ../../ElementX/Sources/Other/Extensions/XCTestCase.swift - path: ../../ElementX/Sources/Other/InfoPlistReader.swift - path: ../../Tools/Scripts/Templates/SimpleScreenExample/Tests/Unit - - path: ../../DevelopmentAssets +