krz/orgstar

A native macOS editor for org-mode files. editor org-mode swift

Tests/OrgCoreTests/SourceTextTests.swift

15f6b0709d88971fb62ed432c3e5b8032643670a
orgstar/Tests/OrgCoreTests/SourceTextTests.swift history · blame · raw

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}