Gim/internal/syntax/treesitter_internal_test.go
Hayden Hargreaves 16d1318c22 feat: start TS impl
This is so vibe coded, but in the interest of time, its a bit
necessary. Plus this is a complex problem that I don't have the mental
bandwidth to invest right now.
2026-04-07 10:23:25 -07:00

51 lines
1.4 KiB
Go

package syntax
import "testing"
func TestMergeRanges(t *testing.T) {
in := []lineRange{{start: 5, end: 8}, {start: 1, end: 2}, {start: 2, end: 4}, {start: 10, end: 10}}
out := mergeRanges(in)
if len(out) != 2 {
t.Fatalf("expected 2 merged ranges, got %d", len(out))
}
if out[0].start != 1 || out[0].end != 8 {
t.Fatalf("unexpected first merged range: %+v", out[0])
}
if out[1].start != 10 || out[1].end != 10 {
t.Fatalf("unexpected second merged range: %+v", out[1])
}
}
func TestNormalizedDirtyRanges(t *testing.T) {
ranges := []lineRange{{start: -2, end: 1}, {start: 3, end: 99}}
out := normalizedDirtyRanges(ranges, 5)
if len(out) != 2 {
t.Fatalf("expected 2 normalized ranges, got %d", len(out))
}
if out[0].start != 0 || out[0].end != 1 {
t.Fatalf("unexpected first normalized range: %+v", out[0])
}
if out[1].start != 3 || out[1].end != 4 {
t.Fatalf("unexpected second normalized range: %+v", out[1])
}
}
func TestByteColToRuneIndexUTF8(t *testing.T) {
line := []byte("aéb")
if got := byteColToRuneIndex(line, 0); got != 0 {
t.Fatalf("expected 0, got %d", got)
}
if got := byteColToRuneIndex(line, 1); got != 1 {
t.Fatalf("expected 1, got %d", got)
}
if got := byteColToRuneIndex(line, 3); got != 2 {
t.Fatalf("expected 2, got %d", got)
}
if got := byteColToRuneIndex(line, len(line)); got != 3 {
t.Fatalf("expected 3, got %d", got)
}
}