Files
fenrir/internal/input/spelling_test.go

69 lines
2.1 KiB
Go

// Copyright (c) 2026 Storm Dragon
// SPDX-License-Identifier: GPL-3.0-or-later
package input
import (
"testing"
"time"
"git.stormux.org/storm/fenrir/internal/command"
)
func TestBundledSpellingPressesAndHeldActions(t *testing.T) {
for _, layout := range []string{"desktop", "laptop"} {
bindings, _, err := Load_bindings([]string{"../../config/keyboard/" + layout + ".toml"})
if err != nil {
t.Fatal(err)
}
for _, trial := range []struct {
desktop, laptop uint16
actions []command.ID
}{
{KeyKP5, 37, []command.ID{command.CurrentWord, command.SpellWord, command.PhoneticWord, command.CurrentWord}},
{KeyKP8, 23, []command.ID{command.CurrentLine, command.SpellLine, command.PhoneticLine, command.CurrentLine}},
{KeyKP2, 51, []command.ID{command.CurrentChar, command.PhoneticChar, command.CurrentChar}},
} {
router, err := New_router(bindings)
if err != nil {
t.Fatal(err)
}
now := time.Unix(1000, 0)
router.now = func() time.Time { return now }
keyCode := trial.desktop
if layout == "laptop" {
keyCode = trial.laptop
}
for index, want := range trial.actions {
if layout == "laptop" {
router.Key(1, KeyInsert, 1, false, false)
}
if got := router.Key(1, keyCode, 1, false, false); got.Command != want || got.Forward || !got.Interrupt {
t.Fatal(layout, index, got, want)
}
for range 3 {
if got := router.Key(1, keyCode, 2, false, false); got.Command != want || got.Keypress || got.Forward {
t.Fatal("repeat advanced or lost its action", layout, got, want)
}
}
// Exercise both modifier release orders across fresh presses.
if layout == "laptop" && index%2 == 0 {
router.Key(1, KeyInsert, 0, false, false)
}
router.Key(1, keyCode, 0, false, false)
if layout == "laptop" && index%2 != 0 {
router.Key(1, KeyInsert, 0, false, false)
}
now = now.Add(100 * time.Millisecond)
}
now = now.Add(time.Second)
if layout == "laptop" {
router.Key(1, KeyInsert, 1, false, false)
}
if got := router.Key(1, keyCode, 1, false, false); got.Command != trial.actions[0] {
t.Fatal("expired sequence did not restart", got)
}
}
}
}