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) }