Tests/OrgCoreTests/SourceTextTests.swift
40 lines · 1318 bytes
1import Testing
2@testable import OrgCore
3
4struct SourceTextTests {
5 @Test func plainUTF8() {
6 let source = SourceText(bytes: Array("* a\n".utf8))
7 #expect(source.text == "* a\n")
8 #expect(!source.hasBOM)
9 #expect(source.isEditable)
10 }
11
12 @Test func bomIsStrippedAndRestored() {
13 let bytes: [UInt8] = [0xEF, 0xBB, 0xBF] + Array("x\n".utf8)
14 let source = SourceText(bytes: bytes)
15 #expect(source.hasBOM)
16 #expect(source.text == "x\n")
17 #expect(source.encode(source.text) == bytes)
18 #expect(source.encode("y\n") == [0xEF, 0xBB, 0xBF] + Array("y\n".utf8))
19 }
20
21 @Test func crlfAndMixedEndingsSurvive() {
22 let bytes = Array("a\r\nb\nc\r\n".utf8)
23 let source = SourceText(bytes: bytes)
24 #expect(source.encode(source.text) == bytes)
25 }
26
27 @Test func invalidUTF8IsReadOnlyAndUnchanged() {
28 let bytes: [UInt8] = [0x61, 0xFF, 0x0A]
29 let source = SourceText(bytes: bytes)
30 #expect(!source.isValidUTF8)
31 #expect(!source.isEditable)
32 #expect(source.encode(source.text) == bytes)
33 }
34
35 @Test func nonBMPAndCombiningSurvive() {
36 let bytes = Array("😀 e\u{301}\n".utf8)
37 let source = SourceText(bytes: bytes)
38 #expect(source.encode(source.text) == bytes)
39 }
40}