package app import ( "strings" "testing" ) func TestRenderMarkdownLines_Heading(t *testing.T) { lines := renderMarkdownLines("# Hello", 40) if len(lines) != 1 { t.Fatalf("heading should be 1 line, got %d (%v)", len(lines), lines) } if !strings.Contains(lines[0], "Hello") { t.Errorf("heading text missing: %q", lines[0]) } if !strings.Contains(lines[0], "\x1b[1m") { t.Errorf("heading not bold: %q", lines[0]) } } func TestRenderMarkdownLines_BulletWrapping(t *testing.T) { src := "- alpha beta gamma delta epsilon" lines := renderMarkdownLines(src, 14) if len(lines) < 2 { t.Fatalf("expected wrap into 2+ lines, got %d: %v", len(lines), lines) } if !strings.Contains(lines[0], "•") { t.Errorf("first line should carry bullet, got %q", lines[0]) } if strings.Contains(lines[1], "•") { t.Errorf("continuation should not repeat bullet: %q", lines[1]) } } func TestRenderMarkdownLines_InlineCode(t *testing.T) { lines := renderMarkdownLines("call `foo()` now", 40) if len(lines) != 1 { t.Fatalf("expected one line, got %d", len(lines)) } if !strings.Contains(lines[0], "foo()") { t.Errorf("inline code text missing: %q", lines[0]) } if !strings.Contains(lines[0], "\x1b[38;5;180m") { t.Errorf("inline code style missing: %q", lines[0]) } } func TestRenderMarkdownLines_FencedCode(t *testing.T) { src := "before\n```\nfn main() {\n}\n```\nafter" lines := renderMarkdownLines(src, 40) // Two fence rules + two code rows + before + after = at least 5 lines. if len(lines) < 5 { t.Fatalf("expected fenced block to produce >=5 rows, got %d: %v", len(lines), lines) } foundCode := false for _, l := range lines { if strings.Contains(l, "fn main()") { foundCode = true break } } if !foundCode { t.Errorf("code block content missing from output: %v", lines) } } func TestRenderMarkdownLines_HardWrap(t *testing.T) { src := strings.Repeat("a", 50) lines := renderMarkdownLines(src, 10) if len(lines) < 5 { t.Fatalf("expected long line to wrap into >=5 rows, got %d: %v", len(lines), lines) } } func TestRenderMarkdownLines_PreservesBlankLines(t *testing.T) { src := "para1\n\npara2" lines := renderMarkdownLines(src, 40) if len(lines) != 3 { t.Fatalf("expected 3 rows, got %d: %v", len(lines), lines) } if lines[1] != "" { t.Errorf("middle row should be empty, got %q", lines[1]) } } func TestMDVisibleLen(t *testing.T) { if got := mdVisibleLen("\x1b[1mfoo\x1b[0m"); got != 3 { t.Errorf("mdVisibleLen styled: want 3 got %d", got) } if got := mdVisibleLen("hello"); got != 5 { t.Errorf("mdVisibleLen plain: want 5 got %d", got) } }