75 lines
2.8 KiB
Swift
75 lines
2.8 KiB
Swift
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 })
|
|
}
|
|
}
|