krz/orgstar

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

Tests/OrgCoreTests/SyntaxTreeTests.swift

main
orgstar/Tests/OrgCoreTests/SyntaxTreeTests.swift history · blame · raw

45 lines · 1326 bytes

6 symbols in this file
 1import Testing
 2@testable import OrgCore
 3
 4struct SyntaxTreeTests {
 5    func sample() -> GreenNode {
 6        var b = GreenBuilder()
 7        b.start(.document)
 8        b.start(.paragraph)
 9        b.token(.text, "hé😀")
10        b.token(.newline, "\n")
11        b.finish()
12        b.token(.newline, "\r\n")
13        b.finish()
14        return b.build()
15    }
16
17    @Test func lengthsAreUTF16() {
18        let green = sample()
19        #expect(green.length == 4 + 1 + 2)
20        #expect(green.text == "hé😀\n\r\n")
21    }
22
23    @Test func redNodesCarryOffsets() {
24        let root = SyntaxNode(green: sample(), offset: 0, parent: nil)
25        let paragraph = root.children[0]
26        #expect(paragraph.kind == .paragraph)
27        #expect(paragraph.range == 0..<5)
28        #expect(paragraph.parent === root)
29        #expect(root.tokens.map(\.range) == [5..<7])
30        #expect(paragraph.tokens.map(\.kind) == [.text, .newline])
31    }
32
33    @Test func builderSkipsEmptyTokens() {
34        var b = GreenBuilder()
35        b.start(.document)
36        b.token(.whitespace, "")
37        b.finish()
38        #expect(b.build().children.isEmpty)
39    }
40
41    @Test func descendantsArePreorder() {
42        let root = SyntaxNode(green: sample(), offset: 0, parent: nil)
43        #expect(root.descendants().map(\.kind) == [.document, .paragraph])
44    }
45}