75 lines
2.3 KiB
Go
75 lines
2.3 KiB
Go
package markdown
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
md "github.com/ayn2op/arikawa/v3/markdown"
|
|
"github.com/ayn2op/discordo/internal/config"
|
|
"github.com/ayn2op/tview/text"
|
|
"github.com/gdamore/tcell/v3"
|
|
)
|
|
|
|
func TestRendererRenderText(t *testing.T) {
|
|
for _, test := range []struct {
|
|
name string
|
|
source string
|
|
mask bool
|
|
want string
|
|
}{
|
|
{"spoilers_masked", "before ||secret|| after", true, "before [spoiler] after"},
|
|
{"spoilers_visible", "before ||secret|| after", false, "before secret after"},
|
|
{"ordered_list_after_nested", "1. a\n2. b\n - x\n - y\n3. c", false, "\n1. a\n2. b\n - x\n - y\n3. c"},
|
|
{"ordered_list_after_nested_ordered", "1. a\n 1. x\n 2. y\n2. b", false, "\n1. a\n 1. x\n 2. y\n2. b"},
|
|
{"list_nested_twice", "- a\n - b\n - c\n- d", false, "\n- a\n - b\n - c\n- d"},
|
|
{"ordered_list_start", "3. a\n4. b", false, "\n3. a\n4. b"},
|
|
} {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
source := []byte(test.source)
|
|
rendered := NewRenderer(&config.Config{Markdown: config.MarkdownConfig{MaskSpoilers: test.mask}}).RenderText(source, md.Parse(source), tcell.StyleDefault, func(string) []text.Span { return nil })
|
|
var got strings.Builder
|
|
for _, span := range rendered {
|
|
got.WriteString(span.Text)
|
|
}
|
|
if got.String() != test.want {
|
|
t.Fatalf("got %q, want %q", got.String(), test.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRendererRenderTextEmoji(t *testing.T) {
|
|
source := []byte("hi <:cat:5> <:dog:6>")
|
|
// Only the emoji with ID 5 has an image.
|
|
emoji := func(id string) []text.Span {
|
|
if id == "5" {
|
|
return []text.Span{{Text: "I"}}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
for _, test := range []struct {
|
|
name string
|
|
colons bool
|
|
showName bool
|
|
want string
|
|
}{
|
|
{"plain", false, true, "hi I cat dog"},
|
|
{"colons", true, true, "hi I :cat: :dog:"},
|
|
// The emoji without an image keeps its name.
|
|
{"image only", false, false, "hi I dog"},
|
|
} {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
var cfg config.Config
|
|
cfg.UI.MessagesList.Emojis.ColonsAroundName = test.colons
|
|
cfg.UI.MessagesList.Emojis.ShowEmojiName = test.showName
|
|
var got strings.Builder
|
|
for _, span := range NewRenderer(&cfg).RenderText(source, md.Parse(source), tcell.StyleDefault, emoji) {
|
|
got.WriteString(span.Text)
|
|
}
|
|
if got.String() != test.want {
|
|
t.Fatalf("got %q, want %q", got.String(), test.want)
|
|
}
|
|
})
|
|
}
|
|
}
|