89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|||
|
|
// SPDX-License-Identifier: MIT
|
||
|
|
|
||
|
|
package scriptorium
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestSupportedDiagram(t *testing.T) {
|
||
|
|
supported := []string{"flowchart", "graph", "sequenceDiagram"}
|
||
|
|
for _, kind := range supported {
|
||
|
|
if !SupportedDiagram(kind) {
|
||
|
|
t.Errorf("SupportedDiagram(%q) = false, want true", kind)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
refused := []string{"", "stateDiagram-v2", "pie", "gantt", "classDiagram", "Flowchart"}
|
||
|
|
for _, kind := range refused {
|
||
|
|
if SupportedDiagram(kind) {
|
||
|
|
t.Errorf("SupportedDiagram(%q) = true, want false", kind)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRender(t *testing.T) {
|
||
|
|
got := string(Render([]byte("# Title\n\nHello *world*.\n")))
|
||
|
|
want := "<h1>Title</h1>\n<p>Hello <em>world</em>.</p>\n"
|
||
|
|
if got != want {
|
||
|
|
t.Errorf("Render = %q, want %q", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRenderDeterministic(t *testing.T) {
|
||
|
|
source := []byte("- one\n- two\n\n```go\nfmt.Println(1)\n```\n")
|
||
|
|
first := Render(source)
|
||
|
|
for range 5 {
|
||
|
|
if next := Render(source); !bytes.Equal(first, next) {
|
||
|
|
t.Fatal("Render of the same source differs between calls")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRenderMath(t *testing.T) {
|
||
|
|
got := string(RenderMath([]byte(`\frac{1}{2}`)))
|
||
|
|
want := `<math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>1</mn><mn>2</mn></mfrac></math>`
|
||
|
|
if got != want {
|
||
|
|
t.Errorf("RenderMath = %s, want %s", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRenderMathDisplay(t *testing.T) {
|
||
|
|
got := string(RenderMathDisplay([]byte("x")))
|
||
|
|
want := `<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>x</mi></math>`
|
||
|
|
if got != want {
|
||
|
|
t.Errorf("RenderMathDisplay = %s, want %s", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRenderDiagram(t *testing.T) {
|
||
|
|
out, err := RenderDiagram([]byte("flowchart TD\n A[Start] --> B[End]\n"))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("render: %v", err)
|
||
|
|
}
|
||
|
|
if !bytes.HasPrefix(out, []byte(`<svg xmlns="http://www.w3.org/2000/svg"`)) {
|
||
|
|
t.Errorf("RenderDiagram = %s", out)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRenderDiagramRefuses(t *testing.T) {
|
||
|
|
if _, err := RenderDiagram([]byte("pie\n \"a\": 1\n")); err == nil {
|
||
|
|
t.Error("expected a refusal for an unsupported diagram type")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRenderDiagramDeterministic(t *testing.T) {
|
||
|
|
source := []byte("sequenceDiagram\n A->>B: hello\n B-->>A: bye\n")
|
||
|
|
first, err := RenderDiagram(source)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("render: %v", err)
|
||
|
|
}
|
||
|
|
for range 5 {
|
||
|
|
next, err := RenderDiagram(source)
|
||
|
|
if err != nil || !bytes.Equal(first, next) {
|
||
|
|
t.Fatal("RenderDiagram of the same source differs between calls")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|