Harden multi-window notify regression test
This commit is contained in:
parent
3e10c3f790
commit
2b99af19bc
2 changed files with 137 additions and 87 deletions
|
|
@ -5683,6 +5683,21 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent
|
|||
}
|
||||
}
|
||||
|
||||
func waitForSurfaceId(
|
||||
on tabManager: TabManager,
|
||||
tabId: UUID,
|
||||
_ completion: @escaping (UUID) -> Void
|
||||
) {
|
||||
if let surfaceId = tabManager.focusedPanelId(for: tabId) {
|
||||
completion(surfaceId)
|
||||
return
|
||||
}
|
||||
guard Date() < deadline else { return }
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
|
||||
waitForSurfaceId(on: tabManager, tabId: tabId, completion)
|
||||
}
|
||||
}
|
||||
|
||||
waitForContexts(minCount: 1) { [weak self] in
|
||||
guard let self else { return }
|
||||
guard let window1 = self.mainWindowContexts.values.first else { return }
|
||||
|
|
@ -5696,36 +5711,40 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent
|
|||
let contexts = Array(self.mainWindowContexts.values)
|
||||
guard let window2 = contexts.first(where: { $0.windowId != window1.windowId }) else { return }
|
||||
guard let tabId2 = window2.tabManager.selectedTabId ?? window2.tabManager.tabs.first?.id else { return }
|
||||
guard let store = self.notificationStore else { return }
|
||||
waitForSurfaceId(on: window2.tabManager, tabId: tabId2) { [weak self] surfaceId2 in
|
||||
guard let self else { return }
|
||||
guard let store = self.notificationStore else { return }
|
||||
|
||||
// Ensure the target window is currently showing the Notifications overlay,
|
||||
// so opening a notification must switch it back to the terminal UI.
|
||||
window2.sidebarSelectionState.selection = .notifications
|
||||
// Ensure the target window is currently showing the Notifications overlay,
|
||||
// so opening a notification must switch it back to the terminal UI.
|
||||
window2.sidebarSelectionState.selection = .notifications
|
||||
|
||||
// Create notifications for both windows. Ensure W2 isn't suppressed just because it's focused.
|
||||
let prevOverride = AppFocusState.overrideIsFocused
|
||||
AppFocusState.overrideIsFocused = false
|
||||
store.addNotification(tabId: tabId2, surfaceId: nil, title: "W2", subtitle: "multiwindow", body: "")
|
||||
AppFocusState.overrideIsFocused = prevOverride
|
||||
// Create notifications for both windows. Ensure W2 isn't suppressed just because it's focused.
|
||||
let prevOverride = AppFocusState.overrideIsFocused
|
||||
AppFocusState.overrideIsFocused = false
|
||||
store.addNotification(tabId: tabId2, surfaceId: nil, title: "W2", subtitle: "multiwindow", body: "")
|
||||
AppFocusState.overrideIsFocused = prevOverride
|
||||
|
||||
// Insert after W2 so it becomes "latest unread" (first in list).
|
||||
store.addNotification(tabId: tabId1, surfaceId: nil, title: "W1", subtitle: "multiwindow", body: "")
|
||||
// Insert after W2 so it becomes "latest unread" (first in list).
|
||||
store.addNotification(tabId: tabId1, surfaceId: nil, title: "W1", subtitle: "multiwindow", body: "")
|
||||
|
||||
let notif1 = store.notifications.first(where: { $0.tabId == tabId1 && $0.title == "W1" })
|
||||
let notif2 = store.notifications.first(where: { $0.tabId == tabId2 && $0.title == "W2" })
|
||||
let notif1 = store.notifications.first(where: { $0.tabId == tabId1 && $0.title == "W1" })
|
||||
let notif2 = store.notifications.first(where: { $0.tabId == tabId2 && $0.title == "W2" })
|
||||
|
||||
self.writeMultiWindowNotificationTestData([
|
||||
"window1Id": window1.windowId.uuidString,
|
||||
"window2Id": window2.windowId.uuidString,
|
||||
"window2InitialSidebarSelection": "notifications",
|
||||
"tabId1": tabId1.uuidString,
|
||||
"tabId2": tabId2.uuidString,
|
||||
"notifId1": notif1?.id.uuidString ?? "",
|
||||
"notifId2": notif2?.id.uuidString ?? "",
|
||||
"expectedLatestWindowId": window1.windowId.uuidString,
|
||||
"expectedLatestTabId": tabId1.uuidString,
|
||||
], at: path)
|
||||
self.publishMultiWindowNotificationSocketStateIfNeeded(at: path)
|
||||
self.writeMultiWindowNotificationTestData([
|
||||
"window1Id": window1.windowId.uuidString,
|
||||
"window2Id": window2.windowId.uuidString,
|
||||
"window2InitialSidebarSelection": "notifications",
|
||||
"tabId1": tabId1.uuidString,
|
||||
"tabId2": tabId2.uuidString,
|
||||
"surfaceId2": surfaceId2.uuidString,
|
||||
"notifId1": notif1?.id.uuidString ?? "",
|
||||
"notifId2": notif2?.id.uuidString ?? "",
|
||||
"expectedLatestWindowId": window1.windowId.uuidString,
|
||||
"expectedLatestTabId": tabId1.uuidString,
|
||||
], at: path)
|
||||
self.publishMultiWindowNotificationSocketStateIfNeeded(at: path)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue