package world import ( "image/color" "testing" "github.com/stretchr/testify/require" ) func TestAddPoint_DefaultsPriorityAndStyle(t *testing.T) { t.Parallel() w := NewWorld(10, 10) id, err := w.AddPoint(1, 1) require.NoError(t, err) obj := w.objects[id].(Point) require.Equal(t, DefaultPriorityPoint, obj.Priority) require.Equal(t, StyleIDDefaultPoint, obj.StyleID) } func TestAddCircle_DefaultsPriorityAndStyle(t *testing.T) { t.Parallel() w := NewWorld(10, 10) id, err := w.AddCircle(1, 1, 1) require.NoError(t, err) obj := w.objects[id].(Circle) require.Equal(t, DefaultPriorityCircle, obj.Priority) require.Equal(t, StyleIDDefaultCircle, obj.StyleID) } func TestAddLine_DefaultsPriorityAndStyle(t *testing.T) { t.Parallel() w := NewWorld(10, 10) id, err := w.AddLine(1, 1, 2, 2) require.NoError(t, err) obj := w.objects[id].(Line) require.Equal(t, DefaultPriorityLine, obj.Priority) require.Equal(t, StyleIDDefaultLine, obj.StyleID) } func TestAddStyleLine_ThenUseStyleID(t *testing.T) { t.Parallel() w := NewWorld(10, 10) width := 5.0 ov := StyleOverride{StrokeWidthPx: &width} styleID := w.AddStyleLine(ov) id, err := w.AddLine(1, 1, 2, 2, LineWithStyleID(styleID), LineWithPriority(777)) require.NoError(t, err) obj := w.objects[id].(Line) require.Equal(t, 777, obj.Priority) require.Equal(t, styleID, obj.StyleID) s, ok := w.styles.Get(styleID) require.True(t, ok) require.Equal(t, 5.0, s.StrokeWidthPx) } func TestAddPoint_WithOverride_CreatesDerivedStyle(t *testing.T) { t.Parallel() w := NewWorld(10, 10) newRadius := 9.0 ov := StyleOverride{PointRadiusPx: &newRadius} id, err := w.AddPoint(1, 1, PointWithStyleOverride(ov)) require.NoError(t, err) obj := w.objects[id].(Point) require.NotEqual(t, StyleIDDefaultPoint, obj.StyleID) s, ok := w.styles.Get(obj.StyleID) require.True(t, ok) require.Equal(t, 9.0, s.PointRadiusPx) } func TestExplicitStyleID_WinsOverOverride(t *testing.T) { t.Parallel() w := NewWorld(10, 10) red := color.RGBA{R: 255, A: 255} styleID := w.AddStyleCircle(StyleOverride{FillColor: red}) // Try to override radius in options too; StyleID must win, override must be ignored. width := 123.0 id, err := w.AddCircle(2, 2, 1, CircleWithStyleID(styleID), CircleWithStyleOverride(StyleOverride{StrokeWidthPx: &width}), ) require.NoError(t, err) obj := w.objects[id].(Circle) require.Equal(t, styleID, obj.StyleID) s, ok := w.styles.Get(styleID) require.True(t, ok) require.Equal(t, red, s.FillColor) // width override must not affect styleID. require.NotEqual(t, 123.0, s.StrokeWidthPx) }