1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
package internal
import (
"fmt"
"strings"
"testing"
"github.com/walles/moor/internal/linemetadata"
"github.com/walles/moor/internal/reader"
"github.com/walles/moor/twin"
"gotest.tools/v3/assert"
)
const screenHeight = 60
// Repro for: https://github.com/walles/moor/issues/166
func testCanonicalize1000(t *testing.T, withStatusBar bool, currentStartLine linemetadata.Index, lastVisibleLine linemetadata.Index) {
pager := Pager{}
pager.screen = twin.NewFakeScreen(100, screenHeight)
pager.reader = reader.NewFromTextForTesting("test", strings.Repeat("a\n", 2000))
pager.filteringReader = FilteringReader{
BackingReader: pager.reader,
FilterPattern: &pager.filterPattern,
}
pager.ShowLineNumbers = true
pager.ShowStatusBar = withStatusBar
pager.scrollPosition = scrollPosition{
internalDontTouch: scrollPositionInternal{
lineIndex: ¤tStartLine,
deltaScreenLines: 0,
name: "findFirstHit",
canonicalizing: false,
},
}
lastVisiblePosition := scrollPosition{
internalDontTouch: scrollPositionInternal{
lineIndex: &lastVisibleLine,
deltaScreenLines: 0,
name: "Last Visible Position",
},
}
assert.Equal(t, *lastVisiblePosition.lineIndex(&pager), lastVisibleLine)
}
func TestCanonicalize1000WithStatusBar(t *testing.T) {
for startLine := 0; startLine < 1500; startLine++ {
t.Run(fmt.Sprint("startLine=", startLine), func(t *testing.T) {
testCanonicalize1000(t, true,
linemetadata.IndexFromZeroBased(startLine),
linemetadata.IndexFromZeroBased(startLine+screenHeight-2),
)
})
}
}
func TestCanonicalize1000WithoutStatusBar(t *testing.T) {
for startLine := 0; startLine < 1500; startLine++ {
t.Run(fmt.Sprint("startLine=", startLine), func(t *testing.T) {
testCanonicalize1000(t, true,
linemetadata.IndexFromZeroBased(startLine),
linemetadata.IndexFromZeroBased(startLine+screenHeight-1),
)
})
}
}
|