feat: add search state unit tests

This commit is contained in:
Nolin McFarland
2026-05-16 20:05:11 -04:00
parent 59eece9a8e
commit 8fa42c6ec0

View File

@@ -0,0 +1,87 @@
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(
name: OSPasteboard.Name(rawValue: UUID().uuidString)
)
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")
}
}