Files
MujicaUI/sparkline_test.go
T

79 lines
2.1 KiB
Go

package mujica
import (
"math"
"testing"
"github.com/egoist/mygo/ui"
)
var sparkValues = []float64{3, 5, 4, math.NaN(), 7, 6, 9}
func TestSparklineEndValueAndKeys(t *testing.T) {
kind := SparklineLine
h := &chartHarness{build: func(c *ui.Context) ChartResult {
return Sparkline(c, sparkValues, SparklineOptions{Frame: ChartFrame{Label: "Bells"}, Kind: kind})
}}
tt := ui.NewTester(h.view, 300, 200)
if got := chartReadout(tt); got != "9" {
t.Fatalf("end value %q", got)
}
r, _ := tt.Find("Bells")
if r.H < 28 || r.W != 96 {
t.Fatalf("sparkline box %v", r)
}
tabTo(t, tt, "Bells")
tt.Key(0, ui.KeyRight)
tt.Key(0, ui.KeyRight)
if got := chartReadout(tt); got != "5" || h.res.Point != 1 {
t.Fatalf("read %q at %d", got, h.res.Point)
}
tt.Key(0, ui.KeyRight)
tt.Key(0, ui.KeyRight)
if got := chartReadout(tt); got != "no value" {
t.Fatalf("missing %q", got)
}
for _, kind = range []SparklineKind{SparklineBar, SparklineArea} {
tt.Frame()
tt.Move(r.X+r.W-2, r.Y+r.H/2)
if got := chartReadout(tt); got != "9" || h.res.Point != 6 {
t.Fatalf("kind %d hover %q", kind, got)
}
}
}
func TestSparklineStates(t *testing.T) {
status := DataLoading
var vals []float64
h := &chartHarness{build: func(c *ui.Context) ChartResult {
return Sparkline(c, vals, SparklineOptions{Frame: ChartFrame{Label: "Bells", Status: status}})
}}
tt := ui.NewTester(h.view, 300, 200)
status = DataFailed
tt.Frame()
if err := tt.Click("Retry"); err != nil {
t.Fatal(err)
}
status = DataReady
tt.Frame()
if !tt.HasText("No data") {
t.Fatalf("empty %q", tt.Texts())
}
defer func() {
if recover() == nil {
t.Fatal("no panic without a label")
}
}()
ui.NewTester(func(c *ui.Context) { Use(c, Settings{}); Sparkline(c, vals, SparklineOptions{}) }, 100, 100)
}
func TestSparklineSnapshot(t *testing.T) {
snapshot(t, "sparkline", 420, 80, func(c *ui.Context) {
ui.Row(c).Padding(16).Gap(24).Children(func() {
for _, k := range []SparklineKind{SparklineLine, SparklineBar, SparklineArea} {
Sparkline(c, sparkValues, SparklineOptions{Frame: ChartFrame{Label: "Bells"}, Kind: k})
}
})
})
}