96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package mujica
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
)
|
|
|
|
func TestIndicatorOverlayValuesInReadoutAndMemo(t *testing.T) {
|
|
candles := sampleCandles(200)
|
|
view := MarketView{Count: 60}
|
|
overlays := []IndicatorOverlay{{Kind: IndicatorMA, Params: []float64{5}}, {Kind: IndicatorBOLL}}
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
CandlestickChart(c, candles, &view, CandlestickOptions{Frame: ChartFrame{Label: "BTC"}, Overlays: overlays})
|
|
}, 800, 400)
|
|
if !tt.HasText("MA(5)") || !tt.HasText("BOLL(20,2) ↑") {
|
|
t.Fatalf("legend %q", tt.Texts())
|
|
}
|
|
tt.Key(0, ui.KeyTab)
|
|
tt.Key(0, ui.KeyEnd)
|
|
ma := SMA(closesOf(candles), 5)
|
|
want := "MA(5) " + priceUngrouped(ma[199], 2)
|
|
found := false
|
|
for _, s := range tt.Texts() {
|
|
found = found || strings.Contains(s, want)
|
|
}
|
|
if !found {
|
|
t.Fatalf("readout lacks %q: %q", want, tt.Texts())
|
|
}
|
|
// Caller values replace the computation.
|
|
own := make([]float64, 200)
|
|
for i := range own {
|
|
own[i] = 42
|
|
}
|
|
overlays = []IndicatorOverlay{{Kind: IndicatorEMA, Values: own}}
|
|
tt.Frame()
|
|
tt.Frame()
|
|
if !tt.HasText("EMA(20) 42.00") {
|
|
t.Fatalf("own values %q", tt.Texts())
|
|
}
|
|
for name, o := range map[string]IndicatorOverlay{
|
|
"pane kind": {Kind: IndicatorMACD},
|
|
"params": {Kind: IndicatorMA, Params: []float64{0}},
|
|
"values size": {Kind: IndicatorMA, Values: []float64{1}},
|
|
} {
|
|
func() {
|
|
defer func() {
|
|
if recover() == nil {
|
|
t.Errorf("%s: no panic", name)
|
|
}
|
|
}()
|
|
ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
CandlestickChart(c, candles, &view, CandlestickOptions{Frame: ChartFrame{Label: "x"}, Overlays: []IndicatorOverlay{o}})
|
|
}, 300, 200)
|
|
}()
|
|
}
|
|
}
|
|
|
|
func closesOf(cs []Candle) []float64 {
|
|
out := make([]float64, len(cs))
|
|
for i, c := range cs {
|
|
out[i] = c.Close
|
|
}
|
|
return out
|
|
}
|
|
|
|
func TestIndicatorParamsField(t *testing.T) {
|
|
var params []float64
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
IndicatorParamsField(c, IndicatorMACD, ¶ms)
|
|
}, 500, 100)
|
|
if len(params) != 3 || params[0] != 12 {
|
|
t.Fatalf("defaults %v", params)
|
|
}
|
|
tt.Key(0, ui.KeyTab)
|
|
tt.Key(0, ui.KeyUp)
|
|
if params[0] != 13 {
|
|
t.Fatalf("Up on fast %v", params)
|
|
}
|
|
}
|
|
|
|
func TestIndicatorOverlaySnapshot(t *testing.T) {
|
|
candles := sampleCandles(120)
|
|
view := MarketView{Count: 90}
|
|
snapshot(t, "indicator_overlay", 640, 340, func(c *ui.Context) {
|
|
ui.Column(c).Padding(12).Children(func() {
|
|
CandlestickChart(c, candles, &view, CandlestickOptions{Frame: ChartFrame{Label: "BTC", Height: 250},
|
|
Overlays: []IndicatorOverlay{{Kind: IndicatorMA, Params: []float64{10}}, {Kind: IndicatorBOLL}}})
|
|
})
|
|
})
|
|
}
|