jesseduffield.lazygit/pkg/gui/controllers/helpers/drag_autoscroller_test.go
Stefan Haller f5a069342b Add DragAutoScroller helper
It can be used to auto-scroll a view during drag gestures when the
cursor reaches the edge of the view.
2026-07-31 08:26:35 +02:00

63 lines
2 KiB
Go

package helpers
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestDragAutoscrollZone(t *testing.T) {
testCases := []struct {
name string
pointerViewportY int
expectedDirection int
expectedInterval time.Duration
}{
{name: "above view", pointerViewportY: -1, expectedDirection: -1, expectedInterval: dragAutoscrollVeryFastInterval},
{name: "top outer row", pointerViewportY: 0, expectedDirection: -1, expectedInterval: dragAutoscrollFastInterval},
{name: "top inner row", pointerViewportY: 1, expectedDirection: -1, expectedInterval: dragAutoscrollSlowInterval},
{name: "middle", pointerViewportY: 5},
{name: "bottom inner row", pointerViewportY: 8, expectedDirection: 1, expectedInterval: dragAutoscrollSlowInterval},
{name: "bottom outer row", pointerViewportY: 9, expectedDirection: 1, expectedInterval: dragAutoscrollFastInterval},
{name: "below view", pointerViewportY: 10, expectedDirection: 1, expectedInterval: dragAutoscrollVeryFastInterval},
}
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
direction, interval := dragAutoscrollZone(10, testCase.pointerViewportY)
assert.Equal(t, testCase.expectedDirection, direction)
assert.Equal(t, testCase.expectedInterval, interval)
})
}
}
func TestDragAutoscrollerDoesNotRestartWhenMovingToOuterEdge(t *testing.T) {
self := &DragAutoscroller{
generation: 1,
direction: 1,
interval: dragAutoscrollSlowInterval,
}
generation, schedule := self.updateState(1, dragAutoscrollFastInterval)
assert.Equal(t, uint64(1), generation)
assert.False(t, schedule)
assert.Equal(t, dragAutoscrollFastInterval, self.interval)
}
func TestStaleDragAutoscrollTickDoesNotCancelCurrentGeneration(t *testing.T) {
self := &DragAutoscroller{
generation: 4,
direction: 1,
interval: dragAutoscrollFastInterval,
}
self.tick(2)
assert.Equal(t, uint64(4), self.generation)
assert.Equal(t, 1, self.direction)
assert.Equal(t, dragAutoscrollFastInterval, self.interval)
}