Files
downterm/CommandNotch/CommandNotchTests/TerminalScrollCoordinatorTests.swift

47 lines
1.7 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)
}
}