53 lines
2.0 KiB
Swift
53 lines
2.0 KiB
Swift
import Testing
|
|
@testable import SstData
|
|
|
|
struct DictionaryFileTests {
|
|
let sample = "# Opmerking\nAnthropic\n\ncloud code => Claude Code\n"
|
|
|
|
@Test func parsesTermsPairsCommentsAndBlanks() {
|
|
let file = DictionaryFile(parsing: sample)
|
|
#expect(file.lines.count == 4)
|
|
#expect(file.entries == [term("Anthropic"), pair("cloud code", "Claude Code")])
|
|
#expect(file.lines[0] == .comment("# Opmerking"))
|
|
#expect(file.lines[2] == .blank)
|
|
}
|
|
|
|
@Test func roundTripKeepsCommentsBlankLinesAndOrder() {
|
|
#expect(DictionaryFile(parsing: sample).serialized() == sample)
|
|
}
|
|
|
|
@Test func normalisesSpacingAroundTheArrow() {
|
|
#expect(DictionaryFile(parsing: "a=>b\n").serialized() == "a => b\n")
|
|
#expect(DictionaryFile(parsing: " cloud code => Claude Code \n").entries == [pair("cloud code", "Claude Code")])
|
|
}
|
|
|
|
@Test func unreadableLinesAreKeptAsInvalid() {
|
|
let file = DictionaryFile(parsing: "oops =>\n=> nothing\nok\n")
|
|
#expect(file.lines[0] == .invalid("oops =>"))
|
|
#expect(file.lines[1] == .invalid("=> nothing"))
|
|
#expect(file.serialized() == "oops =>\n=> nothing\nok\n")
|
|
}
|
|
|
|
@Test func handlesWindowsLineEndingsAndMissingFinalNewline() {
|
|
let file = DictionaryFile(parsing: "a\r\nb => c")
|
|
#expect(file.entries == [term("a"), pair("b", "c")])
|
|
#expect(file.serialized() == "a\nb => c\n")
|
|
}
|
|
|
|
@Test func emptyTextIsAValidEmptyFile() {
|
|
#expect(DictionaryFile(parsing: "").entries.isEmpty)
|
|
#expect(DictionaryFile(parsing: "").serialized() == "")
|
|
}
|
|
|
|
@Test func appendUpdateAndRemove() {
|
|
var file = DictionaryFile(parsing: "# c\n")
|
|
let id = file.append(.term("Vercel"))
|
|
#expect(file.entries == [term("Vercel")])
|
|
file.update(id: id, kind: .correction(heard: "versel", wrote: "Vercel"))
|
|
#expect(file.entries == [pair("versel", "Vercel")])
|
|
file.remove(id: id)
|
|
#expect(file.entries.isEmpty)
|
|
#expect(file.serialized() == "# c\n")
|
|
}
|
|
}
|