mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-10 15:46:26 -04:00
It can be used to auto-scroll a view during drag gestures when the cursor reaches the edge of the view.
63 lines
2 KiB
Go
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)
|
|
}
|