Files
galaxy-game/client/world/render_priority_test.go
T
2026-03-07 17:01:22 +02:00

68 lines
1.5 KiB
Go

package world
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestRender_SortsByPriorityWithinTile(t *testing.T) {
t.Parallel()
w := NewWorld(10, 10)
w.resetGrid(2 * SCALE)
// Same tile. Priorities deliberately mixed.
_, err := w.AddCircle(5, 5, 1, CircleWithPriority(500))
require.NoError(t, err)
_, err = w.AddLine(1, 5, 9, 5, LineWithPriority(100))
require.NoError(t, err)
_, err = w.AddPoint(5, 6, PointWithPriority(300))
require.NoError(t, err)
for _, obj := range w.objects {
w.indexObject(obj)
}
params := RenderParams{
ViewportWidthPx: 10,
ViewportHeightPx: 10,
MarginXPx: 0,
MarginYPx: 0,
CameraXWorldFp: 5 * SCALE,
CameraYWorldFp: 5 * SCALE,
CameraZoom: 1.0,
Options: &RenderOptions{
// default: wrap on
},
}
d := &fakePrimitiveDrawer{}
require.NoError(t, w.Render(d, params))
// We verify the first occurrence of each primitive kind follows priority order.
// Since each object is drawn with Add* + Fill/Stroke immediately, order should match.
cmds := d.Commands()
firstLine := indexOfFirst(cmds, "AddLine")
firstCircle := indexOfFirst(cmds, "AddCircle")
firstPoint := indexOfFirst(cmds, "AddPoint")
require.NotEqual(t, -1, firstLine)
require.NotEqual(t, -1, firstCircle)
require.NotEqual(t, -1, firstPoint)
require.Less(t, firstLine, firstPoint)
require.Less(t, firstPoint, firstCircle) // 300 before 500
}
func indexOfFirst(cmds []fakeDrawerCommand, name string) int {
for i, c := range cmds {
if c.Name == name {
return i
}
}
return -1
}