Add auto-summary settings
This commit is contained in:
@@ -16,7 +16,7 @@ func bytesRepeat(b byte, n int) []byte {
|
||||
func TestViewportRendererShiftsCursor(t *testing.T) {
|
||||
vr := newViewportRenderer(newTerminalLayout(120, 40))
|
||||
got := string(vr.Render([]byte("\x1b[H")))
|
||||
if got != "\x1b[3;1H" {
|
||||
if got != "\x1b[4;1H" {
|
||||
t.Fatalf("CUP home: got %q", got)
|
||||
}
|
||||
}
|
||||
@@ -66,7 +66,7 @@ func TestViewportRendererSwallowsOriginModeToggles(t *testing.T) {
|
||||
if !strings.Contains(got, "a") || !strings.Contains(got, "b") || !strings.Contains(got, "c") {
|
||||
t.Fatalf("origin-mode toggles should not drop surrounding text: got %q", got)
|
||||
}
|
||||
if strings.Count(got, "\x1b[3;1H") != 2 {
|
||||
if strings.Count(got, "\x1b[4;1H") != 2 {
|
||||
t.Fatalf("origin-mode set/reset should home inside the viewport twice: got %q", got)
|
||||
}
|
||||
}
|
||||
@@ -88,23 +88,23 @@ func TestViewportRendererOriginModeCUPUsesScrollTop(t *testing.T) {
|
||||
if strings.Contains(got, "\x1b[?6h") {
|
||||
t.Fatalf("origin-mode set leaked to host: %q", got)
|
||||
}
|
||||
if !strings.Contains(got, "\x1b[7;1H") {
|
||||
t.Fatalf("CUP row 1 in origin mode should land at scrollTop row 5 shifted to host row 7: got %q", got)
|
||||
if !strings.Contains(got, "\x1b[8;1H") {
|
||||
t.Fatalf("CUP row 1 in origin mode should land at scrollTop row 5 shifted to host row 8: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestViewportRendererClearScreenIsViewportOnly(t *testing.T) {
|
||||
// hostRows=7 leaves four viewport rows after the 2-row tab bar and
|
||||
// hostRows=7 leaves three viewport rows after the 3-row tab bar and
|
||||
// 1-row status reservation.
|
||||
vr := newViewportRenderer(newTerminalLayout(20, 7))
|
||||
got := string(vr.Render([]byte("\x1b[2J")))
|
||||
if strings.Contains(got, "\x1b[2J") {
|
||||
t.Fatalf("host clear-screen leaked through: %q", got)
|
||||
}
|
||||
if strings.Count(got, "\x1b[20X") != 4 {
|
||||
if strings.Count(got, "\x1b[20X") != 3 {
|
||||
t.Fatalf("clear rows: got %q", got)
|
||||
}
|
||||
if !strings.Contains(got, "\x1b[3;1H") || !strings.Contains(got, "\x1b[6;1H") {
|
||||
if !strings.Contains(got, "\x1b[4;1H") || !strings.Contains(got, "\x1b[6;1H") {
|
||||
t.Fatalf("clear did not target viewport rows: %q", got)
|
||||
}
|
||||
}
|
||||
@@ -140,13 +140,12 @@ func TestViewportRendererClearToEndIsViewportOnly(t *testing.T) {
|
||||
t.Fatalf("host clear-to-end leaked through: %q", got)
|
||||
}
|
||||
// childCols == 19 (40 cols - 28 sidebar - 1 gap - 0-index fudge).
|
||||
// Each of the 4 viewport rows should get a 19-cell erase.
|
||||
// childCols == 11 with hostCols=40 (28 sidebar + 1 gap reserved).
|
||||
// 4 viewport rows, but the cursor row uses ECH at cursor (col 1),
|
||||
// so we expect 4 erases of 11 cells each.
|
||||
// 3 viewport rows, but the cursor row uses ECH at cursor (col 1),
|
||||
// so we expect 3 erases of 11 cells each.
|
||||
count := strings.Count(got, "\x1b[11X")
|
||||
if count != 4 {
|
||||
t.Fatalf("expected 4 ECH-11 sequences, got %d in %q", count, got)
|
||||
if count != 3 {
|
||||
t.Fatalf("expected 3 ECH-11 sequences, got %d in %q", count, got)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,7 +181,7 @@ func TestViewportRendererClampsCUPColumn(t *testing.T) {
|
||||
// column so the host cursor never lands in the sidebar.
|
||||
vr := newViewportRenderer(newTerminalLayout(120, 40))
|
||||
got := string(vr.Render([]byte("\x1b[5;95H")))
|
||||
if !strings.Contains(got, "\x1b[7;91H") {
|
||||
if !strings.Contains(got, "\x1b[8;91H") {
|
||||
t.Fatalf("CUP col 95 should clamp to 91 (childCols): got %q", got)
|
||||
}
|
||||
}
|
||||
@@ -277,7 +276,7 @@ func TestViewportRendererFlagsScrollVerbs(t *testing.T) {
|
||||
|
||||
func TestViewportRendererFlagsLineFeedAtViewportBottomAsScrolling(t *testing.T) {
|
||||
vr := newViewportRenderer(newTerminalLayout(120, 40))
|
||||
_ = vr.Render([]byte("\x1b[37;1H\n"))
|
||||
_ = vr.Render([]byte("\x1b[36;1H\n"))
|
||||
if !vr.TookScrollAction() {
|
||||
t.Fatalf("LF at viewport bottom should flag scroll")
|
||||
}
|
||||
@@ -285,7 +284,7 @@ func TestViewportRendererFlagsLineFeedAtViewportBottomAsScrolling(t *testing.T)
|
||||
|
||||
func TestViewportRendererDoesNotFlagLineFeedBeforeViewportBottom(t *testing.T) {
|
||||
vr := newViewportRenderer(newTerminalLayout(120, 40))
|
||||
_ = vr.Render([]byte("\x1b[36;1H\n"))
|
||||
_ = vr.Render([]byte("\x1b[35;1H\n"))
|
||||
if vr.TookScrollAction() {
|
||||
t.Fatalf("LF before viewport bottom should not flag scroll")
|
||||
}
|
||||
@@ -312,7 +311,7 @@ func TestViewportRendererClampsCUUAtViewportTop(t *testing.T) {
|
||||
vr := newViewportRenderer(newTerminalLayout(120, 40))
|
||||
// CUP to viewport row 1 then CUU by 50.
|
||||
got := string(vr.Render([]byte("\x1b[1;1H\x1b[50ACLOBBER")))
|
||||
if !strings.Contains(got, "\x1b[3;1H") {
|
||||
if !strings.Contains(got, "\x1b[4;1H") {
|
||||
t.Fatalf("expected CUP shifted to mainTop: got %q", got)
|
||||
}
|
||||
// The CUU should have been swallowed (n clamped to 0 from row 1).
|
||||
@@ -339,10 +338,10 @@ func TestViewportRendererClampsCUUPartial(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestViewportRendererClampsCUDAtViewportBottom(t *testing.T) {
|
||||
// childRows=37 for layout(120, 40). Park cursor at row 37, ask for
|
||||
// childRows=36 for layout(120, 40). Park cursor at row 36, ask for
|
||||
// 10 down → safe step is 0.
|
||||
vr := newViewportRenderer(newTerminalLayout(120, 40))
|
||||
got := string(vr.Render([]byte("\x1b[37;1H\x1b[10B")))
|
||||
got := string(vr.Render([]byte("\x1b[36;1H\x1b[10B")))
|
||||
if strings.Contains(got, "\x1b[10B") {
|
||||
t.Fatalf("CUD past viewport bottom should be dropped: got %q", got)
|
||||
}
|
||||
@@ -363,10 +362,10 @@ func TestViewportRendererClampsCPLAndHomesColumn(t *testing.T) {
|
||||
|
||||
func TestViewportRendererClampsCNL(t *testing.T) {
|
||||
vr := newViewportRenderer(newTerminalLayout(120, 40))
|
||||
// CUP to row 35 then CNL by 50 → safe step is 2 (childRows-35).
|
||||
got := string(vr.Render([]byte("\x1b[35;10H\x1b[50E")))
|
||||
// CUP to row 34 then CNL by 50 → safe step is 2 (childRows-34).
|
||||
got := string(vr.Render([]byte("\x1b[34;10H\x1b[50E")))
|
||||
if !strings.Contains(got, "\x1b[2E") {
|
||||
t.Fatalf("CNL 50 from row 35 should clamp to 2: got %q", got)
|
||||
t.Fatalf("CNL 50 from row 34 should clamp to 2: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user