61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package cli
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestViewportModel_Good_Create(t *testing.T) {
|
|
content := "line 1\nline 2\nline 3"
|
|
m := newViewportModel(content, "Title", 5)
|
|
assert.Equal(t, "Title", m.title)
|
|
assert.Equal(t, 3, len(m.lines))
|
|
assert.Equal(t, 0, m.offset)
|
|
}
|
|
|
|
func TestViewportModel_Good_ScrollDown(t *testing.T) {
|
|
lines := make([]string, 20)
|
|
for i := range lines {
|
|
lines[i] = strings.Repeat("x", 10)
|
|
}
|
|
m := newViewportModel(strings.Join(lines, "\n"), "", 5)
|
|
m.scrollDown()
|
|
assert.Equal(t, 1, m.offset)
|
|
}
|
|
|
|
func TestViewportModel_Good_ScrollUp(t *testing.T) {
|
|
lines := make([]string, 20)
|
|
for i := range lines {
|
|
lines[i] = strings.Repeat("x", 10)
|
|
}
|
|
m := newViewportModel(strings.Join(lines, "\n"), "", 5)
|
|
m.scrollDown()
|
|
m.scrollDown()
|
|
m.scrollUp()
|
|
assert.Equal(t, 1, m.offset)
|
|
}
|
|
|
|
func TestViewportModel_Good_NoScrollPastTop(t *testing.T) {
|
|
m := newViewportModel("a\nb\nc", "", 5)
|
|
m.scrollUp() // Already at top
|
|
assert.Equal(t, 0, m.offset)
|
|
}
|
|
|
|
func TestViewportModel_Good_NoScrollPastBottom(t *testing.T) {
|
|
m := newViewportModel("a\nb\nc", "", 5)
|
|
for i := 0; i < 10; i++ {
|
|
m.scrollDown()
|
|
}
|
|
// Should clamp -- can't scroll past content
|
|
assert.GreaterOrEqual(t, m.offset, 0)
|
|
}
|
|
|
|
func TestViewportModel_Good_View(t *testing.T) {
|
|
m := newViewportModel("line 1\nline 2", "My Title", 10)
|
|
view := m.View()
|
|
assert.Contains(t, view, "My Title")
|
|
assert.Contains(t, view, "line 1")
|
|
assert.Contains(t, view, "line 2")
|
|
}
|