jesseduffield.lazygit/pkg/config/pager_config_test.go
Stefan Haller 8534a05a2e Allow cycling pagers in reverse
With more than a couple of pagers, having to cycle forward through all
of them to reach the previous one (or to back out of an accidental press
of `|`) is tedious. Add a second binding that cycles backward.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 15:51:57 +02:00

83 lines
2.2 KiB
Go

package config
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCurrentPagerName(t *testing.T) {
scenarios := []struct {
name string
pager PagingConfig
expected string
}{
{
name: "explicit name takes precedence over the command",
pager: PagingConfig{Name: "delta side-by-side", Pager: "delta --side-by-side"},
expected: "delta side-by-side",
},
{
name: "derived from the first word of the pager command",
pager: PagingConfig{Pager: "delta --side-by-side"},
expected: "delta",
},
{
name: "surrounding whitespace in the command is ignored",
pager: PagingConfig{Pager: " diff-so-fancy "},
expected: "diff-so-fancy",
},
{
name: "falls back to the external diff command when there is no pager",
pager: PagingConfig{ExternalDiffCommand: "difft --color=always"},
expected: "difft",
},
{
name: "no name can be derived",
pager: PagingConfig{UseExternalDiffGitConfig: true},
expected: "",
},
}
for _, s := range scenarios {
t.Run(s.name, func(t *testing.T) {
userConfig := &UserConfig{}
userConfig.Git.Pagers = []PagingConfig{s.pager}
config := NewPagerConfig(func() *UserConfig { return userConfig })
assert.Equal(t, s.expected, config.CurrentPagerName())
})
}
}
func TestCurrentPagerNameWithoutPagers(t *testing.T) {
config := NewPagerConfig(func() *UserConfig { return &UserConfig{} })
assert.Equal(t, "", config.CurrentPagerName())
}
func TestCyclePagers(t *testing.T) {
userConfig := &UserConfig{}
userConfig.Git.Pagers = []PagingConfig{{Name: "a"}, {Name: "b"}, {Name: "c"}}
config := NewPagerConfig(func() *UserConfig { return userConfig })
currentIndex := func() int {
index, _ := config.CurrentPagerIndex()
return index
}
assert.Equal(t, 0, currentIndex())
config.CyclePagers()
assert.Equal(t, 1, currentIndex())
config.CyclePagers()
assert.Equal(t, 2, currentIndex())
config.CyclePagers()
assert.Equal(t, 0, currentIndex(), "cycling forward past the last pager wraps to the first")
config.CyclePagersBackward()
assert.Equal(t, 2, currentIndex(), "cycling backward past the first pager wraps to the last")
config.CyclePagersBackward()
assert.Equal(t, 1, currentIndex())
}