wip
This commit is contained in:
93
internal/app/markdown_test.go
Normal file
93
internal/app/markdown_test.go
Normal file
@@ -0,0 +1,93 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user