34 lines
1.1 KiB
Go
34 lines
1.1 KiB
Go
package app
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/harrybrwn/patterm/internal/vt"
|
|
)
|
|
|
|
func TestRenderScreenSnapshotClipsRowsToViewport(t *testing.T) {
|
|
layout := newTerminalLayout(20, 5)
|
|
got := string(renderScreenSnapshot("abcdefghijklmnopqrstuvwxy\nsecond", vt.CursorState{}, layout))
|
|
if strings.Contains(got, "uvwxy") {
|
|
t.Fatalf("line leaked past viewport width: %q", got)
|
|
}
|
|
if !strings.Contains(got, "\x1b[2;1Habcdefghijklmnopqrst") {
|
|
t.Fatalf("first row not drawn at viewport top: %q", got)
|
|
}
|
|
if !strings.Contains(got, "\x1b[3;1Hsecond ") {
|
|
t.Fatalf("second row not padded in viewport: %q", got)
|
|
}
|
|
if !strings.Contains(got, "\x1b[4;1H ") {
|
|
t.Fatalf("blank viewport row not cleared: %q", got)
|
|
}
|
|
}
|
|
|
|
func TestRenderScreenSnapshotPlacesCursorInsideViewport(t *testing.T) {
|
|
layout := newTerminalLayout(20, 5)
|
|
got := string(renderScreenSnapshot("abc", vt.CursorState{Col: 2, Row: 1, Visible: true}, layout))
|
|
if !strings.HasSuffix(got, "\x1b[?25h\x1b[3;3H") {
|
|
t.Fatalf("cursor not placed inside viewport: %q", got)
|
|
}
|
|
}
|