Tests/OrgCoreTests/SyntaxTreeTests.swift
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}