From 3cfa1f119169388196d48dab3a9641c50e2bcd9d Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Fri, 13 Mar 2026 04:16:56 -0700 Subject: [PATCH] Add last-surface close path regression tests --- cmuxTests/CmuxWebViewKeyEquivalentTests.swift | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/cmuxTests/CmuxWebViewKeyEquivalentTests.swift b/cmuxTests/CmuxWebViewKeyEquivalentTests.swift index 2d3c6618..357e4b67 100644 --- a/cmuxTests/CmuxWebViewKeyEquivalentTests.swift +++ b/cmuxTests/CmuxWebViewKeyEquivalentTests.swift @@ -5263,6 +5263,30 @@ final class TabManagerCloseCurrentPanelTests: XCTestCase { XCTAssertNotEqual(workspace.focusedPanelId, initialPanelId) } + func testClosePanelButtonKeepsWorkspaceOpenWhenItOwnsTheLastSurface() { + let manager = TabManager() + guard let workspace = manager.selectedWorkspace, + let initialPanelId = workspace.focusedPanelId else { + XCTFail("Expected selected workspace and focused panel") + return + } + + let initialWorkspaceId = workspace.id + XCTAssertEqual(manager.tabs.count, 1) + XCTAssertEqual(workspace.panels.count, 1) + + XCTAssertTrue(workspace.closePanel(initialPanelId)) + drainMainQueue() + drainMainQueue() + + XCTAssertEqual(manager.tabs.count, 1, "Closing the last surface should not remove the workspace") + XCTAssertEqual(manager.selectedTabId, initialWorkspaceId) + XCTAssertEqual(manager.tabs.first?.id, initialWorkspaceId) + XCTAssertNil(workspace.panels[initialPanelId], "Expected the original surface to be closed") + XCTAssertEqual(workspace.panels.count, 1, "Expected the workspace to stay alive with a replacement surface") + XCTAssertNotEqual(workspace.focusedPanelId, initialPanelId) + } + func testCloseCurrentPanelClosesWorkspaceWhenLastSurfaceShortcutSettingEnabled() { let defaults = UserDefaults.standard let originalSetting = defaults.object(forKey: LastSurfaceCloseShortcutSettings.key) @@ -5289,6 +5313,39 @@ final class TabManagerCloseCurrentPanelTests: XCTestCase { XCTAssertEqual(manager.selectedTabId, firstWorkspace.id) } + func testClosePanelButtonClosesWorkspaceWhenLastSurfaceShortcutSettingEnabled() { + let defaults = UserDefaults.standard + let originalSetting = defaults.object(forKey: LastSurfaceCloseShortcutSettings.key) + defaults.set(true, forKey: LastSurfaceCloseShortcutSettings.key) + defer { + if let originalSetting { + defaults.set(originalSetting, forKey: LastSurfaceCloseShortcutSettings.key) + } else { + defaults.removeObject(forKey: LastSurfaceCloseShortcutSettings.key) + } + } + + let manager = TabManager() + let firstWorkspace = manager.tabs[0] + let secondWorkspace = manager.addWorkspace() + + manager.selectWorkspace(secondWorkspace) + guard let secondPanelId = secondWorkspace.focusedPanelId else { + XCTFail("Expected focused panel in selected workspace") + return + } + + XCTAssertEqual(manager.selectedTabId, secondWorkspace.id) + XCTAssertEqual(secondWorkspace.panels.count, 1) + + XCTAssertFalse(secondWorkspace.closePanel(secondPanelId)) + drainMainQueue() + drainMainQueue() + + XCTAssertEqual(manager.tabs.map(\.id), [firstWorkspace.id]) + XCTAssertEqual(manager.selectedTabId, firstWorkspace.id) + } + func testCloseCurrentPanelWithLegacySettingIgnoresStaleSurfaceId() { let defaults = UserDefaults.standard let originalSetting = defaults.object(forKey: LastSurfaceCloseShortcutSettings.key)