Swift format enforce isEmpty rule (#5843)

* swift format enforce isEmpty rule

* revert scheme

* use trailing closure
This commit is contained in:
Mauro
2026-07-06 15:39:16 +02:00
committed by GitHub
parent d2ef1e71f9
commit 0a77ba6c90
27 changed files with 60 additions and 60 deletions
+2 -2
View File
@@ -25,7 +25,7 @@ if danger.github.pullRequest.body?.isEmpty ?? true {
}
/// Check for screenshots on view changes
let hasChangedViews = !editedFiles.filter { $0.lowercased().contains("/view") }.isEmpty
let hasChangedViews = editedFiles.contains { $0.lowercased().contains("/view") }
if hasChangedViews {
if (danger.github.pullRequest.body?.contains("user-attachments") ?? false) == false {
warn("You seem to have made changes to views. Please consider adding screenshots.")
@@ -33,7 +33,7 @@ if hasChangedViews {
}
/// Check for pngs on resources
let hasPngs = !editedFiles.filter { $0.lowercased().contains(".xcassets") && $0.lowercased().hasSuffix(".png") }.isEmpty
let hasPngs = editedFiles.contains { $0.lowercased().contains(".xcassets") && $0.lowercased().hasSuffix(".png") }
if hasPngs {
warn("You seem to have made changes to some resource images. Please consider using an SVG or PDF.")
}
@@ -1,5 +1,5 @@
{
"originHash" : "61e1de2b41c093a3c8796903827114a1435f5608a839ee17ba60d376e8f804f7",
"originHash" : "1c7d307d80ee561100a0432a5ae13f345392a1175c7f6c17c2eb0da269382c57",
"pins" : [
{
"identity" : "compound-design-tokens",
+1 -1
View File
@@ -75,7 +75,7 @@ extension UIImage {
hash += sizeFlag.encode83(length: 1)
let maximumValue: Float
if ac.count > 0 {
if !ac.isEmpty {
let actualMaximumValue = ac.map { max(abs($0.0), abs($0.1), abs($0.2)) }.max()!
let quantisedMaximumValue = Int(max(0, min(82, floor(actualMaximumValue * 166 - 0.5))))
maximumValue = Float(quantisedMaximumValue + 1) / 166
@@ -24,7 +24,7 @@ nonisolated struct CollapsibleReactionLayout: Layout {
var rowsBeforeCollapsible: Int?
func sizeThatFits(proposal: ProposedViewSize, subviews: some FlowLayoutSubviews, cache: inout ()) -> CGSize {
guard let subviewsByType = getSubviewsByItemType(subviews: Array(subviews)), subviewsByType.reactions.count > 0 else {
guard let subviewsByType = getSubviewsByItemType(subviews: Array(subviews)), !subviewsByType.reactions.isEmpty else {
return .zero
}
@@ -53,7 +53,7 @@ nonisolated struct CollapsibleReactionLayout: Layout {
}
func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: some FlowLayoutSubviews, cache: inout ()) {
guard let subviewsByType = getSubviewsByItemType(subviews: Array(subviews)), subviewsByType.reactions.count > 0 else {
guard let subviewsByType = getSubviewsByItemType(subviews: Array(subviews)), !subviewsByType.reactions.isEmpty else {
subviews.forEach { subview in
subview.place(at: Self.pointOffscreen, anchor: .leading, proposal: .zero)
}
@@ -119,7 +119,7 @@ nonisolated struct CollapsibleReactionLayout: Layout {
currentRow.append(subview)
}
// If there are items in the current row remember to append it to the returned value
if currentRow.count > 0 {
if !currentRow.isEmpty {
rows.append(currentRow)
}
return rows
@@ -243,7 +243,7 @@ nonisolated struct CollapsibleReactionLayout: Layout {
addMoreButton = subview
}
}
guard let collapseButton, let addMoreButton, reactions.count > 0 else {
guard let collapseButton, let addMoreButton, !reactions.isEmpty else {
return nil
}
return ReactionSubviews(reactions: reactions, collapseButton: collapseButton, addMoreButton: addMoreButton)
@@ -40,7 +40,7 @@ extension XCUIApplication {
/// app instance anyway, and some of our tests assert that a default focus has been set on the text field,
/// so having a method that would set the focus and show the keyboard isn't always desirable.
func showKeyboardIfNeeded() {
if UIDevice.current.userInterfaceIdiom == .pad, keyboards.count == 0 {
if UIDevice.current.userInterfaceIdiom == .pad, keyboards.isEmpty {
buttons["Keyboard"].tap()
buttons["Show Keyboard"].tap()
}
@@ -347,7 +347,7 @@ nonisolated struct AttributedStringBuilder: AttributedStringBuilderProtocol {
TextParsingMatch(type: .atRoom, range: match.range)
})
guard matches.count > 0 else {
guard !matches.isEmpty else {
return
}
@@ -68,7 +68,7 @@ struct RoomAvatarImage: View {
onTap: onAvatarTap)
case .heroes(let users):
// We will expand upon this with more stack sizes in the future.
if users.count == 0 {
if users.isEmpty {
let _ = assertionFailure("We should never pass empty heroes here.")
PlaceholderAvatarImage(name: nil, contentID: "")
} else if users.count == 2 {
@@ -78,6 +78,6 @@ struct CreateRoomSpaceSelectionSheet_Previews: PreviewProvider, TestablePreview
static var previews: some View {
CreateRoomSpaceSelectionSheet(context: viewModel.context)
.snapshotPreferences(expect: viewModel.context.$viewState.map { $0.editableSpaces.count > 0 })
.snapshotPreferences(expect: viewModel.context.$viewState.map { !$0.editableSpaces.isEmpty })
}
}
@@ -142,7 +142,7 @@ struct HomeScreenContent: View {
guard let scrollView = scrollViewAdapter.scrollView,
scrollViewAdapter.isScrolling.value == false, // Ignore while scrolling
context.searchQuery.isEmpty == true, // Ignore while filtering
context.viewState.visibleRooms.count > 0 else {
!context.viewState.visibleRooms.isEmpty else {
return
}
@@ -81,7 +81,7 @@ struct RoomMembersListScreenViewState: BindableState {
var shouldShowEmptyState: Bool {
switch bindings.mode {
case .banned:
visibleBannedMembers.count == 0
visibleBannedMembers.isEmpty
case .members:
visibleInvitedMembers.count + visibleJoinedMembers.count == 0
}
@@ -105,7 +105,7 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
self.currentUserProxy = members.first { $0.userID == roomProxy.ownUserID }
var newBindings = state.bindings
if roomMembersDetails.bannedMembers.count == 0 {
if roomMembersDetails.bannedMembers.isEmpty {
newBindings.mode = .members
}
self.state = .init(joinedMembersCount: roomProxy.infoPublisher.value.joinedMembersCount,
@@ -279,7 +279,7 @@ private class ElementTextView: UITextView, PillAttachmentViewProviderDelegate {
return false
}
return UIPasteboard.general.itemProviders.filter { !$0.isSupportedForPasteOrDrop }.isEmpty
return !UIPasteboard.general.itemProviders.contains { !$0.isSupportedForPasteOrDrop }
}
override func paste(_ sender: Any?) {
@@ -293,7 +293,7 @@ private class ElementTextView: UITextView, PillAttachmentViewProviderDelegate {
let providers = UIPasteboard.general.itemProviders
// Use the default behavior if there are any unsupported providers
guard providers.filter({ !$0.isSupportedForPasteOrDrop }).isEmpty else {
guard !providers.contains(where: { !$0.isSupportedForPasteOrDrop }) else {
super.paste(sender)
return
}
@@ -82,7 +82,7 @@ private extension RoomInfoProxyProtocol {
return alias
}
guard heroes.count > 0 else {
guard !heroes.isEmpty else {
return ""
}
@@ -136,7 +136,7 @@ struct SpaceScreen: View {
}
.accessibilityIdentifier(A11yIdentifiers.spaceScreen.addExistingRooms)
if context.viewState.rooms.count > 0 {
if !context.viewState.rooms.isEmpty {
Button { context.send(viewAction: .manageChildren) } label: {
Label(L10n.actionManageRooms, icon: \.edit)
}
@@ -116,12 +116,12 @@ extension RoomInfoProxyProtocol {
// Check if the canonical alias matches the homeserver
if let canonicalAlias,
canonicalAlias.range(of: serverName) != nil {
canonicalAlias.contains(serverName) {
return canonicalAlias
}
// Otherwise check the alternative aliases and return the first one that matches
if let matchingAlternativeAlias = alternativeAliases.first(where: { $0.range(of: serverName) != nil }) {
if let matchingAlternativeAlias = alternativeAliases.first(where: { $0.contains(serverName) }) {
return matchingAlternativeAlias
}
@@ -103,7 +103,7 @@ nonisolated extension RoomSummary: CustomStringConvertible {
return alias
}
guard heroes.count > 0 else {
guard !heroes.isEmpty else {
return ""
}
@@ -861,7 +861,7 @@ nonisolated struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
isDM: isDM,
isDeclinedByMe: declinedBy.contains(userID),
isDeclined: declinedBy.count > 0,
isDeclined: !declinedBy.isEmpty,
isVoiceCall: isVoiceCall,
properties: .init())
}
+3 -3
View File
@@ -26,7 +26,7 @@ enum Application {
extension XCUIApplication {
var homeserver: String? {
guard let homeserver = ProcessInfo.processInfo.environment["INTEGRATION_TESTS_HOST"],
homeserver.count > 0 else {
!homeserver.isEmpty else {
return nil
}
@@ -35,7 +35,7 @@ extension XCUIApplication {
var username: String {
guard let username = ProcessInfo.processInfo.environment["INTEGRATION_TESTS_USERNAME"],
username.count > 0 else {
!username.isEmpty else {
return "default"
}
@@ -44,7 +44,7 @@ extension XCUIApplication {
var password: String {
guard let password = ProcessInfo.processInfo.environment["INTEGRATION_TESTS_PASSWORD"],
password.count > 0 else {
!password.isEmpty else {
return "default"
}
+1 -1
View File
@@ -64,7 +64,7 @@ extension XCUIApplication {
throw IntegrationTestsError.webAuthenticationSessionFailure
}
if alerts.count > 0 {
if !alerts.isEmpty {
alerts.firstMatch.buttons["OK"].firstMatch.tap()
}
}
@@ -150,7 +150,7 @@ class AuthenticationFlowCoordinatorUITests: XCTestCase {
XCTFail("Failed to present the web authentication session.")
}
if app.alerts.count > 0 {
if !app.alerts.isEmpty {
app.alerts.firstMatch.buttons["OK"].tap()
}
}
@@ -207,7 +207,7 @@ struct ChatsTabFlowCoordinatorTests {
mutating func roomClearsStack() async throws {
try await process(route: .room(roomID: "1", via: []), expectedState: .roomList(detailState: .room(roomID: "1")))
#expect(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator)
#expect(detailNavigationStack?.stackCoordinators.count == 0)
#expect(detailNavigationStack?.stackCoordinators.isEmpty == true)
#expect(detailCoordinator != nil)
chatsTabFlowCoordinator.handleAppRoute(.childRoom(roomID: "2", via: []), animated: true)
@@ -219,7 +219,7 @@ struct ChatsTabFlowCoordinatorTests {
try await process(route: .room(roomID: "3", via: []), expectedState: .roomList(detailState: .room(roomID: "3")))
#expect(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator)
#expect(detailNavigationStack?.stackCoordinators.count == 0)
#expect(detailNavigationStack?.stackCoordinators.isEmpty == true)
#expect(detailCoordinator != nil)
}
@@ -228,7 +228,7 @@ struct ChatsTabFlowCoordinatorTests {
// A regular event route should set its room as the root of the stack and focus on the event.
try await process(route: .event(eventID: "1", roomID: "1", via: []), expectedState: .roomList(detailState: .room(roomID: "1")))
#expect(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator)
#expect(detailNavigationStack?.stackCoordinators.count == 0)
#expect(detailNavigationStack?.stackCoordinators.isEmpty == true)
#expect(detailCoordinator != nil)
#expect(timelineControllerFactory.buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderCallsCount == 1)
#expect(timelineControllerFactory.buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderReceivedArguments?.initialFocussedEventID == "1")
@@ -246,7 +246,7 @@ struct ChatsTabFlowCoordinatorTests {
// A subsequent regular event route should clear the stack and set the new room as the root of the stack.
try await process(route: .event(eventID: "3", roomID: "3", via: []), expectedState: .roomList(detailState: .room(roomID: "3")))
#expect(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator)
#expect(detailNavigationStack?.stackCoordinators.count == 0)
#expect(detailNavigationStack?.stackCoordinators.isEmpty == true)
#expect(detailCoordinator != nil)
#expect(timelineControllerFactory.buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderCallsCount == 3)
#expect(timelineControllerFactory.buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderReceivedArguments?.initialFocussedEventID == "3")
@@ -254,7 +254,7 @@ struct ChatsTabFlowCoordinatorTests {
// A regular event route for the same room should set a new instance of the room as the root of the stack.
try await process(route: .event(eventID: "4", roomID: "3", via: []), expectedState: .roomList(detailState: .room(roomID: "3")))
#expect(detailNavigationStack?.rootCoordinator is RoomScreenCoordinator)
#expect(detailNavigationStack?.stackCoordinators.count == 0)
#expect(detailNavigationStack?.stackCoordinators.isEmpty == true)
#expect(detailCoordinator != nil)
#expect(timelineControllerFactory.buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderCallsCount == 4)
#expect(timelineControllerFactory.buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderReceivedArguments?.initialFocussedEventID == "4",
@@ -68,7 +68,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
try await process(route: .roomDetails(roomID: "1"))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
@@ -82,7 +82,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
try await process(route: .childRoom(roomID: "2", via: []))
#expect(navigationStackCoordinator.stackCoordinators.count == 1)
@@ -95,7 +95,7 @@ final class RoomFlowCoordinatorTests {
try await clearRoute(expectedActions: [.finished])
#expect(navigationStackCoordinator.rootCoordinator == nil)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
}
/// Tests the child flow teardown in isolation of it's parent.
@@ -124,7 +124,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
try await process(route: .childRoom(roomID: "2", via: []))
#expect(navigationStackCoordinator.stackCoordinators.count == 1)
@@ -142,10 +142,10 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
try await process(route: .childRoom(roomID: "1", via: []))
#expect(navigationStackCoordinator.stackCoordinators.count == 0,
#expect(navigationStackCoordinator.stackCoordinators.isEmpty,
"A room flow shouldn't present a direct child for the same room.")
try await process(route: .childRoom(roomID: "2", via: []))
@@ -165,7 +165,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "InvitedRoomID", via: []))
#expect(navigationStackCoordinator.rootCoordinator is JoinRoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
try await clearRoute(expectedActions: [.finished])
#expect(navigationStackCoordinator.rootCoordinator == nil)
@@ -174,7 +174,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "InvitedRoomID", via: []))
#expect(navigationStackCoordinator.rootCoordinator is JoinRoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
// "Join" the room
clientProxy.roomForIdentifierClosure = { _ in
@@ -183,7 +183,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "InvitedRoomID", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
}
@Test
@@ -224,11 +224,11 @@ final class RoomFlowCoordinatorTests {
try await process(route: .event(eventID: "1", roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
try await process(route: .childEvent(eventID: "2", roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
try await process(route: .childEvent(eventID: "3", roomID: "2", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
@@ -324,13 +324,13 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
let sharePayload: ShareExtensionPayload = .mediaFiles(roomID: "1", mediaFiles: [.init(url: .picturesDirectory, suggestedName: nil)])
try await process(route: .share(sharePayload))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
#expect((navigationStackCoordinator.sheetCoordinator as? NavigationStackCoordinator)?.rootCoordinator is MediaUploadPreviewScreenCoordinator)
@@ -340,7 +340,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .share(sharePayload))
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
#expect((navigationStackCoordinator.sheetCoordinator as? NavigationStackCoordinator)?.rootCoordinator is MediaUploadPreviewScreenCoordinator)
}
@@ -350,13 +350,13 @@ final class RoomFlowCoordinatorTests {
try await process(route: .room(roomID: "1", via: []))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
let sharePayload: ShareExtensionPayload = .text(roomID: "1", text: "Important text")
try await process(route: .share(sharePayload))
#expect(navigationStackCoordinator.rootCoordinator is RoomScreenCoordinator)
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
#expect(navigationStackCoordinator.sheetCoordinator == nil, "The media upload sheet shouldn't be shown when sharing text.")
@@ -366,7 +366,7 @@ final class RoomFlowCoordinatorTests {
try await process(route: .share(sharePayload))
#expect(navigationStackCoordinator.stackCoordinators.count == 0)
#expect(navigationStackCoordinator.stackCoordinators.isEmpty)
#expect(navigationStackCoordinator.sheetCoordinator == nil, "The media upload sheet shouldn't be shown when sharing text.")
}
@@ -79,7 +79,7 @@ struct RoomMembersListScreenViewModelTests {
try await deferred.fulfill()
#expect(viewModel.state.joinedMembersCount == 2)
#expect(viewModel.state.visibleJoinedMembers.count == 0)
#expect(viewModel.state.visibleJoinedMembers.isEmpty)
}
@Test
@@ -107,7 +107,7 @@ struct RoomMembersListScreenViewModelTests {
#expect(viewModel.state.joinedMembersCount == 0)
#expect(viewModel.state.visibleInvitedMembers.count == 1)
#expect(viewModel.state.visibleJoinedMembers.count == 0)
#expect(viewModel.state.visibleJoinedMembers.isEmpty)
}
@Test
@@ -122,7 +122,7 @@ struct RoomMembersListScreenViewModelTests {
#expect(viewModel.state.joinedMembersCount == 0)
#expect(viewModel.state.visibleInvitedMembers.count == 1)
#expect(viewModel.state.visibleJoinedMembers.count == 0)
#expect(viewModel.state.visibleJoinedMembers.isEmpty)
}
@Test
@@ -286,7 +286,7 @@ struct RoomMembersListScreenViewModelTests {
context.mode = .banned
try await deferred.fulfill()
deferred = deferFulfillment(context.$viewState) { $0.visibleBannedMembers.count == 0 && $0.bindings.mode == .members }
deferred = deferFulfillment(context.$viewState) { $0.visibleBannedMembers.isEmpty && $0.bindings.mode == .members }
subject.value = [RoomMemberProxyMock].allMembersAsAdmin
try await deferred.fulfill()
}
@@ -51,7 +51,7 @@ final class RoomScreenViewModelTests {
// check if in the default state is not showing but is indeed loading
var deferred = deferFulfillment(viewModel.context.$viewState) { viewState in
viewState.pinnedEventsBannerState.count == 0
viewState.pinnedEventsBannerState.isEmpty
}
try await deferred.fulfill()
#expect(viewModel.context.viewState.pinnedEventsBannerState.isLoading)
@@ -96,7 +96,7 @@ final class SecurityAndPrivacyScreenViewModelTests {
let space = singleRoom[0]
setupViewModel(joinedParentSpaces: [], joinRule: .restricted(rules: [.roomMembership(roomID: space.id)]))
let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.count == 0 }
let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.isEmpty }
try await deferred.fulfill()
#expect(context.viewState.currentSettings.accessType == .spaceMembers(spaceIDs: [space.id]))
@@ -53,10 +53,10 @@ final class SpacesScreenViewModelTests {
@Test
func topLevelSpacesSubscription() async throws {
var deferred = deferFulfillment(context.observe(\.viewState.topLevelSpaces)) { $0.count == 0 }
var deferred = deferFulfillment(context.observe(\.viewState.topLevelSpaces)) { $0.isEmpty }
topLevelSpacesSubject.send([])
try await deferred.fulfill()
#expect(context.viewState.topLevelSpaces.count == 0)
#expect(context.viewState.topLevelSpaces.isEmpty)
deferred = deferFulfillment(context.observe(\.viewState.topLevelSpaces)) { $0.count == 1 }
topLevelSpacesSubject.send([
@@ -39,7 +39,7 @@ struct UserIndicatorControllerTests {
indicatorController.retractAllIndicators()
#expect(indicatorController.indicatorQueue.count == 0)
#expect(indicatorController.indicatorQueue.isEmpty)
}
@Test
@@ -94,7 +94,7 @@ struct UserIndicatorControllerTests {
try await fulfillment.fulfill()
#expect(indicatorController.indicatorQueue.count == 0)
#expect(indicatorController.indicatorQueue.isEmpty)
#expect(indicatorController.activeIndicator == nil)
}
}