import XCTest #if canImport(cmux_DEV) @testable import cmux_DEV #elseif canImport(cmux) @testable import cmux #endif @MainActor final class TabManagerSessionSnapshotTests: XCTestCase { func testSessionSnapshotSerializesWorkspacesAndRestoreRebuildsSelection() { let manager = TabManager() guard let firstWorkspace = manager.selectedWorkspace else { XCTFail("Expected initial workspace") return } firstWorkspace.setCustomTitle("First") let secondWorkspace = manager.addWorkspace(select: true) secondWorkspace.setCustomTitle("Second") XCTAssertEqual(manager.tabs.count, 2) XCTAssertEqual(manager.selectedTabId, secondWorkspace.id) let snapshot = manager.sessionSnapshot(includeScrollback: false) XCTAssertEqual(snapshot.workspaces.count, 2) XCTAssertEqual(snapshot.selectedWorkspaceIndex, 1) let restored = TabManager() restored.restoreSessionSnapshot(snapshot) XCTAssertEqual(restored.tabs.count, 2) XCTAssertEqual(restored.selectedTabId, restored.tabs[1].id) XCTAssertEqual(restored.tabs[0].customTitle, "First") XCTAssertEqual(restored.tabs[1].customTitle, "Second") } func testRestoreSessionSnapshotWithNoWorkspacesKeepsSingleFallbackWorkspace() { let manager = TabManager() let emptySnapshot = SessionTabManagerSnapshot( selectedWorkspaceIndex: nil, workspaces: [] ) manager.restoreSessionSnapshot(emptySnapshot) XCTAssertEqual(manager.tabs.count, 1) XCTAssertNotNil(manager.selectedTabId) } func testSessionSnapshotExcludesRemoteWorkspacesFromRestore() throws { let manager = TabManager() let remoteWorkspace = manager.addWorkspace(select: true) let configuration = WorkspaceRemoteConfiguration( destination: "cmux-macmini", port: nil, identityFile: nil, sshOptions: [], localProxyPort: nil, relayPort: 64001, relayID: "relay-test", relayToken: String(repeating: "b", count: 64), localSocketPath: "/tmp/cmux-test.sock", terminalStartupCommand: "ssh cmux-macmini" ) remoteWorkspace.configureRemoteConnection(configuration, autoConnect: false) let paneId = try XCTUnwrap(remoteWorkspace.bonsplitController.allPaneIds.first) _ = remoteWorkspace.newBrowserSurface(inPane: paneId, url: URL(string: "http://localhost:3000"), focus: false) let snapshot = manager.sessionSnapshot(includeScrollback: false) XCTAssertEqual(snapshot.workspaces.count, 1) XCTAssertNil(snapshot.selectedWorkspaceIndex) XCTAssertFalse(snapshot.workspaces.contains { $0.processTitle == remoteWorkspace.title }) } }