Files
ghostty/macos/Tests/Ghostty/Surface View/SurfaceView+SearchStateTests.swift

98 lines
2.8 KiB
Swift

import AppKit
import GhosttyKit
import Testing
@testable import Ghostty
@MainActor struct SurfaceView_SearchStateTests {
typealias SearchState = Ghostty.OSSurfaceView.SearchState
typealias StartSearch = Ghostty.Action.StartSearch
/// A unique pasteboard for each test case prevents flakiness.
let pasteboard = OSPasteboard.withUniqueName()
init() {
pasteboard.setString("pb", forType: .string)
}
@Test func init_withNilNeedle_readsPasteboardNeedle() {
let sut = SearchState(
from: StartSearch(c: .init(needle: nil)),
pasteboard: pasteboard
)
#expect(sut.needle == "pb")
}
@Test func init_withEmptyNeedle_readsPasteboardNeedle() {
"".withCString { needle in
let sut = SearchState(
from: StartSearch(c: .init(needle: needle)),
pasteboard: pasteboard
)
#expect(sut.needle == "pb")
}
}
@Test func init_withNeedle_setsNeedle() {
"start".withCString { needle in
let sut = SearchState(
from: StartSearch(c: .init(needle: needle)),
pasteboard: pasteboard
)
#expect(sut.needle == "start")
}
}
@Test func init_withNeedle_writesPasteboard() {
"start".withCString { needle in
_ = SearchState(
from: StartSearch(c: .init(needle: needle)),
pasteboard: pasteboard
)
#expect(pasteboard.string(forType: .string) == "start")
}
}
@Test func writePasteboardNeedle_writesPasteboard() {
let sut = SearchState(
from: StartSearch(c: .init(needle: nil)),
pasteboard: pasteboard
)
sut.needle = "sut"
sut.writePasteboardNeedle()
#expect(pasteboard.string(forType: .string) == "sut")
}
@Test func readPasteboardNeedle_whenPasteboardNeedleIsNil() {
let sut = SearchState(
from: StartSearch(c: .init(needle: nil)),
pasteboard: pasteboard
)
pasteboard.clearContents()
sut.needle = "sut"
sut.readPasteboardNeedle()
#expect(sut.needle == "sut")
}
@Test func readPasteboardNeedle_whenPasteboardNeedleIsValid() {
let sut = SearchState(
from: StartSearch(c: .init(needle: nil)),
pasteboard: pasteboard
)
sut.needle = "sut"
sut.readPasteboardNeedle()
#expect(sut.needle == "pb")
}
@Test func readPasteboardNeedle_setsNeedleSelectionRange() {
let sut = SearchState(
from: StartSearch(c: .init(needle: nil)),
pasteboard: pasteboard
)
sut.needle = "sut"
sut.readPasteboardNeedle()
let expected = "pb".startIndex..<"pb".endIndex
#expect(sut.needleSelection == expected)
}
}