1package copy
2
3import (
4 "math"
5 "testing"
6
7 renderer "github.com/bnema/vev-vt/ansi"
8 "github.com/stretchr/testify/require"
9)
10
11func TestScrollRowsMovesViewportImmediately(t *testing.T) {
12 rows := make([][]renderer.Cell, 100)
13 for i := range rows {
14 rows[i] = []renderer.Cell{{Rune: 'x', Style: renderer.DefaultStyle()}}
15 }
16 for _, tc := range []struct {
17 name string
18 deltas []int
19 want []int
20 }{
21 {"reverse", []int{-3, 3, -3, 3}, []int{87, 90, 87, 90}},
22 {"clamp", []int{math.MinInt, -1, math.MaxInt}, []int{0, 0, 90}},
23 } {
24 t.Run(tc.name, func(t *testing.T) {
25 mode := NewMode(NewDocument(NewSnapshotFromRows(rows, 1, 10), ""))
26 for i, delta := range tc.deltas {
27 mode.ScrollRows(delta)
28 require.Equal(t, tc.want[i], mode.ViewportTop)
29 require.GreaterOrEqual(t, mode.Cursor().Row, mode.ViewportTop)
30 require.Less(t, mode.Cursor().Row, mode.ViewportTop+10)
31 }
32 require.True(t, mode.AtBottom())
33 })
34 }
35}