package context import ( "strings" "testing" "github.com/samber/lo" "github.com/stretchr/testify/assert" ) func TestListRenderer_renderLines(t *testing.T) { scenarios := []struct { name string modelStrings []string startIdx int endIdx int expectedOutput string }{ { name: "Render whole list", modelStrings: []string{"a", "b", "c"}, startIdx: 0, endIdx: 3, expectedOutput: ` a b c`, }, { name: "Partial list, beginning", modelStrings: []string{"a", "b", "c"}, startIdx: 0, endIdx: 2, expectedOutput: ` a b`, }, { name: "Partial list, end", modelStrings: []string{"a", "b", "c"}, startIdx: 1, endIdx: 3, expectedOutput: ` b c`, }, { name: "Pass an endIdx greater than the model length", modelStrings: []string{"a", "b", "c"}, startIdx: 2, endIdx: 5, expectedOutput: ` c`, }, } for _, s := range scenarios { t.Run(s.name, func(t *testing.T) { viewModel := NewListViewModel[string](func() []string { return s.modelStrings }) self := &ListRenderer{ list: viewModel, getDisplayStrings: func(startIdx int, endIdx int) [][]string { return lo.Map(s.modelStrings[startIdx:endIdx], func(s string, _ int) []string { return []string{s} }) }, } expectedOutput := strings.Join(lo.Map( strings.Split(strings.TrimPrefix(s.expectedOutput, "\n"), "\n"), func(line string, _ int) string { return strings.TrimSpace(line) }), "\n") assert.Equal(t, expectedOutput, self.renderLines(s.startIdx, s.endIdx)) }) } }