learnlytics-go/templ/generator/rangewriter_test.go

59 lines
1.7 KiB
Go
Raw Permalink Normal View History

2025-03-20 12:35:13 +01:00
package generator
import (
"bytes"
"testing"
"github.com/a-h/templ/parser/v2"
"github.com/google/go-cmp/cmp"
)
func TestRangeWriter(t *testing.T) {
w := new(bytes.Buffer)
rw := NewRangeWriter(w)
t.Run("indices are zero bound", func(t *testing.T) {
if diff := cmp.Diff(parser.NewPosition(0, 0, 0), rw.Current); diff != "" {
t.Error(diff)
}
})
t.Run("writing characters increases the col position", func(t *testing.T) {
if _, err := rw.Write("abc"); err != nil {
t.Fatalf("failed to write: %v", err)
}
if diff := cmp.Diff(parser.NewPosition(3, 0, 3), rw.Current); diff != "" {
t.Error(diff)
}
})
t.Run("newline characters implement carriage return", func(t *testing.T) {
if _, err := rw.Write("\n1"); err != nil {
t.Fatalf("failed to write: %v", err)
}
if diff := cmp.Diff(parser.NewPosition(5, 1, 1), rw.Current); diff != "" {
t.Error(diff)
}
})
t.Run("multi-byte characters count as 3, because that's their UTF8 representation", func(t *testing.T) {
if _, err := rw.Write("\n你"); err != nil {
t.Fatalf("failed to write: %v", err)
}
if diff := cmp.Diff(parser.NewPosition(9, 2, 3), rw.Current); diff != "" {
t.Error(diff)
}
})
t.Run("a range is returned from each write", func(t *testing.T) {
if _, err := rw.Write("\n"); err != nil {
t.Fatalf("failed to write: %v", err)
}
r, err := rw.Write("test")
if err != nil {
t.Fatalf("expected successful write, got error: %v", err)
}
if diff := cmp.Diff(parser.NewPosition(10, 3, 0), r.From); diff != "" {
t.Errorf("unexpected from:\n%s", diff)
}
if diff := cmp.Diff(parser.NewPosition(14, 3, 4), r.To); diff != "" {
t.Errorf("unexpected to:\n%s", diff)
}
})
}