Files
MujicaUI/chart_grid_test.go
T
2026-10-05 14:54:57 -04:00

67 lines
2.1 KiB
Go

package mujica
import (
"image/color"
"testing"
"github.com/egoist/mygo/ui"
"mujicaui/theme"
)
func TestChartGridPixelAlignedWithMinor(t *testing.T) {
for _, scale := range []float32{1, 2} {
tt := ui.NewTester(func(c *ui.Context) {
Use(c, Settings{Mode: Light})
y := ChartAxis(c, ChartAxisOptions{Side: SideLeft, Min: 0, Max: 100, Ticks: []float64{0, 50, 100}})
grid := ChartGrid(c, ChartGridOptions{Y: &y, Minor: 2})
ui.Box(c).Fill().Draw(func(p *ui.Painter, r ui.Rect) { grid.Draw(p, ui.Rect{X: 0, Y: 10.3, W: 200, H: 100}) })
}, 200, 130)
tt.SetScale(scale)
img := tt.Image()
major, minor := toRGBA(theme.Light().Border), toRGBA(theme.Light().Border.Mix(theme.Light().Surface, 0.55))
count := map[color.RGBA]int{}
for py := range img.Bounds().Dy() {
c := color.RGBAModel.Convert(img.At(100, py)).(color.RGBA)
count[c]++
}
// Three major and two minor lines, each exactly one device pixel per DIP, no blur.
if count[major] != 3*int(scale) || count[minor] != 2*int(scale) {
t.Fatalf("scale %v: %d major and %d minor pixel rows", scale, count[major], count[minor])
}
}
}
func TestChartGridBad(t *testing.T) {
for name, build := range map[string]func(c *ui.Context){
"no axis": func(c *ui.Context) { ChartGrid(c, ChartGridOptions{}) },
"category minor": func(c *ui.Context) {
a := ChartAxis(c, ChartAxisOptions{Kind: AxisCategory, Categories: []string{"a"}})
ChartGrid(c, ChartGridOptions{X: &a, Minor: 2})
},
} {
func() {
defer func() {
if recover() == nil {
t.Errorf("%s: no panic", name)
}
}()
ui.NewTester(func(c *ui.Context) { Use(c, Settings{}); build(c) }, 100, 100)
}()
}
}
func TestChartGridSnapshot(t *testing.T) {
snapshot(t, "chart_grid", 420, 240, func(c *ui.Context) {
x := ChartAxis(c, ChartAxisOptions{Min: 0, Max: 10})
y := ChartAxis(c, ChartAxisOptions{Side: SideLeft, Kind: AxisLog, Min: 1, Max: 1000})
grid := ChartGrid(c, ChartGridOptions{X: &x, Y: &y, Minor: 4})
ui.Box(c).Fill().Draw(func(p *ui.Painter, r ui.Rect) {
plot := ui.Rect{X: r.X + 48, Y: r.Y + 16, W: r.W - 64, H: r.H - 48}
grid.Draw(p, plot)
x.Draw(p, plot)
y.Draw(p, plot)
})
})
}