74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package viz
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"bspviz/internal/bsp"
|
|
"bspviz/internal/geom"
|
|
"bspviz/internal/mapfmt"
|
|
)
|
|
|
|
func TestEmitDOT(t *testing.T) {
|
|
root := &bsp.Node{
|
|
O: geom.V(0, 0),
|
|
D: geom.V(1, 0),
|
|
Left: &bsp.Node{
|
|
Leaf: &bsp.Leaf{Segs: []geom.Seg{{A: geom.V(0, 0), B: geom.V(1, 1)}}},
|
|
},
|
|
Right: &bsp.Node{
|
|
Leaf: &bsp.Leaf{},
|
|
},
|
|
}
|
|
out := filepath.Join(t.TempDir(), "tree.dot")
|
|
if err := EmitDOT(root, out); err != nil {
|
|
t.Fatalf("EmitDOT error: %v", err)
|
|
}
|
|
got, err := os.ReadFile(out)
|
|
if err != nil {
|
|
t.Fatalf("ReadFile: %v", err)
|
|
}
|
|
expect := "digraph BSP {\n" +
|
|
" node [fontname=\"Helvetica\"];\n" +
|
|
" n0 [label=\"Split\\nO=(0,0) D=(1,0)\"];\n" +
|
|
" n1 [label=\"Leaf\\nSegs=1\", shape=ellipse, style=filled, fillcolor=lightgray];\n" +
|
|
" n2 [label=\"Leaf\\nSegs=0\", shape=ellipse, style=filled, fillcolor=lightgray];\n" +
|
|
" n0 -> n1 [label=\"L\"];\n" +
|
|
" n0 -> n2 [label=\"R\"];\n" +
|
|
"}\n"
|
|
if string(got) != expect {
|
|
t.Fatalf("unexpected DOT output:\n%s", got)
|
|
}
|
|
}
|
|
|
|
func TestRenderPNGProducesFile(t *testing.T) {
|
|
m := &mapfmt.MapData{
|
|
Vertices: []mapfmt.Vertex{{X: 0, Y: 0}, {X: 64, Y: 0}, {X: 64, Y: 64}},
|
|
Linedefs: []mapfmt.Linedef{
|
|
{V1: 0, V2: 1},
|
|
{V1: 1, V2: 2},
|
|
{V1: 2, V2: 0},
|
|
},
|
|
}
|
|
root := &bsp.Node{
|
|
O: geom.V(0, 0),
|
|
D: geom.V(1, 0),
|
|
Left: &bsp.Node{Leaf: &bsp.Leaf{Segs: []geom.Seg{{A: geom.V(0, 0), B: geom.V(64, 64)}}}},
|
|
Right: &bsp.Node{Leaf: &bsp.Leaf{}},
|
|
}
|
|
out := filepath.Join(t.TempDir(), "render.png")
|
|
if err := RenderPNG(m, root, out); err != nil {
|
|
t.Fatalf("RenderPNG error: %v", err)
|
|
}
|
|
data, err := os.ReadFile(out)
|
|
if err != nil {
|
|
t.Fatalf("ReadFile: %v", err)
|
|
}
|
|
pngMagic := []byte{0x89, 'P', 'N', 'G', '\r', '\n', 0x1a, '\n'}
|
|
if len(data) < len(pngMagic) || !bytes.Equal(data[:len(pngMagic)], pngMagic) {
|
|
t.Fatalf("output is not a PNG")
|
|
}
|
|
}
|