Files
downterm/CommandNotch/CommandNotchTests/TerminalScrollCoordinatorTests.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)
}
}