Skip to content
quarry Artifact [28338cb471]
Login

Artifact [28338cb471]

Artifact 28338cb47102a2c516c44167f1228aa48e09ff78d4cf56755009fe90bdd11908:


package pikchr

import (
	"strings"
	"testing"
)

func TestRenderDiagram(t *testing.T) {
	out, err := Render([]byte(`
box "hello" fit
arrow right
circle "world" fit
`))
	if err != nil {
		t.Fatal(err)
	}
	svg := string(out)
	if !strings.Contains(svg, "<svg") || !strings.Contains(svg, "</svg>") {
		t.Fatalf("not an svg:\n%s", svg[:min(200, len(svg))])
	}
	if !strings.Contains(svg, "hello") || !strings.Contains(svg, "world") {
		t.Fatalf("labels missing:\n%s", svg[:min(400, len(svg))])
	}
}

func TestSyntaxErrorSurfaces(t *testing.T) {
	if _, err := Render([]byte("this is not ( valid pikchr")); err == nil {
		t.Fatal("want an error for invalid source")
	}
}

// Instances must not leak state between renders.
func TestRepeatedRenders(t *testing.T) {
	for i := 0; i < 3; i++ {
		out, err := Render([]byte(`box "n" fit`))
		if err != nil {
			t.Fatalf("render %d: %v", i, err)
		}
		if !strings.Contains(string(out), "<svg") {
			t.Fatalf("render %d produced no svg", i)
		}
	}
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}