Files
alice-backend/station/panel_test.go
T

64 lines
1.9 KiB
Go

package main
import (
"testing"
"time"
)
func TestPanelSwipeAndPartialSwipeAreExclusive(t *testing.T) {
for _, tc := range []struct {
zones []uint16
want panelAction
}{
{[]uint16{panelMinus, panelCenter, panelPlus}, panelNext},
{[]uint16{panelPlus, panelCenter, panelMinus}, panelPrevious},
{[]uint16{panelMinus, panelCenter}, ""},
{[]uint16{panelMinus, panelCenter, panelMinus}, ""},
{[]uint16{panelPlus}, panelLouder},
{[]uint16{panelCenter}, panelToggle},
} {
var g panelGesture
now := time.Unix(100, 0)
for _, code := range tc.zones {
g.key(now, code, 1)
now = now.Add(45 * time.Millisecond)
g.key(now, code, 0)
now = now.Add(35 * time.Millisecond)
if got := g.tick(now); got != "" {
t.Fatalf("%v: action before end of gesture: %q", tc.zones, got)
}
}
now = now.Add(panelGap)
if got := g.tick(now); got != tc.want {
t.Fatalf("%v: got %q, want %q", tc.zones, got, tc.want)
}
if got := g.tick(now.Add(time.Second)); got != "" {
t.Fatalf("%v: unexpected duplicate action %q", tc.zones, got)
}
}
}
func TestPanelHoldRepeatsWithoutReleaseTap(t *testing.T) {
var g panelGesture
start := time.Unix(100, 0)
g.key(start, panelMinus, 1)
g.key(start.Add(100*time.Millisecond), panelMinus, 2)
if got := g.tick(start.Add(499 * time.Millisecond)); got != "" {
t.Fatalf("early hold: %q", got)
}
if got := g.tick(start.Add(panelHold)); got != panelQuieter {
t.Fatalf("first hold step: %q", got)
}
if got := g.tick(start.Add(panelHold + panelRepeat)); got != panelQuieter {
t.Fatalf("repeat hold step: %q", got)
}
g.key(start.Add(time.Second), panelMinus, 0)
if got := g.tick(start.Add(2 * time.Second)); got != "" {
t.Fatalf("hold release emitted %q", got)
}
g.key(start.Add(3*time.Second), panelCenter, 1)
if got := g.tick(start.Add(3*time.Second + panelWakeHold)); got != panelWake {
t.Fatalf("center hold emitted %q", got)
}
}