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