Files
2026-03-03 21:10:49 +01:00

81 lines
1.5 KiB
Go

package table
import (
"strings"
"testing"
"charm.land/lipgloss/v2"
)
func TestRenderRowSelection(t *testing.T) {
cols := []Column{
{Title: "ID", Width: 5},
{Title: "Task", Width: 10},
}
rows := []Row{
{"1", "Task 1"},
{"2", "Task 2"},
}
m := New(
WithColumns(cols),
WithRows(rows),
WithStyles(Styles{
Cell: lipgloss.NewStyle().Padding(0, 1),
Selected: lipgloss.NewStyle().Background(lipgloss.Color("212")),
}),
)
m.SetWidth(30)
m.SetCursor(0)
rendered := m.renderRow(0)
// The rendered row should contain the background color 212
// AND the background should be present in the padding area.
// Since we are using lipgloss, we check for the color code.
if !strings.Contains(rendered, "212") {
t.Errorf("expected rendered row to contain background color 212, got %s", rendered)
}
// Verify it has the full width
if lipgloss.Width(rendered) != 30 {
t.Errorf("expected width 30, got %d", lipgloss.Width(rendered))
}
}
func TestRenderRowOutOfBounds(t *testing.T) {
cols := []Column{
{Title: "ID", Width: 5},
}
rows := []Row{
{"1", "Task 1 Extra Column"},
}
m := New(
WithColumns(cols),
WithRows(rows),
)
// This should not panic
m.renderRow(0)
}
func TestRenderRowNoStyles(t *testing.T) {
cols := []Column{
{Title: "ID", Width: 5},
}
rows := []Row{
{"1"},
}
m := New(
WithColumns(cols),
WithRows(rows),
)
m.rowStyles = nil // Ensure rowStyles is nil
// This should not panic
m.renderRow(0)
}