87 lines
3.4 KiB
Swift
87 lines
3.4 KiB
Swift
import XCTest
|
|
@testable import CommandNotch
|
|
|
|
final class TerminalScrollCoordinatorTests: XCTestCase {
|
|
func testScrollAwayFromBottomDisablesOutputFollow() {
|
|
let coordinator = TerminalScrollCoordinator()
|
|
|
|
coordinator.terminalDidScroll(to: 0.42, canScroll: true)
|
|
|
|
XCTAssertFalse(coordinator.followsOutput)
|
|
XCTAssertEqual(coordinator.outputRestorePosition(canScroll: true) ?? .nan, 0.42, accuracy: 0.0001)
|
|
}
|
|
|
|
func testTypingReEnablesFollowAndRequestsJumpToBottom() {
|
|
let coordinator = TerminalScrollCoordinator()
|
|
coordinator.terminalDidScroll(to: 0.42, canScroll: true)
|
|
|
|
let shouldJump = coordinator.userDidStartTyping()
|
|
|
|
XCTAssertTrue(shouldJump)
|
|
XCTAssertTrue(coordinator.followsOutput)
|
|
XCTAssertNil(coordinator.outputRestorePosition(canScroll: true))
|
|
}
|
|
|
|
func testScrollingBackToBottomReEnablesOutputFollow() {
|
|
let coordinator = TerminalScrollCoordinator()
|
|
coordinator.terminalDidScroll(to: 0.42, canScroll: true)
|
|
|
|
coordinator.terminalDidScroll(to: 1, canScroll: true)
|
|
|
|
XCTAssertTrue(coordinator.followsOutput)
|
|
XCTAssertNil(coordinator.outputRestorePosition(canScroll: true))
|
|
}
|
|
|
|
func testSuppressedTrackingIgnoresProgrammaticScrollUpdates() {
|
|
let coordinator = TerminalScrollCoordinator()
|
|
coordinator.terminalDidScroll(to: 0.42, canScroll: true)
|
|
|
|
coordinator.suppressTracking {
|
|
coordinator.terminalDidScroll(to: 1, canScroll: true)
|
|
}
|
|
|
|
XCTAssertFalse(coordinator.followsOutput)
|
|
XCTAssertEqual(coordinator.outputRestorePosition(canScroll: true) ?? .nan, 0.42, accuracy: 0.0001)
|
|
}
|
|
|
|
func testMouseCaptureCoordinatorSuppressesStaleCaptureAfterCommandFinish() {
|
|
let coordinator = TerminalMouseCaptureCoordinator()
|
|
|
|
let requiresReset = coordinator.commandDidFinish(mouseCaptured: true)
|
|
|
|
XCTAssertFalse(coordinator.shouldForwardMouseInput(mouseCaptured: true))
|
|
XCTAssertTrue(coordinator.shouldBypassEnhancedKeyboardInput(mouseCaptured: true))
|
|
XCTAssertTrue(coordinator.suppressesMouseReporting)
|
|
XCTAssertTrue(requiresReset)
|
|
}
|
|
|
|
func testMouseCaptureCoordinatorDoesNotRequestResetForCleanCommandFinish() {
|
|
let coordinator = TerminalMouseCaptureCoordinator()
|
|
|
|
let requiresReset = coordinator.commandDidFinish(mouseCaptured: false)
|
|
|
|
XCTAssertFalse(requiresReset)
|
|
XCTAssertFalse(coordinator.shouldBypassEnhancedKeyboardInput(mouseCaptured: false))
|
|
XCTAssertTrue(coordinator.shouldForwardMouseInput(mouseCaptured: false))
|
|
}
|
|
|
|
func testMouseCaptureCoordinatorClearsSuppressionWhenCaptureDrops() {
|
|
let coordinator = TerminalMouseCaptureCoordinator()
|
|
coordinator.commandDidFinish(mouseCaptured: true)
|
|
|
|
XCTAssertFalse(coordinator.shouldBypassEnhancedKeyboardInput(mouseCaptured: false))
|
|
XCTAssertTrue(coordinator.shouldForwardMouseInput(mouseCaptured: false))
|
|
XCTAssertFalse(coordinator.suppressesMouseReporting)
|
|
}
|
|
|
|
func testMouseCaptureCoordinatorClearsSuppressionWhenUserSubmitsCommand() {
|
|
let coordinator = TerminalMouseCaptureCoordinator()
|
|
coordinator.commandDidFinish(mouseCaptured: true)
|
|
|
|
coordinator.userDidSubmitCommand()
|
|
|
|
XCTAssertTrue(coordinator.shouldForwardMouseInput(mouseCaptured: true))
|
|
XCTAssertFalse(coordinator.suppressesMouseReporting)
|
|
}
|
|
}
|