Files
fenrir/internal/input/attributes_test.go

102 lines
3.1 KiB
Go

// Copyright (c) 2026 Storm Dragon
// SPDX-License-Identifier: GPL-3.0-or-later
package input
import (
"git.stormux.org/storm/fenrir/internal/command"
"testing"
)
func TestAttributeBindingsNumLockRepeatsAndRelease(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 _, numLock := range []bool{false, true} {
for _, modifierFirst := range []bool{false, true} {
router, err := New_router(bindings)
if err != nil {
t.Fatal(err)
}
code := uint16(74)
if layout == "laptop" {
code = 30
router.Key(0, KeyInsert, 1, numLock, false)
router.Key(0, KeyShift, 1, numLock, false)
}
for range 2 {
got := router.Key(0, code, 1, numLock, false)
forwarded := layout == "desktop" && numLock
if got.Forward != forwarded || (!forwarded && got.Command != command.AttributeCursor) || (forwarded && got.Command != "") {
t.Fatal(layout, numLock, got)
}
got = router.Key(0, code, 2, numLock, false)
if got.Command != "" || got.Forward != forwarded {
t.Fatal("held report", got)
}
router.Key(0, code, 0, numLock, false)
}
router.Key(0, code, 1, numLock, false)
if modifierFirst && layout == "laptop" {
router.Key(0, KeyInsert, 0, numLock, false)
}
router.Key(0, code, 0, numLock, false)
if !modifierFirst && layout == "laptop" {
router.Key(0, KeyInsert, 0, numLock, false)
}
if layout == "laptop" {
router.Key(0, KeyShift, 0, numLock, false)
}
if router.Held(0) {
t.Fatal("stuck attributes chord", layout)
}
if got := router.Key(0, 48, 1, numLock, false); !got.Forward || got.Command != "" {
t.Fatal("typing after attributes", got)
}
}
}
}
}
func TestAttributeToggleChordBothLayoutsNumLockAndReleases(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 _, numLock := range []bool{false, true} {
for _, modifierFirst := range []bool{false, true} {
router, err := New_router(bindings)
if err != nil {
t.Fatal(err)
}
router.Key(0, KeyInsert, 1, numLock, false)
got := router.Key(0, 74, 1, numLock, false)
if got.Command != command.ToggleAttributes || got.Forward || !got.Interrupt {
t.Fatal(layout, numLock, got)
}
if got := router.Key(0, 74, 2, numLock, false); got.Command != "" || got.Forward {
t.Fatal("repeat toggle", got)
}
releases := []uint16{74, KeyInsert}
if modifierFirst {
releases = []uint16{KeyInsert, 74}
}
for _, code := range releases {
if got := router.Key(0, code, 0, numLock, false); got.Command != "" || got.Forward {
t.Fatal("release", got)
}
}
if router.Held(0) {
t.Fatal("stuck toggle")
}
if got := router.Key(0, 48, 1, numLock, false); !got.Forward || got.Command != "" {
t.Fatal("typing", got)
}
}
}
}
}