59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|