feat: primitive styling
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
package world
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestStyleOverrideApply_OverridesOnlyProvidedFields(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
base := Style{
|
||||
FillColor: color.RGBA{R: 1, A: 255},
|
||||
StrokeColor: color.RGBA{G: 2, A: 255},
|
||||
StrokeWidthPx: 1.0,
|
||||
StrokeDashes: []float64{3, 1},
|
||||
StrokeDashOffset: 0.5,
|
||||
PointRadiusPx: 2.0,
|
||||
}
|
||||
|
||||
newWidth := 5.0
|
||||
newRadius := 7.0
|
||||
|
||||
override := StyleOverride{
|
||||
StrokeWidthPx: &newWidth,
|
||||
PointRadiusPx: &newRadius,
|
||||
// Everything else is unset (nil) => must remain from base.
|
||||
}
|
||||
|
||||
out := override.Apply(base)
|
||||
|
||||
require.Equal(t, base.FillColor, out.FillColor)
|
||||
require.Equal(t, base.StrokeColor, out.StrokeColor)
|
||||
require.Equal(t, 5.0, out.StrokeWidthPx)
|
||||
require.Equal(t, base.StrokeDashes, out.StrokeDashes)
|
||||
require.Equal(t, base.StrokeDashOffset, out.StrokeDashOffset)
|
||||
require.Equal(t, 7.0, out.PointRadiusPx)
|
||||
}
|
||||
|
||||
func TestStyleTable_DefaultsExistAndAreStable(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tbl := NewStyleTable()
|
||||
|
||||
_, ok := tbl.Get(StyleIDDefaultLine)
|
||||
require.True(t, ok)
|
||||
|
||||
_, ok = tbl.Get(StyleIDDefaultCircle)
|
||||
require.True(t, ok)
|
||||
|
||||
_, ok = tbl.Get(StyleIDDefaultPoint)
|
||||
require.True(t, ok)
|
||||
}
|
||||
|
||||
func TestStyleTable_AddDerived_StoresResolvedStyleAndCopiesSlices(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tbl := NewStyleTable()
|
||||
|
||||
dashes := []float64{10, 5}
|
||||
override := StyleOverride{
|
||||
StrokeDashes: &dashes,
|
||||
}
|
||||
id := tbl.AddDerived(StyleIDDefaultLine, override)
|
||||
|
||||
got, ok := tbl.Get(id)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, []float64{10, 5}, got.StrokeDashes)
|
||||
|
||||
// Mutate caller slice; table must not change.
|
||||
dashes[0] = 999
|
||||
|
||||
got2, ok := tbl.Get(id)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, []float64{10, 5}, got2.StrokeDashes)
|
||||
|
||||
// Mutate returned slice; table must not change.
|
||||
got2.StrokeDashes[0] = 123
|
||||
|
||||
got3, ok := tbl.Get(id)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, []float64{10, 5}, got3.StrokeDashes)
|
||||
}
|
||||
|
||||
func TestDefaultPriorities_AreOrderedAndStepped(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
require.Equal(t, 100, DefaultPriorityLine)
|
||||
require.Equal(t, 200, DefaultPriorityCircle)
|
||||
require.Equal(t, 300, DefaultPriorityPoint)
|
||||
|
||||
require.Less(t, DefaultPriorityLine, DefaultPriorityCircle)
|
||||
require.Less(t, DefaultPriorityCircle, DefaultPriorityPoint)
|
||||
}
|
||||
Reference in New Issue
Block a user