Add UI test for jump-to-unread focus
This commit is contained in:
parent
cb51710d94
commit
986f354971
1 changed files with 72 additions and 0 deletions
72
GhosttyTabsUITests/JumpToUnreadUITests.swift
Normal file
72
GhosttyTabsUITests/JumpToUnreadUITests.swift
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
import XCTest
|
||||
import Foundation
|
||||
|
||||
final class JumpToUnreadUITests: XCTestCase {
|
||||
private var dataPath = ""
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
continueAfterFailure = false
|
||||
dataPath = "/tmp/cmux-ui-test-jump-unread-\(UUID().uuidString).json"
|
||||
try? FileManager.default.removeItem(atPath: dataPath)
|
||||
}
|
||||
|
||||
func testJumpToUnreadFocusesPanelAcrossTabs() {
|
||||
let app = XCUIApplication()
|
||||
app.launchEnvironment["CMUX_UI_TEST_JUMP_UNREAD_SETUP"] = "1"
|
||||
app.launchEnvironment["CMUX_UI_TEST_JUMP_UNREAD_PATH"] = dataPath
|
||||
app.launch()
|
||||
app.activate()
|
||||
|
||||
XCTAssertTrue(
|
||||
waitForJumpUnreadData(keys: ["expectedTabId", "expectedSurfaceId"], timeout: 6.0),
|
||||
"Expected test setup data to be written"
|
||||
)
|
||||
|
||||
guard let setupData = loadJumpUnreadData() else {
|
||||
XCTFail("Missing test setup data")
|
||||
return
|
||||
}
|
||||
|
||||
let expectedTabId = setupData["expectedTabId"]
|
||||
let expectedSurfaceId = setupData["expectedSurfaceId"]
|
||||
XCTAssertNotNil(expectedTabId)
|
||||
XCTAssertNotNil(expectedSurfaceId)
|
||||
|
||||
app.typeKey("u", modifierFlags: [.command, .shift])
|
||||
|
||||
XCTAssertTrue(
|
||||
waitForJumpUnreadData(keys: ["focusedTabId", "focusedSurfaceId"], timeout: 6.0),
|
||||
"Expected jump-to-unread focus to be recorded"
|
||||
)
|
||||
|
||||
guard let focusedData = loadJumpUnreadData() else {
|
||||
XCTFail("Missing jump-to-unread focus data")
|
||||
return
|
||||
}
|
||||
|
||||
XCTAssertEqual(focusedData["focusedTabId"], expectedTabId)
|
||||
XCTAssertEqual(focusedData["focusedSurfaceId"], expectedSurfaceId)
|
||||
}
|
||||
|
||||
private func waitForJumpUnreadData(keys: [String], timeout: TimeInterval) -> Bool {
|
||||
let deadline = Date().addingTimeInterval(timeout)
|
||||
while Date() < deadline {
|
||||
if let data = loadJumpUnreadData(), keys.allSatisfy({ data[$0] != nil }) {
|
||||
return true
|
||||
}
|
||||
RunLoop.current.run(until: Date().addingTimeInterval(0.05))
|
||||
}
|
||||
if let data = loadJumpUnreadData(), keys.allSatisfy({ data[$0] != nil }) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private func loadJumpUnreadData() -> [String: String]? {
|
||||
guard let data = try? Data(contentsOf: URL(fileURLWithPath: dataPath)) else {
|
||||
return nil
|
||||
}
|
||||
return (try? JSONSerialization.jsonObject(with: data)) as? [String: String]
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue